Selenium Webdriver - 等待之间的差异

时间:2015-07-29 07:17:40

标签: selenium selenium-webdriver webdriver wait

WebDriverWait和FluentWait有什么区别。我理解WebDriverWait扩展了FluentWait。 Webdriverwait派生了FluentWait的所有方法。我何时使用WebdriverWait而不是FluentWait?

4 个答案:

答案 0 :(得分:1)

以下是一些外部网站/博客,以极好的方式解释了硒中WAIT的区别:

1 - TOOLSQA - DIFFERENT SELENIUM WAITS

2 - BLOG - THESOFTWARETESTING.COM

3 - BLOG - SOFTWARE TESTING HELP

答案 1 :(得分:0)

在FluentWait实现中,您可以配置timeoutfrequency来检查条件。除此之外,您还可以配置为忽略某些类型的异常。

示例:

// Waiting 30 seconds for an element to be present on the page, checking // for its presence once every 5 seconds. Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(30, SECONDS) .pollingEvery(5, SECONDS) .ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(By.id("foo")); } });

您可以参考here

答案 2 :(得分:0)

FluentWait是Wait接口的一种实现,可以动态配置其超时和轮询间隔。

每个FluentWait实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在搜索页面上的元素时使用NoSuchElementExceptions。

样本用法:

//等待30秒,页面上有一个元素,检查    //每隔5秒钟出现一次。

  Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
   .withTimeout(30, SECONDS)
   .pollingEvery(5, SECONDS)
   .ignoring(NoSuchElementException.class);

 WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
 public WebElement apply(WebDriver driver) {
   return driver.findElement(By.id("foo"));
  }
  });

答案 3 :(得分:0)

回答这个问题可能要迟一点。但是,我很想回答它。

FluentWait是一个通用类,FluentWait&lt; T&gt; T可以是任何东西。它可以是WebElement,也可以是您要传递的自定义类。使用该类可以应用等待逻辑。请注意FluentWait的.until(&lt; Predicate&gt;或&lt; Function&gt;)方法。该方法将获得Predicate&lt; T&gt;。或函数&lt; T,Y&gt;基于你上面传递的T。

我们了解到,在FluentWait中,您可以传递任何引用类。这使得FluentWait适用于您要实现的任何等待逻辑。

相反,WebDriverWait仅为WebDriver配置。在WebDriverWait.until方法中,您始终可以创建谓词&lt; WebDriver&gt;或函数&lt; WebDriver,Y&gt;。

所以在伪代码中WenDriverWait = FluentWait&lt; WebDriver&gt;就是这样。要理解until方法,函数和谓词。我在这里写了一篇教程:http://toolsqa.com/selenium-webdriver/advance-webdriver-waits/