有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

org.openqa.selenium.InvalidElementStateException: Element must not be hidden, disabled or read-only (WARNING: The server did not provide any stacktrace information)

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) 个答案

  1. # 1 楼答案

    在这种情况下,您可以通过修改

    visibility: hidden 
    

    或者

    display: none
    

    在发送密钥之前使用javascript

  2. # 2 楼答案

    首先,它需要将type属性的值从hidden改为text。现在,您可以使用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的绝对路径

  3. # 3 楼答案

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