1

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

我的场景:

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

欢迎所有建议... :)

4

4 回答 4

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

我是一名专业的爬虫(http://nitinsurana.com)我已经使用 selenium 编写了 30 多个软件,而且我从未遇到过任何此类问题,无论如何上面是一个示例代码。

我能想到的就是必须检查直到条件的内容,因为很多时候元素已经可见,但它们不可点击等等。我想您应该尝试不同的选项,希望您能找到所需的选项。

于 2013-08-06T02:04:34.670 回答
0

始终从使用隐式等待开始。我认为 Selenium 默认为 5 秒,因此如果您执行 driver.findElement(),则意味着它将等待长达 5 秒。那应该这样做。如果您遇到所需时间不可预测的情况,请使用 FluentWait(具有相同的 5 秒超时)但也使用 .ignoring 方法并将其包装在 while 循环中。这是基本思想:

int tries=0;
while ( tries < 3 ) {
  //fluent wait (with .ignoring) inside here
  tries ++1;
}
于 2013-08-05T23:39:39.607 回答
0

您可以等待元素出现,如下所示:

new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.id("someId")));
于 2013-08-16T08:30:28.557 回答
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;
}
于 2013-08-06T07:25:51.967 回答