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“.
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ą.
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.
Naudodami „FluentWait“ egzempliorių galime nurodyti:
„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.
„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: