2016-11-22 12 views
0

私は混乱していますFluent Wait & WebDriver Waitです。流暢な待機とWebDriver待ち

Fluent Wait & WebDriver waitは、例外を無視するように同じ機能を使用して、ポーリング間隔を変更、予想される条件など

を私の理解あたりとしては両方(流暢& WebDriverWait)はWAITインタフェースを実装していること、さらにWebDriverWaitはFluentWait(手段を拡張して、両方のすべてのFluentWait機能がWebDriverWaitにあります)。 FluentWaitに存在しないWebDriverWaitの追加機能は何ですか?

答えて

0

FluentWaitとWebDriverWaitは両方ともWaitインターフェイスの実装です。

Fluent WebDriver Explicit WaitとWebDriver Explicit Waitを使用する目標は、ほぼ同じです。しかし、FluentWaitは柔軟性があります。どちらのクラスも同じWaitインターフェースの実装であるため、どちらも同じ機能を持っています。FluentWaitには、メソッドまで述部または関数を引数として受け入れる機能があります。一方、WebDriverWaitは、メソッドまではExpectedConditionの関数のみを受け入れます。これはブール値の戻り値のみを使用するように制限します.FredentWaitでPredicateを使用すると、Objectからuntilメソッドを返すことができます。ここで慎重に

ルック:​​

例:文字列のリターンとまでで引数として A FluentWait持つ機能:

public void exampleOfFluentWait() { 
     WebElement foo = driver.findElement(By.id("foo")); 
     new FluentWait<WebElement>(foo) 
      .withTimeout(10, TimeUnit.SECONDS) 
      .pollingEvery(2, TimeUnit.SECONDS) 
        .until(new Function<WebElement, String>() { 
         @Override 
         public String apply(WebElement element) { 
          return element.getText(); 
         } 
        }); 
    } 

までで引数としてブールリターンで機能を有する同一FluentWait方法。

public void exampleOfFluentWait() { 
      WebElement foo = driver.findElement(By.id("foo")); 
      new FluentWait<WebElement>(foo) 
       .withTimeout(10, TimeUnit.SECONDS) 
       .pollingEvery(2, TimeUnit.SECONDS) 
         .until(new Function<WebElement, Boolean>() { 
          @Override 
          public Boolean apply(WebElement element) { 
           return element.getText().contains("foo"); 
          } 
         }); 
     } 

さらに1つのFluentWait with Predicate。 WebDriverWaitの

public void exampleOfFluentWithPredicate() { 
    WebElement foo = driver.findElement(By.id("foo")); 
    new FluentWait<WebElement>(foo) 
     .withTimeout(10, TimeUnit.SECONDS) 
     .pollingEvery(100, TimeUnit.MILLISECONDS) 
       .until(new Predicate<WebElement>() { 
        @Override 
        public boolean apply(WebElement element) { 
         return element.getText().endsWith("04"); 
        } 
       }); 
} 

例:

public void exampleOfWebDriverWait() { 
     WebElement foo = driver.findElement(By.id("foo")); 

     new WebDriverWait(driver, 10) 
     .pollingEvery(2, TimeUnit.SECONDS) 
     .withTimeout(10, TimeUnit.SECONDS) 
     .until(ExpectedConditions.visibilityOf(foo)); 
    } 
+0

また、WebDriverWaitでポーリング時間を使用および定義することもできます。 –

+0

@DeepakKakkarHaveが私の答えを変えました。 –

1

実際には両者の間にはほとんど違いがあります。 WebDriverwaitソースコードによると、それは言う:それは 遭遇しているNotFoundExceptionのインスタンスを無視します

*「」までの条件では、デフォルトで(スロー)、そしてすぐに は、他のすべてを伝播します。あなたは唯一の違いはWebDriverWaitに例外無知メカニズムを発見していないデフォルトの要素があるある

(追加するための例外を)無視呼び出す によって*無視リストにさらに追加することができます。 WebDriverWaitがそれを拡張して以来、すべての機能は流暢な待機とまったく同じです。