Selenium Веб-драйвер Java Приклад програми
Selenium Java Приклад
Використання Java класу “myclass”, який ми створили в попередньому посібнику, давайте спробуємо створити сценарій WebDriver, який:
Крок 1: отримувати Mercury Домашня сторінка турів
Крок 2: перевірити його назву
Крок 3: роздрукувати результат порівняння
Крок 4: закрийте його перед завершенням усієї програми.
Selenium Зразок коду WebDriver
Нижче наведено фактичний код WebDriver для логіки, представленої вищенаведеним сценарієм
package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {
public static void main(String[] args) {
// declaration and instantiation of objects/variables
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
//comment the above 2 lines and uncomment below 2 lines to use Chrome
//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
//WebDriver driver = new ChromeDriver();
String baseUrl = "https://demo.guru99.com/test/newtours/";
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = "";
// launch Fire fox and direct it to the Base URL
driver.get(baseUrl);
// get the actual value of the title
actualTitle = driver.getTitle();
/*
* compare the actual title of the page with the expected one and print
* the result as "Passed" or "Failed"
*/
if (actualTitle.contentEquals(expectedTitle)){
System.out.println("Test Passed!");
} else {
System.out.println("Test Failed");
}
//close Fire fox
driver.close();
}
}
Примітка: Початок Firefox 35, вам потрібно використовувати драйвер gecko, створений Mozilla, щоб використовувати веб-драйвер. Selenium 3.0, gecko та firefox мають проблеми з сумісністю, і їх правильне налаштування може стати складним завданням. Якщо код не працює, перейдіть до версії Firefox версія 47 або нижче. Крім того, ви можете запускати свої сценарії в Chrome. Selenium працює з коробки для Chrome. Вам потрібно лише змінити 3 рядки коду, щоб ваш сценарій працював із Chrome або Firefox
Пояснення коду
Імпорт пакетів
Щоб почати, вам потрібно імпортувати такі два пакети:
- org.openqa.selenium.*– містить клас WebDriver, необхідний для створення нового браузера, завантаженого з певним драйвером
- org.openqa.selenium.firefox.FirefoxВодій – містить FirefoxКлас драйвера, необхідний для створення екземпляра a Firefox-специфічний драйвер у браузері, створений класом WebDriver
Якщо ваш тест потребує більш складних дій, таких як доступ до іншого класу, створення скріншотів браузера або маніпулювання зовнішніми файлами, вам обов’язково потрібно буде імпортувати більше пакетів.
Створення екземплярів об’єктів і змінних
Зазвичай таким чином створюється об’єкт драйвера.
WebDriver driver = new FirefoxDriver();
A FirefoxКлас драйвера без параметрів означає, що за замовчуванням Firefox профіль буде запущено нашим Java програма. За замовчуванням Firefox профіль схожий на запуск Firefox у безпечному режимі (розширення не завантажуються).
Для зручності ми зберегли базову URL-адресу та очікуваний заголовок як змінні.
Запуск сеансу браузера
WebDriver's get () Метод використовується для запуску нового сеансу браузера та спрямовує його на URL-адресу, яку ви вказуєте як його параметр.
driver.get(baseUrl);
Отримайте справжній заголовок сторінки
Клас WebDriver має getTitle () метод, який завжди використовується для отримання назви поточної завантаженої сторінки.
actualTitle = driver.getTitle();
Порівняйте очікувані та фактичні значення
Ця частина коду просто використовує базовий Java структура if-else для порівняння фактичного заголовка з очікуваним.
if (actualTitle.contentEquals(expectedTitle)){
System.out.println("Test Passed!");
} else {
System.out.println("Test Failed");
}
Припинення сеансу браузера
Подіязакрити ()” використовується для закриття вікна браузера.
driver.close();
Припинення всієї програми
Якщо ви використовуєте цю команду, не закриваючи спершу всі вікна браузера, ваш весь Java програма завершиться, залишаючи вікно браузера відкритим.
System.exit(0);
Виконання тесту
Існує два способи виконання коду Eclipse ІДЕ.
- On Eclipseрядок меню, клацніть Біг > Біг.
- Натисніть Ctrl + F11 щоб запустити весь код.
Якщо ви все зробили правильно, Eclipse виведе "Тест пройдено!"
Розташування елементів GUI
Розташування елементів у WebDriver здійснюється за допомогою «findElement(By.локатор())» метод. Частина коду «локатор» така ж, як і будь-який із локаторів, які раніше обговорювалися в Selenium IDE глави цих посібників. Фактично, рекомендується знайти елементи GUI за допомогою IDE та після успішного визначення експортувати код до WebDriver.
Ось Selenium зразок коду, який знаходить елемент за його ідентифікатором. Facebook використовується як базова URL-адреса.
package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG2 {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
String baseUrl = "http://www.facebook.com";
String tagName = "";
driver.get(baseUrl);
tagName = driver.findElement(By.id("email")).getTagName();
System.out.println(tagName);
driver.close();
System.exit(0);
}
}
Ми використовували getTagName() метод для вилучення назви тегу того конкретного елемента, ідентифікатор якого є “email”. Під час запуску цей код має бути в змозі правильно ідентифікувати ім’я тегу «вхід» і роздрукувати його EclipseВікно консолі.
Підсумок для розташування елементів
| варіювання | Опис | Зразок |
|---|---|---|
| By.className | знаходить елементи на основі значення атрибута “class”. | findElement(By.className(“someClassName”)) |
| By.cssSelector | знаходить елементи на основі механізму CSS Selector драйвера | findElement(By.cssSelector(“input#email”)) |
| За.ід | знаходить елементи за значенням їхнього атрибута «id». |
findElement(By.id(“someId”)) |
| By.linkText | знаходить елемент посилання за точним текстом, який він відображає |
findElement(By.linkText(“РЕЄСТРАЦІЯ”)) |
| По імені | знаходить елементи за значенням атрибута name |
findElement(By.name(“someName”)) |
| By.partialLinkText | знаходить елементи, які містять заданий текст посилання |
findElement(By.partialLinkText(“REG”)) |
| By.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() не підтримує функцію «містить». Розглянемо Selenium Код IDE нижче –
In Selenium IDE вище, весь тест пройдено. Проте в Selenium Скрипт WebDriver нижче, той самий тест спричинив помилку, оскільки WebDriver не підтримує ключове слово «contains» під час використання в методі By.cssSelector().
Загальні команди
Створення екземплярів веб-елементів
Замість використання довгого синтаксису «driver.findElement(By.locator())» кожного разу, коли ви отримуєте доступ до певного елемента, ми можемо створити для нього об’єкт WebElement. Клас WebElement міститься в пакеті «org.openqa.selenium.*».
Натискання на елемент
Клацання, мабуть, найпоширеніший спосіб взаємодії з веб-елементами. The click() метод використовується для імітації клацання будь-якого елемента. Наступне Selenium Java приклад показує як click() використовувався для натискання Mercury Кнопка «Увійти» в Tours.
Під час використання методу click() необхідно враховувати наступне.
- Він не приймає жодних параметрів/аргументів.
- Метод автоматично очікує завантаження нової сторінки, якщо це можливо.
- Елемент, на який потрібно натиснути, має бути видимим (висота та ширина не повинні дорівнювати нулю).
Отримати команди
Команди Get отримують різноманітну важливу інформацію про сторінку/елемент. Ось кілька важливих команд «get», з якими ви повинні бути знайомі.
| Команди | Використання |
|---|---|
| get ()
Приклад використання: |
|
| getTitle ()
Приклад використання: |
|
| getPageSource()
Приклад використання: |
|
| getCurrentUrl()
Приклад використання: |
|
| getText ()
Приклад використання: |
|
Команди навігації
Ці команди дозволяють оновлювати, переходити та перемикатися між різними веб-сторінками.
| navigate().to()
Приклад використання: |
|
| navigate().refresh()
Приклад використання: |
|
| navigate().back()
Приклад використання: |
|
| navigate().forward()
Приклад використання: |
|
Закриття та вихід з браузера Windows
| закрити ()
Приклад використання: |
|
| вийти ()
Приклад використання: |
|
Щоб чітко проілюструвати різницю між close() та quit(), спробуйте виконати наведений нижче код. Він використовує веб-сторінку, яка автоматично відкриває вікно під час завантаження сторінки та відкриває інше після виходу.
Зауважте, що було закрито лише головне вікно браузера, а не два спливаючі вікна.
Але якщо ви використовуєте quit(), усі вікна будуть закриті, а не лише батьківське. Спробуйте запустити наведений нижче код, і ви помітите, що два спливаючі вікна вище також автоматично закриються.
package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG3 {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("http://www.popuptest.com/popuptest2.html");
driver.quit(); // using QUIT all windows will close
}
}
Перемикання між кадрами
Щоб отримати доступ до елементів графічного інтерфейсу користувача у фреймі, ми повинні спершу наказати WebDriver сфокусуватися на фреймі чи спливаючому вікні, перш ніж ми зможемо отримати доступ до елементів у них. Візьмемо, наприклад, веб-сторінку https://demo.guru99.com/selenium/deprecated.html
На цій сторінці є 3 фрейми, атрибути «ім’я» яких вказані вище. Ми хочемо отримати доступ до посилання «Застаріле», обведеного вище жовтим. Щоб зробити це, ми повинні спочатку наказати WebDriver переключитися на фрейм “classFrame” за допомогою “switchTo().frame()” метод. Ми будемо використовувати атрибут name кадру як параметр для частини «frame()».
package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://demo.guru99.com/selenium/deprecated.html");
driver.switchTo().frame("classFrame");
driver.findElement(By.linkText("Deprecated")).click();
driver.close();
}
}
Після виконання цього коду ви побачите, що фрейм «classFrame» переходить на сторінку «Deprecated API», тобто наш код успішно отримав доступ до посилання «Deprecated».
Перемикання між спливаючими вікнами Windows
WebDriver дозволяє відображати спливаючі вікна, наприклад сповіщення, на відміну від Selenium IDE. Щоб отримати доступ до елементів сповіщення (наприклад, повідомлення, яке воно містить), ми повинні використовувати "switchTo().alert()" метод. У наведеному нижче коді ми використаємо цей метод для доступу до вікна сповіщень, а потім отримаємо його повідомлення за допомогою "getText()" і автоматично закрийте вікно сповіщень за допомогою "switchTo().alert().accept()" метод.
Спочатку перейдіть до https://output.jsbin.com/usidix/1 і вручну натисніть кнопку «Пусти!» кнопку там і самі перегляньте текст повідомлення.
Давайте подивимося Selenium приклад коду для цього -
package mypackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class myclass {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
String 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 консолі, зауважте, що друковане повідомлення сповіщення:
Чекає
Є два види очікування.
- Неявне очікування – використовується для встановлення часу очікування за замовчуванням у всій програмі
- Явне очікування – використовується для встановлення часу очікування лише для певного екземпляра
Неявне очікування
- Його простіше кодувати, ніж Explicit Waits.
- Зазвичай він оголошується в частині коду створення екземпляра.
- Для імпорту вам знадобиться лише один додатковий пакет.
Щоб почати використовувати неявне очікування, вам доведеться імпортувати цей пакет у свій код.
Потім у частині створення екземпляра вашого коду додайте це.
Явне очікування
Явне очікування здійснюється за допомогою класів WebDriverWait і ExpectedCondition. Для наступного Selenium У прикладі WebDriver ми зачекаємо до 10 секунд, поки елемент, ідентифікатор якого є «ім’я користувача», стане видимим, перш ніж перейти до наступної команди. Ось кроки.
Крок 1:
Імпортуйте ці два пакети:
Крок 2:
Оголошіть змінну WebDriverWait. У цьому прикладі ми будемо використовувати «myWaitVar» як назву змінної.
Крок 3:
Використовуйте myWaitVar із ExpectedConditions у тих частинах, де потрібно явно очікувати. У цьому випадку ми будемо використовувати явне очікування на «імені користувача» (Mercury Tours HomePage), перш ніж ми введемо на ньому текст «tutorial».
Conditions
Наступні методи використовуються в умовних і циклічних операціях —
- isEnabled() використовується, коли ви хочете перевірити, чи певний елемент увімкнено чи ні перед виконанням команди.
- isDisplayed() використовується, коли ви хочете перевірити, чи відображається певний елемент перед виконанням команди.
- isSelected() використовується, коли потрібно перевірити, чи певний прапорець, перемикач або параметр у розкривному списку вибрано. На інших елементах не працює.
Використання ExpectedConditions
Клас ExpectedConditions пропонує ширший набір умов, які можна використовувати в поєднанні з методом до() WebDriverWait.
Нижче наведено деякі з найпоширеніших методів ExpectedConditions.
- alertIsPresent() – чекає, поки не відобразиться вікно сповіщення.
- elementToBeClickable() – Очікує, доки елемент стане видимим і, водночас, увімкненим. Зразок Selenium Наведений нижче код чекатиме, доки елемент з id=”username” стане видимим і першим увімкнеться, перш ніж призначати цей елемент як змінну WebElement під назвою “txtUserName”.
- frameToBeAvailableAndSwitchToIt() – Чекає, поки заданий кадр стане доступним, а потім автоматично перемикається на нього.
Перехоплення винятків
Під час використання isEnabled(), isDisplayed() і isSelected() WebDriver припускає, що елемент уже існує на сторінці. Інакше він викине a NoSuchElementException. Щоб уникнути цього, ми повинні використовувати блок try-catch, щоб програма не переривалася.
WebElement txtbox_username = driver.findElement(By.id("username"));
try{
if(txtbox_username.isEnabled()){
txtbox_username.sendKeys("tutorial");
}
}
catch(NoSuchElementException nsee){
System.out.println(nsee.toString());
}
Якщо ви використовуєте явне очікування, типом винятку, який ви повинні перехопити, є "TimeoutException".
Резюме
- Щоб почати використовувати API WebDriver, вам потрібно імпортувати принаймні ці два пакети.
- org.openqa.selenium.*
- org.openqa.selenium.firefox.FirefoxВодій
- Команда
get()метод є еквівалентом Selenium Команда «відкрити» IDE. - Розташування елементів у WebDriver здійснюється за допомогою
findElement()метод. - Нижче наведено доступні параметри для пошуку елементів у WebDriver:
- By.className
- By.cssSelector
- За.ід
- By.linkText
- По імені
- By.partialLinkText
- By.tagName
- За.xpath
- By.cssSelector() НЕ підтримки «містить» функцію.
- Ви можете створити екземпляр елемента за допомогою класу WebElement.
- Клацання по елементу здійснюється за допомогою
click()метод. - WebDriver надає такі корисні команди отримання:
- get ()
- getTitle ()
- getPageSource()
- getCurrentUrl()
- getText ()
- WebDriver надає ці корисні команди навігації
- navigate().forward()
- navigate().back()
- navigate().to()
- navigate().refresh()
- Методи close() і quit() використовуються для закриття вікон браузера.
Close()використовується для закриття одного вікна; покиquit()використовується для закриття всіх вікон, пов’язаних із батьківським вікном, яким керував об’єкт WebDriver. - Команда
switchTo().frame()таswitchTo().alert()методи використовуються для спрямування фокуса WebDriver на фрейм або попередження відповідно. Implicit waitsвикористовуються для встановлення часу очікування протягом усієї програмиexplicit waitsвикористовуються лише на певних порціях.- Ви можете використовувати isEnabled(), isDisplayed(),isSelected() і комбінацію WebDriverWait та Очікувані умови методи при перевірці стану елемента. Однак вони не перевіряють, чи елемент не існує.
- Коли isEnabled(), isDisplayed()або isSelected() було викликано, коли елемент не існував, WebDriver створить NoSuchElementException.
- Коли методи WebDriverWait і ExpectedConditions викликалися, коли елемент не існував, WebDriver викидав
TimeoutException.
Примітка:
driver.get(): цей метод використовується для переходу на певний веб-сайт. Однак він не зберігає історію браузера чи файли cookie. У результаті кнопки вперед і назад не працюватимуть, і натискання їх не призведе до планування навігації сторінкою.
driver.navigate(): цей метод також використовується для переходу на певний веб-сайт, але він зберігає історію браузера та файли cookie. Це дозволяє використовувати кнопки вперед і назад для навігації між сторінками під час кодування тесту.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)