Selenium不会读取当前输入值

时间:2014-01-31 18:34:51

标签: java jquery selenium

我在一个使用jquery更改已禁用输入文本框值的站点上运行Selenium。查看HTML,即使值明显更改,输入框的值仍继续显示“Not Available”。

我可以使用Firebug和

获取当前值
$("#inputid").val() 

但是当我使用我的硒代码时,我得到的值“不可用:

driver.findElement(By.id("inputid")).getAttribute("value");

有关如何在Selenium中获取此值的任何建议?我想避免尝试使用像JavascriptExecutor这样的东西,但如果这是最好的解决方案,那将很高兴知道。

我无法访问jQuery代码,因此我无法帮助您。对不起: - /

1 个答案:

答案 0 :(得分:2)

如果由于某些DOM事件而导致jQuery更改了该值,则您的Selenium测试可能会过快地检查新值。您可以在更改之后获得价值" Not Available"用这样的东西:

WebDriverWait wait = new WebDriverWait(driver,10);

String value = wait.until(new ExpectedCondition<String>() {
    public String apply(WebDriver driver) {
        String value = driver.findElement(By.id("inputid")).getAttribute("value");

        if value.equals("Not Available")
            return null;

        return value;
    }
});

(免责声明:自从我编写Java代码以来已经很久了,所以我可能已经在上面的代码中搞砸了。)wait.until调用将运行apply方法,直到它返回的不是null。它将等待最多10秒。 wait.until返回的值将是终止结束的apply最后返回的值。换句话说,它将返回元素的 new 值。

你说

  

查看HTML,输入框的值继续说&#34; Not Available&#34;即使价值明显改变了。

是的,这是DOM的一个怪癖。更改输入字段的值时,表示输入字段的元素上的value 属性不会更改。元素上的value 属性有哪些更改。这就是为什么你必须$("#inputid").val(),而不是$("#inputid").attr('value')