首先,我熟悉并多次阅读如何在Selenium中使用隐式和显式等待。我试过了:
driver.manage().timeouts().implicitlyWait()
driver.manage().timeouts().setScriptTimeout()
driver.manage().timeouts().pageLoadTimeout()
但是没有一个让浏览器等待。显式等待工作,但我不能每次与元素交互时添加显式等待(点击,搜索等)。你可以想象,我试图避免使用Thread.sleep()。
我使用Chromedriver作为司机听众。
提前谢谢你。
编辑:
我也试过了JavascriptExecutor,但也没有工作。也许我的实现是错误的,或者可能是因为它是同一页面。例如,我在网站内进行搜索。搜索后同一页面会重新加载,但驱动程序并不等待它加载结果。
这是执行程序的代码,添加在名为JobsPage的页面中: public void checkPageIsReady(){
JavascriptExecutor js = driver;
if (js.executeScript("return document.readyState").toString().equals("complete")){
System.out.println("Page Is loaded.");
return;
}
for (int i=0; i<25; i++){
try {
Thread.sleep(1000);
}catch (InterruptedException e) {}
//To check page ready state.
if (js.executeScript("return document.readyState").toString().equals("complete")){
break;
}
}
}
我在另一个名为JobsTest的类中加载的步骤之后调用它:
JobsPage jobsPage = new JobsPage(driver);
jobsPage.checkPageIsReady();
jobsPage.searchById("44684");
答案 0 :(得分:0)
我尝试过两种方式:
拳头
创建Web驱动程序实例后设置隐式等待:driver.manage()。timeouts()。implicitlyWait()
After navigate to that page call following method:
new WebDriverWait(driver, MyDefaultTimeout).Until(
d => ((IJavaScriptExecutor) d).ExecuteScript("return document.readyState").Equals("complete"));
**Second one:**
WebDriverWait wait = new WebDriverWait(driver, 20);
By itemonnextpage= By.xpath("//div[.='itemonnextpage']");
// get the "itemonnextpage" element
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(itemonnextpage));