WebDriver Nimûne Bendewar, Zelal û Rûnişt

Di WebDriver de çi cûdahî di navbera benda eşkere, bendewariya eşkere û bendewariya herikbar de heye? Bi taybetîtir, têkiliya navbera WebDriverWait û FluentWait çi ye?

Li vir nimûneyên karanîna her rêbaza benda li WebDriver bi Java hene.



Bêserûber Bisekine

An benda nepenî e ku meriv ji WebDriver re vebêje ku dema ku hewl dide ku hêmanek an hêmanan peyda bike heke ew tavilê peyda nebin, DOM-ê ji bo demek diyarkirî anketê bike. Sazkirina standard 0. Dema ku hate sazkirin, ji bo jiyana mînaka tiştê ya WebDriver bendava nehênî tête danîn.


Nimûneya karanîna berbiçav

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'));

Divê em kengê bendewariyên nehênî bikar bînin?


Bi gelemperî, nayê pêşniyar kirin ku meriv bendên nepenî bikar bîne, dema ku em dikarin bendên eşkere an bendên herikbar bikar bînin.



Diyar Bisekinin

An benda eşkere kodek e ku hûn diyar dikin ku li benda rewşek diyarkirî bisekinin berî ku hûn di kodê de bêtir pêşve bibin. WebDriverWait by default her 500 mîlyonçirkeyan li ExpectedCondition bang dike heya ku ew bi serfirazî vedigere.

Mînaka karanîna eşkere

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

Divê em kengê bendên eşkere bikar bînin?


Ger barkirina hêmanek demek dirêj hewce dike em ê bi gelemperî benda eşkere bikar bînin. Di heman demê de me benda eşkere jî bikar anî ku em taybetmendiya CSS-ya hêmanek (hebûn, bikirtandin. Hwd.) Ku dikare di sepanên Ajax de biguheze, kontrol bikin.



Fluent Wait

Dema ku mînaka FluentWait bikar tînin, em dikarin diyar bikin:

  • Frekansa ku FluentWait pêdivî ye ku mercên hatine diyarkirin kontrol bike.
  • Dema ku hûn li ser rûpelek li hêmanekê digerin, guhê xwe bidin celebên taybetî yên bendewariya awarte wekî NoSuchElementException.
  • Mîqdara herî zêde ya dema ku li benda rewşek bisekinin

Mînaka karanîna FluentWait

// 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')); } });

Divê em kengê FluentWait bikar bînin?


Gava ku hûn hewl didin ku hebûna hêmanek ku dibe ku piştî her x çirkeyan / hûrdeman xuya bibe biceribînin.



Cûdahiya Di navbera WebDriverWait û FluentWait de

WebDriverWait binkîyek FluentWait e. Di FluentWaitê de bêtir vebijarkên we hene ku hûn vesaz bikin, digel dema benda herî zêde, wekî navbera rapirsînê, îstîsnayên ku paşguh bikin hwd.

Ji ber vê yekê, li şûna bendewariyê û dûv re findElement bikar bînin:

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

em dikarin bikar bînin:


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

Xwendina bêtir: