在 Selenium WebDriver 中浏览时避免执行停止

Avoid the execution stop while browsing in Selenium WebDriver

我需要帮助来解决这件让我发疯的事情。 我想在无限循环中检查浏览器 url,在一个循环和另一个循环之间稍等 (Thread.Sleep),以免 CPU 过载。然后,如果浏览器url是我需要的,我想在页面完全加载之前通过Java脚本add/change/remove一个元素,否则使用这个的人可以看到变化。 (我不需要 javascript 部分的帮助) 但是有一个问题:似乎在 Selenium Webdriver 中,当我导航到一个页面时(使用 .get()、.navigate().to() 或直接从客户端),执行被迫停止,直到页面加载完毕. 我尝试设置 "fake" 超时,但是(至少在 Chrome 中)当它捕获 TimeoutException 时,页面停止加载。我知道在 Firefox 中有一个用于不稳定加载的选项,但我不想使用它,因为我的程序不仅适用于 Firefox。

public static void main(String[] args) throws InterruptedException {        
    System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS); // Fake timeout
    while (true) {
        try {
            // If the url (driver.getCurrentUrl()) is what I want, then execute javascript without needing that page is fully loaded
            // ...
            // ...               
        }
        catch (TimeoutException e) {
             // It ignores the Exception, but unfortunately the page stops loading.
        }
        Thread.sleep(500); // Then wait some time to not overload the cpu
    }
}

我需要在 Chrome 中执行此操作,如果可能,请使用 Firefox 和 Internet Explorer。我正在 Java 编程。提前致谢。

Selenium 设计为在网页加载到浏览器后停止,以便继续执行。

对于您的情况,有两种选择:

1) 如果浏览器 url 会在任意时间自动更改 (ajax),那么请继续获取浏览器 url 直到您的条件满足。

while(currentURL.equals("Your Condition")){
  currentURL = driver.getCurrentUrl();
  Thread.sleep(2000);
}

2) 如果浏览器需要刷新,请循环使用刷新方法,直到获得所需的 url

while(currentURL.equals("Your Condition")){
    driver.navigate().refresh();
    currentURL = 
    Thread.sleep(2000);
}

众所周知,如果用户尝试使用 driver.get("url");,selenium 会等待页面加载完毕(可能不会很长)。所以如果你想在导航到 URL 时做一些事情而不等待总加载时间使用下面的代码而不是 get 或 navigate

    JavascriptExecutor js=(JavascriptExecutor)driver;
    js.executeScript("window.open('http://seleniumtrainer.com/components/buttons/','_self');");

此后使用

driver.findElement(By.id("button1")).click();

单击按钮,但我没有收到此类元素异常,因此我预计它不会等待页面加载。所以页面加载速度非常快,点击工作正常。

我希望这能帮助您解决启动时遇到的问题。 for循环我希望已经提供了解决方案。

谢谢