Неявне, явне та & Бездоганно зачекайте в Selenium WebDriver

Зміст:

Anonim

У селені "очікування" відіграють важливу роль у виконанні тестів. У цьому посібнику ви дізнаєтесь різні аспекти як "неявного", так і "явного" очікування в Selenium.

У цьому підручнику ви дізнаєтесь:

  • Навіщо нам потрібні очікування на селен?
  • Неявне очікування
  • Явне очікування
  • Вільно зачекайте

Навіщо нам потрібні очікування на селен?

Більшість веб-додатків розробляються за допомогою Ajax та Javascript. Коли сторінка завантажується браузером, елементи, з якими ми хочемо взаємодіяти, можуть завантажуватися з різними інтервалами часу.

Це не тільки ускладнює ідентифікацію елемента, але й якщо елемент не знаходиться, він видасть виняток " ElementNotVisibleException ". Використовуючи Selenium Waits, ми можемо вирішити цю проблему.

Давайте розглянемо сценарій, коли в тесті ми повинні використовувати як неявні, так і явні очікування. Припустимо, що неявний час очікування встановлений на 20 секунд, а час явного очікування встановлений на 10 секунд.

Припустимо, ми намагаємось знайти елемент, який має деякі "Очікувані умови " (Явне очікування). Якщо елемент не знаходиться в межах часового періоду, визначеного Явним очікуванням (10 секунд), він використовуватиме часові рамки, визначені неявним очікуванням ( 20 секунд) перед тим, як кинути " ElementNotVisibleException ".

Веб-драйвер селену чекає

  1. Неявне очікування
  2. Явне очікування

Неявне очікування в селені

Неявна Wait в Селені використовується , щоб повідомити веб - водієві почекати певну кількість часу , перш ніж він не кидає «Немає такої елемент Exception». Параметр за замовчуванням - 0. Як тільки ми встановимо час, веб-драйвер буде чекати на елемент протягом цього часу, перш ніж створювати виняток.

Веб-драйвер Selenium запозичив ідею неявного очікування у Watir.

У наведеному нижче прикладі ми оголосили неявне очікування з часовим інтервалом 10 секунд. Це означає, що якщо елемент не знаходиться на веб-сторінці протягом цього періоду часу, він видасть виняток.

Щоб оголосити неявне очікування:

Синтаксис :

