我正在尝试将密钥发送给输入,但我不知道为什么它会像这样警告我:
org.openqa.selenium.InvalidElementStateException:元素不能隐藏,禁用或只读(警告:服务器未提供任何堆栈跟踪信息)
HTML网页来源:
<span id="mini-7" class="mini-textbox mini-textbox-empty" style="border-width: 0pt; width: 342px;">
<input class="mini-textbox-input" type="text" autocomplete="off" style="width: 338px;">
<input type="hidden">
</span>
我的代码:
driver.findElement(By.cssSelector("#mini-7 > input.mini-textbox-input")).clear();
driver.findElement(By.cssSelector("#mini-7 > input.mini-textbox-input")).sendKeys("yy");
然后我改变我的代码:
JavascriptExecutor jse = (JavascriptExecutor)driver;
((JavascriptExecutor) jse).executeScript("arguments[0].type ='text';",driver.findElement(By.xpath("//span[@id='mini-7']/input[2]")));
但是这次它抛出了js错误。为什么呢?
我使用sendkeys到第一个输入,这个输入没有隐藏
答案 0 :(得分:1)
该输入仍然可以包含css属性visibility: hidden
或display: none
。这就是异常告诉你的。使用浏览器的开发工具检查所有属性。
答案 1 :(得分:1)
首先,它需要将type属性的值更改为隐藏的文本。现在,您可以使用WebDriver在该文本上键入内容。因此,使用Java和Javascript键入WebDriver的整体代码如下:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('mini-7').setAttribute('type', 'text');");
driver.findElement(By.cssSelector("#mini-7 > input.mini-textbox-input")).clear();
driver.findElement(By.cssSelector("#mini-7 > input.mini-textbox-input")).sendKeys("yy");
对于未隐藏的第一个输入字段,请使用cssSelector的绝对路径。
答案 2 :(得分:0)
在这种情况下,您可以通过修改
的css标记使元素可见visibility: hidden
或
display: none
在向其发送密钥之前使用javascript。