在我的AUT中有两个字段 - 'Product'
下拉列表和'Amount'
输入字段。默认情况下,'Amount'
字段会显示值'0.0'
。当用户从'Product'
下拉菜单中选择产品时,'Amount'
字段会自动填充所选产品的价格(如果价格已在数据库中提供),否则'Amount'
字段会显示{ {1}}。选择产品后,需要一段时间才能将金额加载到'0.0'
字段。我无法观察'Amount'
字段在自动填充之前和之后的属性值的任何变化。 'Amount'
字段的html是
'Amount'
问题是如何让webdriver在选择产品后等待金额字段刷新。我使用了<input id="id_expense_amt" class="form-control input" name="expense_amt" step="0.01" value="0" type="number">
,它运行正常。但是还有其他方法吗?
答案 0 :(得分:2)
基本上有两种方法可以使用WebDriverWait
实现此方案,如下所示: -
WebDriverWait wait = new WebDriverWait(driver, 10);
如果您已经知道从Amount
下拉列表中选择选项后Product
文字字段中的默认金额会有多少变化,那么您应该尝试使用ExpectedConditions.textToBePresentInElementValue
会等到指定元素值属性中存在给定数量,如下所示: -
webDriverWait.until(ExpectedConditions.textToBePresentInElementValue(By.id("id_expense_amt"), "Amount which would be change"));
如果您不知道从Amount
下拉菜单中选择一个选项后,Product
文字字段中的默认金额会有多少变化,但您知道默认金额是0
,那么您需要创建自定义ExpectedConditions
,等待金额从默认0
更改为任何新金额,如下所示: -
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
WebElement el = d.findElement(By.id("id_expense_amt"));
String value = el.getAttribute('value');
if(value.length() != 0 && !value.equals("0")) {
return true;
}
}
});
答案 1 :(得分:0)
如果您希望使用以下内容,可以根据需要更改时间单位。
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
你也可以使用这个
WebDriverWait wait = new WebDriverWait(getWebDriver(), 10);
WebElement element = wait.until(ExpectedConditions.visibilityOf(element));
答案 2 :(得分:0)
如果您知道应在金额文本框中填充的确切值,则可以使用ExpectedConditions.textToBePresentInElement
。
WebDriverWait wait = new WebDriverWait(driver, 60);
webDriverWait.until(ExpectedConditions.textToBePresentInElement(By.xpath("textbox xpath"), "text for which you are waiting"));