繁体   English   中英

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

[英]Avoid the execution stop while browsing in Selenium WebDriver

我需要帮助这件事使我发疯。 我想检查浏览器的URL和无限循环,在一个循环和另一个循环之间稍等(Thread.Sleep),以免CPU过载。 然后,如果我需要浏览器的URL,我想在页面完全加载之前通过Javascript添加/更改/删除元素,否则使用此元素的人可能会看到更改。 (我不需要javascript部分的帮助)但是有一个问题:在Selenium Webdriver中,当我导航到页面时,似乎是使用.get()、. navigate()。to()或直接从客户端),系统将强制执行停止直到页面加载完毕。 我尝试设置“假”超时,但是(至少在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)如果浏览器网址将在任意时间自动更改(ajax),则只需不断获取浏览器网址,直到您的条件得到满足。

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

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

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

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

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

此后使用

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

单击按钮,但我没有得到这样的元素异常,所以我期望它不等待页面加载。 因此可以非常快速地加载页面并单击即可正常工作。

我希望这将帮助您在启动时弄清楚您的问题。 对于循环,我希望已经提供解决方案。

谢谢

暂无
暂无

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

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