Перший сценарій веб-драйвера селену: Приклад зразка коду JAVA

Зміст:

Anonim

Використовуючи клас Java «myclass», який ми створили в попередньому підручнику, спробуємо створити сценарій WebDriver, який би:

  1. отримати домашню сторінку Mercury Tours
  2. перевірити його назву
  3. роздрукувати результат порівняння
  4. закрийте його, перш ніж закінчити всю програму.

Код WebDriver

Нижче наведено фактичний код WebDriver для логіки, представленої вищевказаним сценарієм

Примітка: Починаючи з Firefox 35, для використання веб-драйвера потрібно використовувати драйвер gecko, створений Mozilla. Selenium 3.0, gecko та firefox мають проблеми із сумісністю, і правильне їх налаштування може стати складним завданням. Якщо код не працює, перейдіть на Firefox версії 47 або нижче. Крім того, ви можете запускати свої сценарії в Chrome. Селен працює нестандартно для Chrome. Вам просто потрібно змінити 3 рядки коду, щоб ваш сценарій працював з Chrome або Firefox

пакет newproject;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;// коментуємо верхній рядок і розкоментуємо нижній рядок, щоб використовувати Chrome// імпорт org.openqa.selenium.chrome.ChromeDriver;публічний клас PG1 {public static void main (String [] args) {// оголошення та інстанціювання об'єктів / зміннихSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новий FirefoxDriver ();// коментуємо 2-і рядки та коментуємо нижче 2-х рядків, щоб використовувати Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// драйвер WebDriver = новий ChromeDriver ();Рядок baseUrl = "http://demo.guru99.com/test/newtours/";String ожидаемоTitle = "Ласкаво просимо: Меркурій Тури";Рядок actualTitle = "";// запускаємо Fire fox і направляємо його на базову URL-адресудрайвер.get (baseUrl);// отримуємо фактичне значення заголовкаactualTitle = driver.getTitle ();/ ** порівняйте фактичну назву сторінки з очікуваною та роздрукуйте* результат як "Пройдено" або "Не вдалося"* /if (actualTitle.contentEquals (ожидаетсяTitle)) {System.out.println ("Тест пройдений!");} ще {System.out.println ("Збій тесту");}// закрити Вогняна лисицяdriver.close ();}}

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

Імпорт пакетів

Для початку вам потрібно імпортувати два пакети:

  1. org.openqa.selenium. * - містить клас WebDriver, необхідний для створення нового браузера, завантаженого певним драйвером
  2. org.openqa.selenium.firefox.FirefoxDriver - містить клас FirefoxDriver, необхідний для створення екземпляра конкретного драйвера Firefox у браузері, створеному класом WebDriver

Якщо ваш тест потребує більш складних дій, таких як доступ до іншого класу, створення знімків екрана браузера або маніпулювання зовнішніми файлами, безумовно, вам доведеться імпортувати більше пакетів.

Екземпляр об'єктів та змінних

Зазвичай так інстанціюється об'єкт драйвера.

Клас FirefoxDriver без параметрів означає, що наша програма Java запустить профіль Firefox за замовчуванням. Профіль Firefox за замовчуванням схожий на запуск Firefox у безпечному режимі (розширення не завантажуються).

Для зручності ми зберегли базову URL-адресу та очікуваний заголовок як змінні.

Запуск сеансу браузера

Метод get () WebDriver використовується для запуску нового сеансу браузера та направляє його до URL-адреси, яку ви вказали як його параметр.

Отримайте фактичну назву сторінки

Клас WebDriver має метод getTitle (), який завжди використовується для отримання заголовка сторінки поточно завантаженої сторінки.

Порівняйте очікувані та фактичні значення

Ця частина коду просто використовує базову структуру Java if-else для порівняння фактичного заголовка з очікуваним.

Припинення сеансу браузера

Метод " close () " використовується для закриття вікна браузера.

Припинення цілої програми

Якщо ви використовуєте цю команду, не попередньо закривши всі вікна браузера, вся ваша програма Java закінчиться, залишаючи вікно браузера відкритим.

Запуск тесту

Існує два способи виконання коду в Eclipse IDE.

  1. У рядку меню Eclipse натисніть Виконати> Виконати.
  2. Натисніть Ctrl + F11, щоб запустити весь код.

Якщо ви зробили все правильно, Eclipse видав би "Тест пройдений!"

Розташування елементів графічного інтерфейсу

Розташування елементів у WebDriver здійснюється за допомогою методу " findElement (By. Locator ()) ". Частина коду "локатор" така сама, як і будь-яка з локаторів, про які раніше йшлося в розділах IDE Selenium цих посібників. Фактично, рекомендується знаходити елементи графічного інтерфейсу за допомогою IDE і після успішної ідентифікації експортувати код до WebDriver.

Ось зразок коду Selenium, який знаходить елемент за його ідентифікатором. Facebook використовується як базова URL-адреса.

пакет newproject;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новий FirefoxDriver ();String baseUrl = "http://www.facebook.com";Рядок tagName = "";драйвер.get (baseUrl);tagName = driver.findElement (By.id ("електронна пошта")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}

Ми використали метод getTagName () для вилучення імені тегу конкретного елемента, ідентифікатор якого - "електронна пошта". Під час запуску цей код повинен мати можливість правильно ідентифікувати назву тегу "вхід" і роздрукуватиме його у вікні консолі Eclipse.

Короткий зміст для розміщення елементів

Варіація Опис Зразок
Автор className знаходить елементи на основі значення атрибута "клас" findElement (By.className ("someClassName"))
Автор cssSelector знаходить елементи на основі движка CSS Selector, що лежить в основі драйвера findElement (By.cssSelector ("input # email"))
Автор ідентифікатор знаходить елементи за значенням їх атрибута "id" findElement (By.id ("someId"))
Автор linkText знаходить елемент посилання за точним текстом, який він відображає findElement (By.linkText ("РЕЄСТРАЦІЯ"))
Автор ім'я знаходить елементи за значенням атрибута "name" findElement (By.name ("someName"))
Автор частковийLinkText знаходить елементи, що містять заданий текст посилання findElement (By.partialLinkText ("REG"))
Автор tagName знаходить елементи за назвою тегу findElement (By.tagName ("div"))
Автор xpath знаходить елементи за допомогою XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / table / tbody / tr [2] / td [3] / form / table / tbody / tr [5] "))

Примітка щодо використання findElement (By.cssSelector ())

By.cssSelector () не підтримує функцію "містить" . Розглянемо код IDE селену нижче -

У вищезазначеному IDE селену пройдено весь тест. Однак у наведеному нижче сценарії Selenium WebDriver той самий тест згенерував помилку, оскільки WebDriver не підтримує ключове слово "contains" при використанні в методі By.cssSelector ().

Загальні команди

Втілення веб-елементів

Замість того, щоб використовувати довгий синтаксис "driver.findElement (By.locator ())" кожного разу, коли ви отримуєте доступ до певного елемента, ми можемо створити для нього екземпляр об'єкта WebElement. Клас WebElement міститься в пакеті "org.openqa.selenium. *".

Клацання на елементі

Клацання - це, мабуть, найпоширеніший спосіб взаємодії з веб-елементами . Метод click () використовується для імітації клацання будь-якого елемента. Наступний приклад Selenium Java показує, як за допомогою кнопки () натискали кнопку "Вхід" у Mercury Tours.

При використанні методу click () слід зазначити наступні речі.

  • Він не приймає жодного параметра / аргументу.
  • Метод автоматично чекає завантаження нової сторінки, якщо це можливо.
  • Елемент, на який потрібно натиснути, повинен бути видимим (висота та ширина не повинні дорівнювати нулю).

Отримати команди

Отримати команди для отримання різної важливої ​​інформації про сторінку / елемент. Ось декілька важливих команд "отримати", з якими ви повинні бути знайомі.

Команди Використання
get () Зразок використання:
  • Він автоматично відкриває нове вікно браузера та отримує сторінку, яку ви вказали в дужках.
  • Це аналог команди "відкрити" IDE Selenium.
  • Параметр повинен бути об’єктом String .
getTitle () Зразок використання:
  • Не потребує параметрів
  • Отримує заголовок поточної сторінки
  • Пробіли, що ведуть і відстають, обрізані
  • Повертає нульовий рядок, якщо сторінка не має заголовка
getPageSource () Зразок використання:
  • Не потребує параметрів
  • Повертає вихідний код сторінки як значення рядка
getCurrentUrl () Приклад використання:
  • Не потребує параметрів
  • Отримує рядок, що представляє поточну URL-адресу, яку переглядає браузер
getText () Зразок використання:
  • Отримує внутрішній текст елемента, який ви вказали

Навігація командами

Ці команди дозволяють оновлювати, переходити та переключатися між різними веб-сторінками.

navigate (). to () Приклад використання:
  • Він автоматично відкриває нове вікно браузера та отримує сторінку, яку ви вказали в дужках.
  • Він робить точно те ж саме, що і метод get ().
navigate (). refresh () Зразок використання:
  • Не потребує параметрів.
  • Це оновить поточну сторінку.
navigate (). back () Приклад використання:
  • Не потребує параметрів
  • Поверне вас на одну сторінку в історії браузера.
navigate (). forward () Зразок використання:
  • Не потребує параметрів
  • Переміщує вас на одну сторінку в історії браузера.

Закриття та вихід із браузера Windows

close () Зразок використання:
  • Не потребує параметрів
  • Він закриває лише вікно браузера, яким WebDriver зараз керує .
quit () Зразок використання:
  • Не потребує параметрів
  • Він закриває всі вікна, які відкрив WebDriver.

Щоб наочно проілюструвати різницю між close () та quit (), спробуйте виконати наведений нижче код. Він використовує веб-сторінку, яка автоматично відкриває вікно при завантаженні сторінки та відкриває іншу після виходу.

Зверніть увагу, що було закрито лише батьківське вікно браузера, а не два спливаючі вікна.

Але якщо ви використовуєте quit (), усі вікна будуть закриті, а не лише батьківське. Спробуйте запустити наведений нижче код, і ви помітите, що два спливаючі вікна також буде автоматично закрито.

пакет newproject;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новий FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // за допомогою QUIT усі вікна закриються}}

Перемикання між кадрами

Щоб отримати доступ до елементів графічного інтерфейсу у фреймі, нам слід спочатку направити WebDriver сфокусуватися на фреймі або спливаючому вікні, перш ніж ми зможемо отримати доступ до елементів у них. Візьмемо, наприклад, веб-сторінку http://demo.guru99.com/selenium/deprecated.html

Ця сторінка має 3 кадри, атрибути "name" вказані вище. Ми хочемо отримати доступ до застарілого посилання, обведеного жовтим кольором. Для цього ми спочатку повинні доручити WebDriver перейти до кадру "classFrame" за допомогою методу "switchTo (). Frame ()" . Ми будемо використовувати атрибут name кадру як параметр для частини "frame ()".

пакет newproject;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новий FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Застарілий")). click ();driver.close ();}}

Після виконання цього коду ви побачите, що кадр "classFrame" переходить на сторінку "Застарілий API", що означає, що наш код успішно мав доступ до посилання "Застаріле".

Переключення між спливаючими вікнами

WebDriver дозволяє відображати спливаючі вікна, як сповіщення, на відміну від Selenium IDE. Щоб отримати доступ до елементів у сповіщенні (наприклад, повідомлення, яке воно містить), ми повинні використовувати метод "switchTo (). Alert ()" . У наведеному нижче коді ми будемо використовувати цей метод для доступу до вікна сповіщень, а потім отримати його повідомлення за допомогою методу "getText ()" , а потім автоматично закрити вікно попередження за допомогою "switchTo (). Alert (). Accept () " метод.

Спочатку перейдіть на сторінку http://jsbin.com/usidix/1 і натисніть кнопку "Вперед!" Вручну. натисніть там і переконайтесь самі в тексті повідомлення.

Давайте побачимо приклад коду Selenium, щоб зробити це -

пакунок мійпакет;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новий FirefoxDriver ();Рядок alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). click ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}

На консолі Eclipse зауважте, що надруковане попереджувальне повідомлення:

Чекає

Існує два види очікування.

  1. Неявне очікування - використовується для встановлення часу очікування за замовчуванням протягом усієї програми
  2. Явне очікування - використовується для встановлення часу очікування лише для певного екземпляра

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

  • Кодувати простіше, ніж Explicit Waits.
  • Зазвичай це оголошується в екземплярі частини коду.
  • Для імпорту вам знадобиться лише один додатковий пакет.

Щоб почати використовувати неявне очікування, вам доведеться імпортувати цей пакет у свій код.

Потім додайте це до інстанційної частини вашого коду.

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

Явне очікування виконується за допомогою класів WebDriverWait та ExpectedCondition . У наступному прикладі Selenium WebDriver ми зачекаємо до 10 секунд, поки елемент, ідентифікатор якого "username", стане видимим, перш ніж переходити до наступної команди. Ось кроки.

Крок 1

Імпортуйте ці два пакети:

Крок 2

Оголосіть змінну WebDriverWait. У цьому прикладі ми будемо використовувати "myWaitVar" як ім'я змінної.

Крок 3

Використовуйте myWaitVar з ExpectedConditions на ті частини, де вам потрібно явне очікування. У цьому випадку ми будемо використовувати чітке очікування на введенні "ім'я користувача" (Mercury Tours HomePage) перед тим, як ввести на нього текст "навчальний посібник".

Умови

Наступні методи використовуються в умовних та циклічних операціях -

  • isEnabled () використовується, коли перед виконанням команди потрібно перевірити, чи певний елемент увімкнено чи ні.
  • isDisplayed () використовується, коли ви хочете перевірити, чи відображається певний елемент перед виконанням команди.
  • isSelected () використовується, коли потрібно перевірити, чи вибрано певний прапорець, перемикач або опцію у спадному списку . Він не працює на інших елементах.

Використання ExpectedConditions

Клас ExpectedConditions пропонує ширший набір умов, які ви можете використовувати разом із методом WebDriverWait till ().

Нижче наведено деякі найпоширеніші методи ExpectedConditions.

  • alertIsPresent () - чекає, поки не відобразиться вікно попередження.
  • elementToBeClickable () - Чекає, поки елемент буде видимим і, одночасно, увімкненим. Зразок коду селену нижче зачекає, поки елемент з стане видимим і ввімкненим спочатку, перш ніж призначити цей елемент як змінну WebElement з назвою "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Чекає, поки заданий кадр вже стане доступним, а потім автоматично перемикається на нього.

Виловлювання винятків

При використанні isEnabled (), isDisplayed () та isSelected () WebDriver припускає, що елемент вже існує на сторінці. В іншому випадку викине NoSuchElementException . Щоб цього уникнути, слід використовувати блок try-catch, щоб програма не переривалася.

WebElement txtbox_username = driver.findElement (By.id ("ім'я користувача"));спробуй {if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("підручник");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Якщо ви використовуєте явні очікування, винятком, який вам слід вловити, є "TimeoutException".

Резюме

  • Щоб почати використовувати API WebDriver, потрібно імпортувати принаймні ці два пакети.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Метод get () є еквівалентом команди "відкрити" IDE Selenium.
  • Розташування елементів у WebDriver здійснюється за допомогою методу findElement () .
  • Нижче наведено доступні варіанти пошуку елементів у WebDriver:
  • Автор className
  • Автор cssSelector
  • Автор ідентифікатор
  • Автор linkText
  • Автор ім'я
  • Автор частковийLinkText
  • Автор tagName
  • Автор xpath
  • By.cssSelector () не підтримує функцію "містить" .
  • Ви можете створити екземпляр елемента за допомогою класу WebElement .
  • Клацання на елементі здійснюється за допомогою методу click () .
  • WebDriver надає такі корисні команди отримання :
  • отримати ()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver надає ці корисні навігаційні команди
  • navigate (). forward ()
  • navigate (). back ()
  • navigate (). to ()
  • navigate (). refresh ()
  • Методи close () та quit () використовуються для закриття вікон браузера. Закрити () використовується для закриття одного вікна; while quit () використовується для закриття всіх вікон, пов’язаних з батьківським вікном, яким керував об’єкт WebDriver.
  • Методи switchTo (). Frame () та switchTo (). Alert () використовуються для спрямування фокусу WebDriver на кадр або попередження відповідно.
  • Неявні очікування використовуються для встановлення часу очікування протягом усієї програми, тоді як явні очікування використовуються лише для певних порцій.
  • Ви можете використовувати IsEnabled (), isDisplayed (), IsSelected (), і поєднання WebDriverWait і ExpectedConditions методів при перевірці стану елемента. Однак вони не перевіряють, чи не існує елемент.
  • Коли isEnabled (), isDisplayed () або isSelected () було викликано, поки елемент не існував, WebDriver викине NoSuchElementException .
  • Коли були викликані методи WebDriverWait та ExpectedConditions, поки елемент не існував, WebDriver видав би TimeoutException .

Примітка:

driver.get (): Він використовується для переходу на певний веб-сайт, але він не підтримує історію браузера та файли cookie, тому ми не можемо використовувати кнопки вперед і назад, якщо ми натиснемо на них, сторінка не отримає розкладу

driver.navigate (): використовується для переходу на певний веб-сайт, але він зберігає історію браузера та файли cookie, тому ми можемо використовувати кнопку вперед і назад для навігації між сторінками під час кодування Testcase