繁体   English   中英

为什么 Selenium 在忙于加载另一个页面时不能执行 driver.get(URL)?

[英]Why can't Selenium exeute a driver.get(URL) when busy loading another page?

我使用 Selenium 在公共网站上自动执行任务。

首先,我通过输入用户名/密码然后单击登录在 https://somesite/login 登录。 之后我想加载另一个页面(https://somesite/anotherpage)。

第二步失败,因为在第一步之后开始页面 https://somesite/ 开始加载并且需要一些时间才能完成并且如果浏览器正忙于加载另一个页面,则driver.get(someURL)似乎不会执行。

  1. 如果在另一个页面尚未完成加载时执行driver.get(someURL)为什么会失败?

  2. 我真的需要使用 wait.until(ExpectedConditions... (或者是他们更好的选择吗?) 并在加载下一页之前验证 https://somesite/ 是否已完成加载?这不是浏览器在使用时的工作方式“手动”。

您可以尝试使用此代码等待元素可见。

private void waitForVisible(WebDriver driver, WebElement element) {
        try {
            WebDriverWait wait = new WebDriverWait(driver, 30);
            wait.until(ExpectedConditions.visibilityOf(element));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我实际上已经完成了一些网络自动化项目,其中我使用以下代码打开了多个选项卡:

((JavascriptExecutor) driver).executeScript("window.open()");//open new tab
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));//switch tabs
driver.get("link_to_open_in_new_tab");

这非常快,所以我建议你试试这个......即使你等待上一页完全加载,你也可以轻松切换标签:

driver.switchTo().window(tabs.get(tabnumber));

使用此代码,我从未遇到打开新标签页的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM