如何使用Java在WebDriver中的隐藏文本框上键入文本

时间:2012-12-25 05:36:21

标签: java javascript input selenium-webdriver hidden-field

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

  

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

3 个答案:

答案 0 :(得分:1)

该输入仍然可以包含css属性visibility: hiddendisplay: 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。