在写入iFrame时需要帮助

时间:2015-10-12 14:01:29

标签: javascript html iframe selenium-webdriver

我遇到了写入iframe的问题,我能够识别iframe,但我无法在框架中写入任何内容。每当我尝试写入框架时,我都会遇到错误。

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Command duration or timeout: 211 milliseconds
Build info: version: '2.43.1', revision: '5163bce', time: '2014-09-10 16:27:33'

This是我的HTML代码的屏幕截图。

HTML代码段

<div id="offer_description_field" class="control-group wysihtml5_type description_field ">
    <label class="control-label" for="offer_description">
        Description
    </label>
    <div class="controls well">
        <ul class="wysihtml5-toolbar" style="">
        <textarea id="offer_description" class="bootstrap-wysihtml5ed" rows="3" name="offer[description]" data-richtext="bootstrap-wysihtml5" data-options="{"csspath":"/assets/bootstrap-wysihtml5.css","jspath":"/assets/bootstrap-wysihtml5.js","config_options":"null"}" cols="48" style="display: none;"></textarea>
        <input type="hidden" name="_wysihtml5_mode" value="1">
        <iframe class="wysihtml5-sandbox" width="0" height="0" frameborder="0" security="restricted" allowtransparency="true" marginwidth="0" marginheight="0" style="display: inline-block; background-color: rgb(255, 255, 255); border-collapse: separate; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; clear: none; float: none; margin: 0px; outline: 0px none rgb(0, 0, 0); outline-offset: 0px; padding: 4px 6px; position: static; z-index: auto; vertical-align: middle; text-align: start; box-sizing: content-box; box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.075) inset; border-radius: 4px; width: 327.8px; height: 60px; top: auto; left: auto; right: auto; bottom: auto;"></iframe>
        <p class="help-block">Required. Add offer description.</p>
    </div>
</div>

当我使用上面的代码片段创建一个简单的HTML文件时,我无法与元素进行交互。手动我可以在这个iframe中编写任何内容,当它带有完整的代码库时。看起来它正在用iframe替换textarea。不知道如何处理这种类型的元素。

This就是它在面板上的显示方式。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

在使用框架时,您应该注意以下事项: 1.选择框架。 然后进入文本/ textarea。 注意:有时元素不在UI的可见区域中,因此我们可能需要将元素带入视口,在进入text / textarea之前,在下面的代码spinet之后: WebElement element = driver.findElement(By.id(“id_of_element”)); ((JavascriptExecutor)驱动程序).executeScript(“arguments [0] .scrollIntoView(true);”,element);

2.然后取消选择框架。

希望这对你有用。

答案 1 :(得分:0)

此错误与IFRAME无关。事实上,您正在与之交互的元素并不在IFRAME中。您无法与之互动的原因在错误中说明。

  

org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互

该元素不可见。如果您查看TEXTAREA元素,则会标记为style="display: none;",这就是它不可见的原因。 Selenium旨在以用户的身份与页面进行交互,因此不会与隐藏元素进行交互。您将需要以用户的方式解决此问题...用户将如何显示该文本区域?我假设点击某些内容等等。您将需要您的脚本执行用户将执行的任何操作,然后TEXTAREA将变为可见,并且能够与之进行交互。

答案 2 :(得分:0)

使用以下代码

,按iframe切换到id/class
driver.switchTo().frame(driver.findElement(By.id("Enter id of element")));

OR

driver.switchTo().frame(driver.findElement(By.class("Enter class of element")));

切换到框架后,按正常步骤选择元素。 喜欢

driver.findelement(By.id/class/css/xpath("Enter Element id/class/css/xpath"));

然后,如果您想从主框架中选择任何其他元素,只需使用以下代码返回主框架

driver.switchTo().defaultContent();