Прыклады няяўных, відавочных і свабодных чаканняў WebDriver

У чым розніца паміж няяўным чаканнем, відавочным чаканнем і плаўным чаканнем у WebDriver? Больш канкрэтна, якая сувязь паміж WebDriverWait і FluentWait?

Вось прыклады выкарыстання кожнага спосабу чакання ў WebDriver з Java.



Няяўнае чаканне

Ан няяўнае чаканне заключаецца ў тым, каб сказаць WebDriver апытваць DOM на працягу пэўнага часу пры спробе знайсці элемент ці элементы, калі яны недаступныя адразу. Параметр па змаўчанні - 0. Пасля ўсталявання імпліцытнае чаканне ўсталёўваецца на тэрмін службы экземпляра аб'екта WebDriver.


Прыклад выкарыстання няяўнага чакання

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

Калі мы павінны выкарыстоўваць няяўныя чаканні?


Звычайна не рэкамендуецца выкарыстоўваць няяўныя чаканні, калі мы можам выкарыстоўваць відавочныя чаканні альбо беглыя чаканні.



Відавочнае чаканне

Ан відавочнае чаканне гэта код, які вы вызначаеце, каб дачакацца пэўнай умовы, перш чым прыступаць да далейшага дзеяння ў кодзе. WebDriverWait па змаўчанні выклікае ExpectedCondition кожныя 500 мілісекунд, пакуль яно не вернецца паспяхова.

Прыклад выкарыстання відавочнага чакання

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

Калі мы павінны выкарыстоўваць відавочныя чаканні?


Звычайна мы выкарыстоўваем відавочнае чаканне, калі элемент загружаецца доўга. Мы таксама выкарыстоўвалі відавочнае чаканне для праверкі ўласцівасці CSS элемента (прысутнасць, клікавасць і г.д.), які можа змяняцца ў дадатках Ajax.



Свабодна пачакайце

Пры выкарыстанні экземпляра FluentWait мы можам указаць:

  • Частата, з якой FluentWait павінен правяраць вызначаныя ўмовы.
  • Ігнаруйце пэўныя тыпы чакання выключэнняў, такія як NoSuchElementExceptions, падчас пошуку элемента на старонцы.
  • Максімальная колькасць часу для чакання стану

Прыклад выкарыстання 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')); } });

Калі мы павінны выкарыстоўваць FluentWait?


Пры спробе праверыць наяўнасць элемента, які можа з'яўляцца праз кожныя х секунд / хвілін.



Розніца паміж WebDriverWait і FluentWait

WebDriverWait - гэта падклас FluentWait. У FluentWait у вас ёсць больш магчымасцей для наладжвання, а таксама максімальны час чакання, напрыклад, інтэрвал апытання, выключэнні, якія трэба ігнараваць і г.д.

Такім чынам, замест таго, каб чакаць, а потым выкарыстоўваць 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();

мы можам выкарыстоўваць:


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

Далейшае чытанне: