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
答案 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 ));
然后尝试输入该文本。