Wait.until在Selenium WebDriver中不起作用

时间:2015-09-04 14:45:28

标签: java selenium selenium-webdriver

我试过这段代码:

var numberCount = 0;
var numberCountLimit = 2;
var letterCount = 0;
var letterCountLimit = 3;
$(document).ready(function() {
 $('.personalisation').keypress(function(key) {
        var currentText = $(this).val();
        numberCount = 0;
        letterCount = 0;
        for (var i = 0, len = currentText.length; i < len; i++) {
          if(currentText.charCodeAt(i) < 48 || currentText.charCodeAt(i) > 57) {
            //Is number
            if((numberCount+1) > numberCountLimit) {
              return false;
            }
            numberCount++;
          } else {
            //Is letter
            if((letterCount+1) > letterCountLimit) {
              return false;
            }
            letterCount++;
          }
        }

     return true;
 });
}

但是当我执行此代码时,我正在执行By by7 = By.xpath(".//*[@id='i2']/div[2]/div[1]"); WebDriverWait wait7 = new WebDriverWait(driver, 10); WebElement elem7 = wait7.until(ExpectedConditions.elementToBeClickable(by7)); driver.findElement(By.xpath(".//*[@id='i2']/div[2]/div[1]")).click();

  

命令持续时间或超时:11毫秒

我如何通过此例外?

1 个答案:

答案 0 :(得分:0)

等待可点击的元素与等待它可见是无关的。您可能需要确保拥有正确的元素,并且它应该/将变得可见。您可以改变wait.until()以等待元素变为可见。

wait.until(ExpectedConditions.visibilityOfElementLocated(by7))

只是一个FYI ...您的最后一个声明,您可以使用从wait.until()返回的元素并单击它。这样做:elem7.click();我不知道这是否会解决您的问题,只是我注意到的效率。

因此更新的代码将是

By by7 = By.xpath(".//*[@id='i2']/div[2]/div[1]");
WebDriverWait wait7 = new WebDriverWait(driver, 10);
WebElement elem7 = wait7.until(ExpectedConditions.visibilityOfElementLocated(by7));
elem7.click();