В чем разница между неявным ожиданием, явным ожиданием и плавным ожиданием в WebDriver? В частности, какова связь между WebDriverWait и FluentWait?
Вот примеры использования каждого метода ожидания в WebDriver с Java.
An неявное ожидание заключается в том, чтобы указать 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'));
Когда следует использовать неявное ожидание?
Обычно не рекомендуется использовать неявные ожидания, когда мы можем использовать явные или плавные ожидания.
An явное ожидание - это код, который вы определяете для ожидания наступления определенного условия, прежде чем продолжить выполнение кода. 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
// 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?
Когда вы пытаетесь проверить наличие элемента, который может появляться каждые x секунд / минут.
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')));
Дальнейшее чтение: