Pet*_*ček 37
Selenium为你做到了.或者至少它会尽力而为.有时它不足,你必须帮助它一点点.通常的解决方案是Implicit Wait解决大多数问题.
如果您真的知道自己在做什么,以及为什么要这样做,您可以尝试编写一个通用方法来检查页面是否已完全加载.但是,不能为每个网络和每种情况做到这一点.
相关问题:Selenium WebDriver:等待加载JavaScript(JS)的复杂页面,请在那里查看我的答案.
更短的版本:你永远不会确定.
"正常"负载很容易 - document.readyState.当然,这个是由Selenium实现的.有问题的是异步请求,AJAX,因为你永远无法判断它是否为好.今天的大多数网页都有永久运行的脚本,并且一直在轮询服务器.
您可以做的各种事情都在上面的链接下.或者,像95%的其他人一样,在必要时使用Implicit Wait隐含性和Explicit Wait+ ExpectedConditions.
例如,点击后,页面上的某些元素应该可见,您需要等待它:
WebDriverWait wait = new WebDriverWait(driver, 10); // you can reuse this one
WebElement elem = driver.findElement(By.id("myInvisibleElement"));
elem.click();
wait.until(ExpectedConditions.visibilityOf(elem));
Run Code Online (Sandbox Code Playgroud)
简单的ready2use片段,非常适合我
static void waitForPageLoad(WebDriver wdriver) {
WebDriverWait wait = new WebDriverWait(wdriver, 60);
Predicate<WebDriver> pageLoaded = new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
return ((JavascriptExecutor) input).executeScript("return document.readyState").equals("complete");
}
};
wait.until(pageLoaded);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73534 次 |
| 最近记录: |