簡體   English   中英

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

[英]Selenium : How to enter text in div inside an iframe

HTML代碼:

<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框架開發硒

但這給了我錯誤: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'" );

您必須先切換到適當的frame然后嘗試按以下方式在div傳遞任何文本:

driver.switchTo().frame(driver.findElement(By.xpath("//div[@class='listRte__editorFrame']//following::iframe[1]")));

要獲取列表,請嘗試:

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

下一個切換到相框

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

然后嘗試輸入該文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM