Primjeri implicitnih, eksplicitnih i fluidnih čekanja za WebDriver

Koja je razlika između implicitnog čekanja, eksplicitnog čekanja i tečnog čekanja u WebDriveru? Preciznije, kakav je odnos između WebDriverWait i FluentWait?

Evo primjera upotrebe svake metode čekanja u WebDriveru s Javom.



Implicitno čekanje

An implicitno čekanje je reći WebDriveru da anketira DOM određeno vrijeme kada pokušava pronaći element ili elemente ako nisu odmah dostupni. Zadana je postavka 0. Jednom postavljeno, implicitno čekanje postavlja se za život instance WebDriver objekta.


Primjer korištenja implicitnog čekanja

WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get('http://somedomain/slow_loading_url'); WebElement dynamicElement = driver.findElement(By.id('dynamicElement'));

Kada bismo trebali koristiti implicitna čekanja?


Obično se ne preporučuje korištenje implicitnih čekanja kada možemo koristiti eksplicitna čekanja ili tečna čekanja.



Eksplicitno pričekajte

An izričito čekanje je kod koji definirate da pričekate da se dogodi određeno stanje prije nego što nastavite dalje s kodom. WebDriverWait prema zadanim postavkama poziva ExpectedCondition svakih 500 milisekundi dok se ne vrati uspješno.

Primjer korištenja eksplicitnog čekanja

WebDriver driver = new FirefoxDriver(); driver.get('http://somedomain/someurl'); WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id('dynamicElement')));

Kada bismo trebali koristiti eksplicitna čekanja?


Obično bismo koristili eksplicitno čekanje ako elementu treba puno vremena za učitavanje. Također smo koristili eksplicitno čekanje za provjeru CSS svojstva elementa (prisutnost, klikljivost itd.) Koje se može promijeniti u Ajax aplikacijama.



Tekuće pričekajte

Kada koristimo instancu FluentWait, možemo odrediti:

  • Učestalost kojom FluentWait mora provjeravati definirane uvjete.
  • Zanemarite određene vrste čekanja izuzetaka, poput NoSuchElementExceptions, dok tražite element na stranici.
  • Maksimalno vrijeme za čekanje stanja

Primjer upotrebe FluentWait-a

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

Kada bismo trebali koristiti FluentWait?


Kada pokušate testirati prisutnost elementa koji se može pojaviti nakon svakih x sekundi / minuta.



Razlika između WebDriverWait i FluentWait

WebDriverWait je podrazred FluentWait. U FluentWait-u imate više mogućnosti za konfiguriranje, zajedno s maksimalnim vremenom čekanja, poput intervala glasanja, izuzetaka koje treba zanemariti itd.

Dakle, umjesto čekanja, a zatim korištenja findElement:

WebDriverWait wait = new WebDriverWait(driver, 18); wait.until(ExpectedConditions.elementToBeClickable(By.linkText('Account'))); WebElement element = driver.findElement(By.linkText('Account')); element.sendKeys(Keys.CONTROL); element.click();

možemo koristiti:


WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(By.linkText('Account')));

Daljnje čitanje: