我在一个使用jquery更改已禁用输入文本框值的站点上运行Selenium。查看HTML,即使值明显更改,输入框的值仍继续显示“Not Available”。
我可以使用Firebug和
获取当前值$("#inputid").val()
但是当我使用我的硒代码时,我得到的值“不可用:
driver.findElement(By.id("inputid")).getAttribute("value");
有关如何在Selenium中获取此值的任何建议?我想避免尝试使用像JavascriptExecutor这样的东西,但如果这是最好的解决方案,那将很高兴知道。
我无法访问jQuery代码,因此我无法帮助您。对不起: - /
答案 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')
。