等待元素出现在网页上的最佳方法是什么?我已经读过,我们可以使用隐式等待和函数,如webdriverwait,fluentwait等,但最后但不是最小的thread.sleep()...我使用最多,但想要完全停止使用。
我的情景:
用户登录网站...网站会检查凭据,并以覆盖的形式向用户提供优惠(弹出窗口类型,但不是单独的窗口)。我需要验证叠加层上的文字。 用户登录和显示叠加之间存在时间差。什么是最好的方法,以便硒只等到元素不可见的时候。由于叠加层不是单独的页面而是主页面的一部分,因此隐式等待根本不起作用。
欢迎所有建议...... :)
答案 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")));