使用Selenium webdriver等待元素

时间:2013-08-05 16:45:04

标签: selenium selenium-webdriver

等待元素出现在网页上的最佳方法是什么?我已经读过,我们可以使用隐式等待和函数,如webdriverwait,fluentwait等,但最后但不是最小的thread.sleep()...我使用最多,但想要完全停止使用。

我的情景:

用户登录网站...网站会检查凭据,并以覆盖的形式向用户提供优惠(弹出窗口类型,但不是单独的窗口)。我需要验证叠加层上的文字。 用户登录和显示叠加之间存在时间差。什么是最好的方法,以便硒只等到元素不可见的时候。由于叠加层不是单独的页面而是主页面的一部分,因此隐式等待根本不起作用。

欢迎所有建议...... :)

4 个答案:

答案 0 :(得分:0)

始终使用隐式等待。我认为Selenium默认为5秒,所以如果你做一个driver.findElement(),暗示它会等待5秒钟。应该这样做。如果您遇到的情况是所需的时间是不可预测的,那么使用FluentWait(具有相同的5秒超时),但也使用.ignoring方法并将其包装在while循环中。这是基本的想法:

int tries=0;
while ( tries < 3 ) {
  //fluent wait (with .ignoring) inside here
  tries ++1;
}

答案 1 :(得分:0)

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.id("optionsBuilderSelect_input")));

我是专业的刮刀(http://nitinsurana.com)我用硒写了30多个软件,我从来没有遇到任何这样的问题,不管怎样,上面是一个示例代码。

所有我能想到的是,直到条件必须被检查,因为很多次元素已经可见,但它们不是可点击的,类似的东西。我想你应该尝试不同的选择,我希望你能找到所需的选项。

答案 2 :(得分:0)

public boolean waitForElement(WebElement ele, String xpath, int seconds) throws InterruptedException{
    //returns true if the xpath appears in the webElement within the time
    //false when timed out
    int t=0;
    while(t<seconds*10){
        if(ele.findElements(By.xpath(xpath)).size()>0)
            return true;
        else{
            Thread.sleep(100);
            t++;
            continue;
        }
    }       
    System.out.println("waited for "+seconds+"seconds. But couldn't find "+xpath+ " in the element specified");
    return false;
}

答案 3 :(得分:0)

您可以等待元素的存在,如下所示:

new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.id("someId")));