Selenium:如何在iframe中的div中输入文本

时间:2017-11-07 05:57:07

标签: javascript java selenium

HTML code:

<div class="listRte__editorFrame">   
     <iframe src="about:blank" style="height: 150px;">
           #document
                <html>
                   <head>
                       <body>
                            <button class="__clipped">
                                  <div data-ghosttext="Add a detailed description here." contenteditable="true">
                                   ::after
                                  </div>
                             </button>
                        </body>
                    </head>
              </html>
        </iframe>
 </div>

我想在div中输入一个文本。 手动添加文本后的Html:

<div contenteditable="true">abcd</div>

我尝试使用javascript输入文字:

JavascriptExecutor jse = (JavascriptExecutor)driver;
        jse.executeScript("document.evaluate('//div[@data-ghosttext=\"Add a detailed description here.\"]', document, null, 9, null).singleNodeValue.innerHTML="+ "\"abc\"");

但它给了我错误:

  

org.openqa.selenium.JavascriptException:TypeError:   document.evaluate(...)。singleNodeValue为null

我也尝试过切换到iframe,但在切换到iframe时无法识别div。此外,当我尝试执行命令时,我得到size=0。但是,当我检查元素时,页面上有3个iframe。

 int size = driver.findElements(By.tagName("iframe")).size();

我可以在Java / js中获取确切的命令,我可以在div元素中输入内容。 我使用testng框架研究selenium

3 个答案:

答案 0 :(得分:1)

  

但它给了我错误:org.openqa.selenium.JavascriptException:   ReferenceError:未定义abcd

abcd也需要引用

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.evaluate('//html//body//div', document, null, 9, null).singleNodeValue.innerHTML="+ "'abcd'");

转义双引号

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.evaluate('//html//body//div', document, null, 9, null).singleNodeValue.innerHTML="+ "\"abcd\"");

或者只是

jse.executeScript("document.querySelector( 'div' ).innerHTML = " + "'abcd'" );

答案 1 :(得分:1)

您必须先切换到合适的<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <input type="text" name="date" placeholder="date (dd/mm/yy)" maxlength=10 id="txtDate">,然后尝试传递frame中的任何文字,如下所示:

div

答案 2 :(得分:0)

要获取列表,请尝试:

List<WebElement> listFrames = driver.findElements(By.tagName("iframe"));
System.out.println("list frames   "+listFrames.size());

接着 切换到框架

driver.switchTo().frame(listFrames.get( frameIndex ));

然后尝试输入该文本。