driver.manage (). timeouts (). неявноWait (TimeOut, TimeUnit.SECONDS); 
пакет guru.test99;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.chrome.ChromeDriver;імпорт org.testng.annotations.Test;публічний клас AppTest {захищений драйвер WebDriver;@ Тестpublic void guru99tutorials () викидає InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");драйвер = новий ChromeDriver ();driver.manage (). timeouts (). неявноWait (10, TimeUnit.SECONDS);String eTitle = "Демо-сторінка Guru99";Рядок aTitle = "";// запускаємо Chrome і переспрямовуємо його на базову URL-адресуdriver.get ("http://demo.guru99.com/test/guru99home/");// Збільшує вікно браузераdriver.manage (). window (). maximize ();// отримуємо фактичне значення заголовкаaTitle = driver.getTitle ();// порівняння фактичного заголовка з очікуваним заголовкомякщо (aTitle.equals (eTitle)){System.out.println ("Тест пройдений");}ще {System.out.println ("Збій тесту");}// закрити браузерdriver.close ();}}

Пояснення кодексу

У наведеному вище прикладі

Розгляньте наступний код:

driver.manage (). timeouts (). неявноWait (10, TimeUnit.SECONDS);

Неявне очікування приймає 2 параметри, перший параметр приймає час як ціле значення, а другий параметр приймає вимірювання часу через СЕКУНДИ, ХВИЛИНИ, МІЛІСЕКУНД, МІКОСЕКУНДИ, НАНОСЕКУНДИ, ДНІ, ГОДИНИ тощо.

Явне очікування в селені

Явна Wait в Селен використовується , щоб повідомити Web Driver чекати певних умов (очікуваних умов) або максимальний час перевищені перед кидком «ElementNotVisibleException» виняток. Це розумний вид очікування, але він може застосовуватися лише для певних елементів. Це дає кращі варіанти, ніж неявне очікування, оскільки воно чекає динамічно завантажених елементів Ajax.

Як тільки ми оголосимо явне очікування, ми повинні використовувати " Очікувані умови ", або ми можемо налаштувати, як часто ми хочемо перевіряти стан, використовуючи Fluent Wait . У наші дні під час реалізації ми використовуємо Thread.Sleep (), як правило, не рекомендується використовувати

У наведеному нижче прикладі, ми створюємо контрольний очікування « WebDriverWait класу» і інстанцірованія з допомогою « WebDriver » посилання, і ми даємо максимальний часовий інтервал в 20 секунд.

Синтаксис:

WebDriverWait wait = новий WebDriverWait (WebDriverRefrence, TimeOut);
пакет guru.test99;імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;імпорт org.openqa.selenium.support.ui.ExpectedConditions;імпорт org.openqa.selenium.support.ui.WebDriverWait;імпорт org.testng.annotations.Test;публічний клас AppTest2 {захищений драйвер WebDriver;@ Тестpublic void guru99tutorials () викидає InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");драйвер = новий ChromeDriver ();WebDriverWait wait = новий WebDriverWait (драйвер, 20);String eTitle = "Демо-сторінка Guru99";Рядок aTitle = "";// запускаємо Chrome і переспрямовуємо його на базову URL-адресуdriver.get ("http://demo.guru99.com/test/guru99home/");// Збільшує вікно браузераdriver.manage (). window (). maximize ();// отримуємо фактичне значення заголовкаaTitle = driver.getTitle ();// порівняння фактичного заголовка з очікуваним заголовкомякщо (aTitle.contentEquals (eTitle)){System.out.println ("Тест пройдений");}ще {System.out.println ("Збій тесту");}WebElement guru99seleniumlink;guru99seleniumlink = wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();}}

Пояснення кодексу

Розгляньте наступний код:

WebElement guru99seleniumlink;guru99seleniumlink = wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();

У цьому прикладі очікування WebDriver зачекайте, скільки часу, визначеного в класі " WebDriverWait " або " ExpectedConditions ", настане залежно від того, що трапиться раніше.

У наведеному вище коді Java зазначено, що ми чекаємо на елемент протягом 20 секунд, як визначено в класі " WebDriverWait " на веб-сторінці, доки не будуть виконані " Очікувані умови " і умовою буде " visibilityofElementLocated ".

Нижче наведено очікувані умови, які можуть бути використані в явному очікуванні селену

  1. alertIsPresent ()
  2. elementSelectionStateToBe ()
  3. elementToBeClickable ()
  4. elementToBeSelected ()
  5. frameToBeAvaliableAndSwitchToIt ()
  6. invisibilityOfTheElementLocated ()
  7. invisibilityOfElementWithText ()
  8. присутностіOfAllElementsLocatedBy ()
  9. прысутністьOfElementLocated ()
  10. textToBePresentInElement ()
  11. textToBePresentInElementLocated ()
  12. textToBePresentInElementValue ()
  13. titleIs ()
  14. titleContains ()
  15. visibilityOf ()
  16. visibilityOfAllElements ()
  17. visibilityOfAllElementsLocatedBy ()
  18. visibilityOfElementLocated ()

Вільно зачекайте в селені

Вільний Wait в Selenium використовується для визначення загальної тривалості для веб - водія чекати стану, а також від частоти , з якою ми хочемо перевірити стан до викидання «ElementNotVisibleException» виняток. Він перевіряє наявність веб-елемента через рівні проміжки часу, поки об’єкт не буде знайдено або не відбудеться час очікування.

Частота: Налаштування циклу повторення з часовими рамками для перевірки / перевірки стану через регулярний інтервал часу

Давайте розглянемо сценарій, коли елемент завантажується через різні проміжки часу. Елемент може завантажуватися протягом 10 секунд, 20 секунд або навіть більше, ніж, якщо ми оголосимо явне очікування 20 секунд. Він зачекає до вказаного часу, перш ніж створювати виняток. У таких сценаріях ідеальним очікуванням є плавне очікування, оскільки воно намагатиметься знайти елемент з різною частотою, поки він не знайде його або не закінчиться кінцевий таймер.

Синтаксис:

Чекати чекати = новий FluentWait (посилання на WebDriver).withTimeout (таймаут, SECONDS).pollingEvery (час очікування, SECONDS).реєстрація (виняток.клас);

Вищезазначений код застарілий у Selenium v3.11 і вище. Вам потрібно використовувати

Чекати чекати = новий FluentWait (посилання на WebDriver).withTimeout (Тривалість секунд (СЕКУНД)).pollingEvery (Тривалість секунд (СЕКУНД)).реєстрація (виняток.клас);
пакет guru.test99;імпорт org.testng.annotations.Test;імпортувати java.util.NoSuchElementException;імпортувати java.util.concurrent.TimeUnit;імпортувати java.util.function.Function;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;імпорт org.openqa.selenium.support.ui.ExpectedConditions;імпорт org.openqa.selenium.support.ui.FluentWait;імпорт org.openqa.selenium.support.ui.Wait;імпорт org.openqa.selenium.support.ui.WebDriverWait;імпорт org.testng.annotations.Test;публічний клас AppTest3 {захищений драйвер WebDriver;@ Тестpublic void guru99tutorials () викидає InterruptedException{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");String eTitle = "Демо-сторінка Guru99";Рядок aTitle = "";драйвер = новий ChromeDriver ();// запускаємо Chrome і переспрямовуємо його на базову URL-адресуdriver.get ("http://demo.guru99.com/test/guru99home/");// Збільшує вікно браузераdriver.manage (). window (). maximize ();// отримуємо фактичне значення заголовкаaTitle = driver.getTitle ();// порівняння фактичного заголовка з очікуваним заголовкомякщо (aTitle.contentEquals (eTitle)){System.out.println ("Тест пройдений");}ще {System.out.println ("Збій тесту");}Wait  wait = новий FluentWait  (драйвер).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).реєстрація (NoSuchElementException.class);WebElement clickseleniumlink = wait.until (нова функція  () {застосовується загальнодоступний WebElement (драйвер WebDriver) {повернути driver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i "));}});// клацніть на посилання селенуclickseleniumlink.click ();// закрити ~ браузерdriver.close ();}}

Пояснення кодексу

Розгляньте наступний код:

Wait  wait = новий FluentWait  (драйвер).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).реєстрація (NoSuchElementException.class);

У наведеному вище прикладі ми оголошуємо плавне очікування з таймаутом 30 секунд, а частота встановлюється 5 секунд, ігноруючи " NoSuchElementException "

Розгляньте наступний код:

застосовується загальнодоступний WebElement (драйвер WebDriver) {повернути driver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i ")); 

Ми створили нову функцію для ідентифікації Веб-елемента на сторінці. (Приклад: Тут Веб-елемент - це не що інше, як посилання Селен на веб-сторінці).

Частота встановлюється на 5 секунд, а максимальний час - на 30 секунд. Таким чином, це означає, що він буде перевіряти наявність елемента на веб-сторінці кожні 5 секунд протягом максимального часу 30 секунд. Якщо елемент знаходиться в цей часовий проміжок, він буде виконувати операції, в іншому випадку він видасть " ElementNotVisibleException "

Різниця між неявним очікуванням проти явного очікування

Неявне очікування Явне очікування
  • Час неявного очікування застосовується до всіх елементів сценарію
  • Явний час очікування застосовується лише до тих елементів, які нам призначені
  • У неявному очікуванні нам не потрібно вказувати "Очікувані умови" для елемента, який буде розміщений
  • У явному очікуванні нам потрібно вказати "Очікувані умови" на елементі, який буде розміщений
  • Рекомендується використовувати, коли елементи розташовані з часовими рамками, вказаними в неявному очікуванні Selenium
  • Рекомендується використовувати, коли елементи завантажуються довго, а також для перевірки властивості елемента типу (visibilityOfElementLocated, elementToBeClickable, elementToBeSelected)

Висновок:

Неявне, явне та вільне очікування - це різні очікування, що використовуються в Selenium. Використання цих очікувань повністю базується на елементах, які завантажуються через різні проміжки часу. Завжди не рекомендується використовувати Thread.Sleep () під час тестування нашого додатка або побудови нашого фреймворку.

Ця стаття представлена ​​Чайтаньєю Пуджарі