Какая внутренняя рабочая разница между неявным ожиданием и явным ожиданием
Пример явного ожидания
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement myDynamicElement= wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
Пример неявного ожидания
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));
Допустим, myDynamicElement виден на 6-й секунде, поэтому в обоих случаях драйвер будет ждать до 6-й секунды, а управление переместится к последовательному письменному выражению. Я хочу понять, насколько неявное и явное ожидание отличаются друг от друга в этом случае? как они работают внутри?
2 ответа
Неявное ожидание:
Implicit Wait
это способ настроить WebDriver
экземпляр опроса HTML DOM
(DOM Tree
) в течение настроенного периода времени, когда он пытается найти элемент или найти группу / коллекцию элементов, если они не доступны сразу. По текущему W3C
спецификация время по умолчанию настроено на 0
, Мы можем настроить время для Implicit Wait
в любом месте нашего скрипта / программы и может перенастроить его согласно нашей необходимости. Как только мы установим Implicit Wait
это будет действовать в течение всей жизни WebDriver
пример.
Вы можете найти больше detailed discussion here
и документация здесь.
Явное ожидание:
Explicit Wait
кодовый блок, который вы определяете, настраиваете и внедряете для WebDriver
экземпляр, чтобы дождаться выполнения определенного условия, прежде чем переходить к следующей строке кода. WebDriverWait вместе с определенными методами / предложениями ExpectedCondition
это один из способов реализации Explicit Wait
,
Вы можете найти больше detailed discussion here
и документация здесь.
Получение гранулята:
Согласно вашему запросу Let say myDynamicElement is visible at 6th second, So in both the cases driver will wait till 6th seconds and control will move to the consecutive written statement
,
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Implicit Wait
будет опрашивать HTML DOM
(DOM Tree
) в течение всех 10 секунд, независимо от того, myDynamicElement
(или несколько элементов, соответствующих вашему локатору) отображается на 4-й / 6-й / 8-й секунде. Таким образом, в этом случае ваш сценарий задерживается на 4 секунды.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement myDynamicElement= wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
Explicit Wait
будет ждать максимум 10 секунд для элемента someid
сделать кликабельным (отображается и включено). WebElement
возвращается обратно, как только ExpectedConditions
встретил Если ExpectedConditions
не выполняется в течение всей продолжительности настроенного графика времени, вы видите Exception
,
Неявные ожидания используются для предоставления времени ожидания (скажем, 30 секунд) между каждым последовательным этапом теста по всему сценарию или программе тестирования. Следующий шаг выполняется только после истечения 30 секунд (или любого другого времени) после выполнения предыдущего шага
Синтаксис:
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Явные ожидания используются для остановки выполнения до тех пор, пока не будет выполнено определенное условие или не истечет максимальное определенное время. Неявное ожидание применяется между каждым последовательным этапом тестирования по всему сценарию или программам тестирования, в то время как явное ожидание применяется только для конкретного экземпляра.
Синтаксис:
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable("Locator"));