Заменить неявное ожидание явным ожиданием (селен вебдрайвер и Java)

Как я могу заменить это неявное ожидание явным?

драйвер = новый ChromeDriver(возможности);

. Driver.manage() deleteAllCookies ();

driver.manage(). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);

Это используется в методе "До". Мне удалось заменить все Thread.sleep () в коде, но я не уверен, что делать с этим.

4 ответа

Неявное ожидание определяется один раз сразу после driver инициализация для driver время жизни, и он устанавливает максимальное количество времени для driver выглядеть врагом WebElement,

Явное ожидание используется для ожидания указанного количества времени для WebElement быть в состоянии кретина, и его нужно использовать каждый раз, когда вы ожидаете выполнения условия.

Вы не можете "заменить" определение неявного ожидания явным ожиданием, так как это разные вещи, и в этом пункте нет условий для ожидания.

Что такое ExplicitWait:

Согласно документации здесь, ExplicitWait кодовый блок, который вы определяете, настраиваете и внедряете для WebDriver экземпляр, чтобы дождаться выполнения определенного условия, прежде чем переходить к следующей строке кода. Есть несколько методов, которые помогают нам реализовать ExplicitWait это будет ждать только столько времени, сколько потребуется. WebDriverWait в комбинации с ExpectedCondition это один из способов ExplicitWait может быть достигнут.

Пример:

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
element.click();

Объяснение:

Эта реализация ExplicitWait ждет до 10 секунд, прежде чем бросить TimeoutException или если он найдет элемент, он вернется в течение от 0 до 10 секунд. WebDriverWait по умолчанию вызывает ExpectedCondition каждые 500 миллисекунд, пока он не вернется успешно. Успешное возвращаемое значение для ExpectedCondition Тип функции является Boolean значение true или ненулевой объект.

Ожидаемые условия:

Существуют некоторые часто встречающиеся условия при автоматизации веб-браузеров для Testing Web/Mobile Applications, Привязки Java, C# и Python включают эти удобные методы, поэтому нам не нужно писать ExpectedCondition сами классифицируем или создаем для них собственный пакет утилит. Некоторые из Expected Conditions являются:

  • alertIsPresent()
  • elementToBeClickable(locator)
  • elementToBeSelected(WebElement)
  • frameToBeAvailableAndSwitchToIt(locator)
  • invisibilityOf(element)

Вы можете найти информацию обо всех методах, поддерживаемых Expected Conditions здесь

Склонение ExplicitWait:

Чтобы побудить ExplicitWait сначала нужно удалить все звонки на implicitlyWait() в вашем Test Framework, Начните новое выполнение и наблюдайте, где вы столкнулись с исключением для атрибута элемента. Исключения, с которыми мы столкнемся, будут следующими:

  • NoSuchElementException
  • ElementNotVisibleException
  • ElementNotSelectableException

Теперь нам нужно подтвердить конкретный атрибут WebElement чего нам нужно ждать. Если WebElement в рассмотрении должен быть нажат, мы рассмотрим Expected Conditions как elementToBeClickable(locator)

Element is Clickable - Реализован как элемент отображается и включен.


Note: Не смешивайте implicit and explicit waits, Это может привести к unpredictable wait times, Например, установка неявного ожидания 10 секунд и явного ожидания 15 секунд может привести к возникновению тайм-аута через 20 секунд.

Неявные ожидания устанавливаются один раз и применяются в течение всего срока службы экземпляра драйвера, поэтому реальной замены этой линии не существует. Вы должны просто удалить его, потому что вы не хотите смешивать неявные и явные ожидания в соответствии с официальными документами.

ВНИМАНИЕ: не смешивайте неявные и явные ожидания. Это может привести к непредсказуемому времени ожидания.

Как только вы удалите эту строку, вам нужно будет запустить ваши сценарии и добавить явные ожидания в тех областях, где требуется ожидание.

Как только вы объявите implicitlyWait он будет применяться ко всем элементам во время выполнения скрипта. Поэтому объявите это изначально, чтобы предотвратить сбой скрипта.

Теперь, если есть элемент, требующий явного ожидания, просто объявите его перед тем, как выполнить какое-либо действие или используйте ссылку на него. явное ожидание не применяется через как implicitlyWait,

Пример:-

WebElement seleniumlink;
seleniumlink= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='add_files_btn']")));
seleniumlink.click();

См. Ссылку ниже для получения более подробной информации: -

https://www.guru99.com/implicit-explicit-waits-selenium.html

Использование неявных и явных ожиданий.

Хотя мы считаем, что явное ожидание более целесообразно, вам следует проверить сценарий, к которому вы стремитесь.

Например, в своем коде вы вызываете ожидание, чтобы узнать время завершения вызова удаления. Который может быть улучшен без использования ожидания вообще.

 Set<Cookie> cookies = driver.manage().getCookies();
 for(;cookies.size() != 0;){
   driver.manage().deleteAllCookies();
 }

** Вы можете использовать цикл Хотя я полагаю **

Сказав это, использовать явное ожидание. Я использовал его для выполнения действий во всплывающем окне, которое я получаю во время тестирования приложения.

WebDriverWait wait = new WebDriverWait(appDriver, 10);
wait.until(ExpectedConditions.alertIsPresent());
appDriver.switchTo().alert().dismiss();

Так что не ждите, если вы можете проверить условие выполнения, и используйте явное ожидание, когда вы знаете, чего ждать. Надеюсь это немного поможет.

Другие вопросы по тегам