WebDriver óbeinar, skýrar og fljótandi biðdæmi

Hver er munurinn á óbeinni bið, skýrri bið og reiprennandi bið í WebDriver? Nánar tiltekið, hver eru tengslin milli WebDriverWait og FluentWait?

Hér eru dæmi um að nota hverja biðaðferð í WebDriver með Java.



Óbeina bið

An óbeina bið er að segja WebDriver að kanna DOM í ákveðinn tíma þegar reynt er að finna frumefni eða þætti ef þeir eru ekki tiltækir strax. Sjálfgefna stillingin er 0. Þegar hún er stillt er óbeina biðin stillt á líftíma WebDriver hlutadæmisins.


Dæmi um að nota óbeina bið

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

Hvenær eigum við að nota óbeina bið?


Venjulega er ekki mælt með því að nota óbeina bið, þegar við getum notað skýr bið eða reiprennandi bið.





Skýr bið

An skýr bið er kóði sem þú skilgreinir til að bíða eftir að ákveðið ástand eigi sér stað áður en lengra er haldið í kóðanum. WebDriverWait kallar sjálfkrafa ExpectedCondition á 500 millisekúndna fresti þar til það skilar árangri.

Dæmi um að nota skýr bið

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

Hvenær eigum við að nota skýr bið?


Við notum venjulega skýr bið ef þáttur tekur langan tíma að hlaða hann. Við notuðum einnig skýrt bið til að kanna CSS eiginleika þáttar (viðvera, smellanleiki osfrv.) Sem getur breyst í Ajax forritum.



Fljótandi bíddu

Þegar við notum FluentWait dæmi, getum við tilgreint:

  • Tíðni sem FluentWait þarf að athuga skilgreind skilyrði.
  • Hunsa sérstakar tegundir af undantekningum sem bíða eins og NoSuchElementExceptions meðan þú leitar að þætti á síðunni.
  • Hámarks tíma til að bíða eftir ástandi

Dæmi um notkun 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')); } });

Hvenær eigum við að nota FluentWait?


Þegar þú reynir að prófa tilvist frumefnis sem getur komið fram eftir hverjar x sekúndur / mínútur.



Mismunur á WebDriverWait og FluentWait

WebDriverWait er undirflokkur FluentWait. Í FluentWait hefurðu fleiri möguleika til að stilla, ásamt hámarksbiðtíma, eins og skoðanakönnunarbil, undantekningar til að hunsa osfrv.

Svo, í stað þess að bíða og nota síðan 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();

við getum notað:


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

Frekari lestur: