Selenium WebDriver等待按钮启用的最佳方法是什么?

时间:2016-11-30 22:55:45

标签: selenium-webdriver

我正在使用应用程序的webdriverjs创建一个自动化测试程序,其中“下一步”按钮通常会被禁用一段时间,然后启用。自动化等待按钮变为启用状态,然后单击按钮。

按钮的类特别是从'btn btn-next disabled'转换为'btn btn-next'

我已经提出了以下解决方案,但想知道是否有更好的方法?

browser.wait(until.elementLocated(By.css('nav a[class="btn btn-next"]')),
timeout, 'button still disabled after timeout').then(function() {
   browser.findElement(By.css('nav a[class="btn btn-next"]')).click();
});

这似乎可以解决问题。

最初我的想法是运行如下功能:

tryToClick = function(element){
  var classValue = element.getAttribute("class");
  isDisabled = classValue.search('disabled') !== -1 ? true : false;
  if(isDisabled){
    setTimeout(function () {
      tryToClick(element);
    }, 500);
  } else {
  element.click();
  }
} 

但是,搜索,拆分,包含等方法会导致错误。有谁知道为什么?

3 个答案:

答案 0 :(得分:1)

Webdriver JS中,您可以使用until.elementIsDisableduntil.elementIsEnabled

var theButton = driver.findElement(By.css('nav a[class="btn"));
driver.wait(until.elementIsDisabled(theButton)), 10000, 'element is still enabled, sorry.').then(function(){
   theButton.click();
});

但看起来你正在选择一整类按钮,如果是这样,请确保迭代它们并单击你想要的按钮,或者使用css nth-child();

答案 1 :(得分:0)

我通常使用Java和C#,但JS中应该有一个等效的选项。您将需要使用Until.ElementIsEnabled()。

进行显式等待

如果没有上述wait..until的等价物,则可以使用element.isEnabled()== false代替isDisabled变量来解决此问题。在你的代码中。

答案 2 :(得分:0)

功能名称为elementToBeClickable()

示例:

WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(By.css('nav a[class="btn btn-next"]')));