3

我需要帮助这件让我发疯的事情。我想检查浏览器 url 和无限循环,在一个循环和另一个循环之间等待一点(Thread.Sleep),以免 CPU 过载。然后,如果浏览器 url 是我需要的,我想在页面完全加载之前通过 Javascript 添加/更改/删除一个元素,否则使用它的人可以看到更改。(我不需要 javascript 部分的帮助)但是有一个问题:似乎在 Selenium Webdriver 中,当我导航到页面时(使用 .get()、.navigate().to() 或直接从客户端) 执行被强制停止,直到页面被加载。我试图设置一个“假”超时,但是(至少在 Chrome 中)当它捕获 TimeoutException 时,页面停止加载。我知道在 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 编程。提前致谢。

4

2 回答 2

0

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);
}
于 2015-12-31T01:41:46.747 回答
0

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

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

在此使用后

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

点击按钮,但我没有得到这样的元素异常,所以我期待它不会等待页面加载。所以页面加载速度非常快,点击工作正常。

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

谢谢

于 2015-12-31T10:13:12.307 回答