java - Selenium WebDriver get(url) 速度问题

标签 java selenium asynchronous webdriver wait

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

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

谢谢!

最佳答案

您可以使用 Page load timeout .据我所知,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() 上使用此功能,但您也想要一个非阻塞的 click(),您可以这样做其中之一:

  1. 如上所示使用页面加载超时。
  2. 使用 The Advanced User Interactions 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);
    

关于java - Selenium WebDriver get(url) 速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311161/

相关文章:

java - 使用javac编译时为"packaged does not exist"

java - 谁在 Spring MVC (@ResponseBody) 中设置响应内容类型

python - td 数据的网络抓取

python - 如何为Safari 的Selenium 设置UA 和Headless?

c# - 方法 "Partial"返回

java - Flying Saucer 接受 HTML 而非 XHTML

java - 为什么RecyclerView在BottomNavigationView下面?

javascript - Protractor 找不到具有 id 的元素

c# - 您认为 F# 的异步工作流将来会在 C# 中引入吗?

c++ - 2个 future 之间的依赖