4

get(url) 方法等待网页完全加载。如果页面上有很多东西,加载可能会很慢。

有没有办法导航到目标网页并只等待感兴趣的 WebElement?(即不是横幅、广告等)

谢谢!

4

2 回答 2

4

您可以使用Page load timeout。据我所知, and 肯定支持这一点FirefoxDriverInternetExplorerDriver但我不确定其他驱动程序。

driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS);
try {
    driver.get("http://google.com");
} catch (TimeoutException ignored) {
    // expected, ok
}

或者您可以使用 JavaScript 进行非阻塞页面加载:

private JavascriptExecutor js;

// I like to do this right after driver is instantiated
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor)driver;
}

// later, in the test, instead of driver.get("http://google.com");
js.executeScript("window.location.href = 'http://google.com'");

这两个示例都会加载 Google,但它们driver会立即将实例的控制权返回给您,而不是等待整个页面加载。然后,您可以简单地等待您正在寻找的一个元素。


如果您不希望仅在 上使用此功能WebDriver#get(),但也需要在 nonblocking 上click(),则可以执行以下操作之一:

  1. 使用如上所示的页面加载超时。
  2. 使用高级用户交互 API ( JavaDocs )

    WebElement element = driver.findElement(By.whatever("anything"));
    new Actions(driver).click(element).perform();
    
  3. 再次使用 JavaScript:

    WebElement element = driver.findElement(By.whatever("anything"));
    js.executeScript("arguments[0].click()", element);
    
于 2013-10-11T09:11:24.613 回答
0

以下网址可能会对您有所帮助。

使用 WebDriver 暂时绕过隐式等待

https://code.google.com/p/selenium/issues/detail?id=4993

于 2013-10-11T07:14:42.590 回答