2016-11-22 1 views
0

Ich bin verwirrt zwischen Fluent Wait & WebDriver Wait.Fließend warten vs WebDriver Warten

Fluent Wait & WebDriver wait beide gleichen Funktionen wie ignoriert Ausnahmen verwendet, Intervall-Abfragezeitänderung, erwarteter Bedingungen usw.

Wie pro mein Verständnis, dass beide (fliessend & WebDriverWait) WAIT-Schnittstelle implementiert, erweitert zusätzlich WebDriverWait FluentWait (Was bedeutet, Alle fluentWait Funktionalitäten sind in WebDriverWait vorhanden). Welche zusätzlichen Funktionen hält WebDriverWait, die in FluentWait nicht vorhanden sind?

Antwort

0

FluentWait und WebDriverWait sind beide die Implementierungen der Wait-Schnittstelle.

Das Ziel Fluent WebDriver Explicit Wait und WebDriver Explicit Wait zu verwenden ist mehr oder weniger gleich. In einigen Fällen kann FluentWait jedoch flexibler sein. Da beide Klassen die Implementierungen derselben Wait-Schnittstelle sind, haben beide mehr oder weniger dieselbe Funktion, mit Ausnahme von . FluentWait verfügt über eine Funktion, um ein Prädikat oder eine Funktion als Argument bis zur Methode zu akzeptieren. Auf der anderen Seite, WebDriverWait akzeptiert nur Funktion als ExpectedCondition in bis Methode, die Sie beschränkt nur eine boolesche Rückgabe verwenden.Wenn Sie Predicate in FluentWait verwenden, ermöglicht es Ihnen, jedes Objekt von bis Methode zurückgeben.

Schauen Sie sich hier sorgfältig: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html#until-com.google.common.base.Predicate-

Beispiele: A FluentWait mit Funktion als Argument, bis mit String Rückkehr:

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(); 
         } 
        }); 
    } 

The Same FluentWait Funktion mit Booleschen Rückkehr als Argument in bis Methode.

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"); 
          } 
         }); 
     } 

Noch ein FluentWait mit Prädikat.

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"); 
        } 
       }); 
} 

Beispiel WebDriverWait:

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

Sie können die Abfrageintervall auch in WebDriverWait verwenden und definieren. –

+0

@DeepakKakkarHave meine Antwort geändert. –

1

Es gibt eigentlich kaum einen Unterschied zwischen beiden. Nach WebDriverwait Quellcode heißt es:

Es Instanzen NotFoundException ignorieren, die (geworfen) standardmäßig in * der ‚bis‘ Zustand angetroffen werden, und sofort alle anderen propagieren. Sie können durch Aufruf zu ignorieren (Ausnahmen hinzufügen)

einzige Unterschied ist, gibt es ein Standardelement nicht Ausnahme Ignoranz Mechanismus in WebDriverWait ergab mehr zum ignorieren * Liste hinzufügen. Ruhe alle Funktionen sind genau gleich mit fließenden warten seit WebDriverWait es erweitert.

Verwandte Themen