1

我正在尝试将密钥发送到输入,但我不知道为什么它会这样警告我:

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,这个输入没有隐藏

4

3 回答 3

1

该输入仍可能具有 css 属性visibility: hiddendisplay: none. 这就是异常告诉你的。使用浏览器的开发工具检查所有属性。

于 2012-12-25T16:24:34.133 回答
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 的绝对路径。

于 2013-01-22T11:21:56.043 回答
0

在这种情况下,您可以做的是通过修改 css 标签使元素可见

visibility: hidden 

或者

display: none

在向其发送密钥之前使用 javascript。

于 2013-01-07T11:21:26.327 回答