如何在Selenium webdriver中等待输入字段刷新

时间:2016-09-28 04:51:47

标签: java selenium-webdriver

在我的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"> ,它运行正常。但是还有其他方法吗?

3 个答案:

答案 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.textToBePresentInEl‌ement

WebDriverWait wait = new WebDriverWait(driver, 60); 
webDriverWait.until(ExpectedConditions.textToBePresentInEl‌ement(By.xpath("text‌​box xpath"), "text for which you are waiting"));