java - Selenium webdriver 新选项卡 URL 未正确加载
问题描述
我正在尝试从 tab1 打开一个新选项卡(现在我有两个不同的选项卡。Tab1 和 Tab2),带有 URL 的第二个选项卡未完全加载,而是停在中间并将选项卡显示为无标题。
public void waitForPageLoadComplete(WebDriver driver, int specifiedTimeout) {
Wait<WebDriver> wait = new WebDriverWait(driver, specifiedTimeout);
wait.until(driverTemp -> String.valueOf(((JavascriptExecutor) driverTemp).executeScript("return document.readyState"))
.equals("complete"));
}
在上面的代码中,我让驱动程序等待特定时间以正确加载页面或返回超时,但上面的代码也不起作用,如果我使用 Thead.sleep(millSec),线程会等待一段时间,直到那时页面正在加载而没有任何错误。有人可以帮助我如何在不使用 thread.sleep 的情况下在新选项卡中加载 URL。
解决方案
首先,您必须将驱动程序切换到应该执行 javascript 的选项卡。我用这个:
public void goto2() throws InterruptedException {
ArrayList<String> winHandles = new ArrayList<String> (driver.getWindowHandles());
// it takes some ms to get the WindowHandles, so this solution does not avoid Thread.sleep completely
Thread.sleep(500);
driver.switchTo().window(winHandles.get(1));
}
另一件事是javascript本身。要等待页面完全加载,我使用这个:
public void waitDom() {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.onload = null;");
}
推荐阅读
- git - 如何断开项目与 github 存储库的连接并连接到另一个?
- nlp - 我想在使用@sys.date 后只打印日期而不是时间,而不在对话框流中使用 webhook
- google-cloud-platform - 为什么将 --package-path 设置为本地目录会在 gcloud 中给出 python not found 错误?
- html - 如何突出显示选定月份的范围
- c# - 当表格很大时,有没有办法让 SelectPDF 在表格行之间中断?
- python - 具有比较条件的列表推导中的列表推导
- python - 数值数据集的决策树叶节点条件
- html - 如何为表格中的每个单元格加边框?
- python - 循环槽元素(Selenium)时如何解决StaleElementReferenceException
- presto - 使用后备机制替代 presto