„WebDriver“ numanomų, aiškių ir sklandaus laukimo pavyzdžiai

Kuo skiriasi netiesioginis laukimas, aiškus laukimas ir sklandus laukimas „WebDriver“? Konkrečiau, koks yra „WebDriverWait“ ir „FluentWait“ ryšys?

Čia pateikiami kiekvieno laukimo metodo naudojimo pavyzdžiai naudojant „WebDriver“ su „Java“.



Numanomas laukimas

An numanomas laukimas yra nurodyti „WebDriver“ apklausti DOM tam tikrą laiką bandant rasti elementą ar elementus, jei jie nėra iškart prieinami. Numatytasis nustatymas yra 0. Nustačius numanomą laukimą, nustatoma „WebDriver“ objekto egzemplioriaus gyvavimo trukmė.


Netaikyto laukimo pavyzdys

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 turėtume naudoti numanomą laukimą?


Paprastai nerekomenduojama naudoti netiesioginio laukimo, kai galime naudoti tiesioginį arba sklandų laukimą.





Aiškus laukimas

An aiškus laukimas yra kodas, kurį nustatote laukti, kol atsiras tam tikra sąlyga, prieš tęsdami toliau kodą. „WebDriverWait“ pagal numatytuosius nustatymus kas 500 milisekundžių iškviečia „ExpectedCondition“, kol jis sėkmingai grįš.

Aiškaus laukimo pavyzdys

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

Kada turėtume naudoti aiškų laukimą?


Mes paprastai naudotume aiškų laukimą, jei elementas įkeliamas ilgai. Mes taip pat naudojome aiškų laukimą, kad patikrintume elemento CSS ypatybę (buvimą, spustelėjimą ir kt.), Kuri gali pasikeisti „Ajax“ programose.



Sklandus laukimas

Naudodami „FluentWait“ egzempliorių galime nurodyti:

  • Dažnis, kuriuo „FluentWait“ turi patikrinti apibrėžtas sąlygas.
  • Nepaisykite tam tikrų laukiančių išimčių tipų, tokių kaip „NoSuchElementExceptions“, ieškodami elemento puslapyje.
  • Maksimalus laiko tarpas laukiant sąlygos

„FluentWait“ naudojimo pavyzdys

// 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 turėtume naudoti „FluentWait“?


Kai bandote išbandyti elementą, kuris gali pasirodyti kas x sekundes / minutes.



Skirtumas tarp „WebDriverWait“ ir „FluentWait“

„WebDriverWait“ yra „FluentWait“ poklasis. „FluentWait“ turite daugiau konfigūravimo galimybių kartu su maksimaliu laukimo laiku, pvz., Rinkimų intervalas, išimtys, kurias reikia ignoruoti ir pan.

Taigi, užuot laukę, tada naudodami 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();

mes galime naudoti:


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

Papildoma literatūra: