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

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

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

Щоб почати, вам потрібно імпортувати такі два пакети:

  1. org.openqa.selenium.*– містить клас WebDriver, необхідний для створення нового браузера, завантаженого з певним драйвером
  2. 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 ІДЕ.

  1. On Eclipseрядок меню, клацніть Біг > Біг.
  2. Натисніть 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Вікно консолі.

Розташування елементів GUI

Підсумок для розташування елементів

варіювання Опис Зразок
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 нижче –

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

In Selenium IDE вище, весь тест пройдено. Проте в Selenium Скрипт WebDriver нижче, той самий тест спричинив помилку, оскільки WebDriver не підтримує ключове слово «contains» під час використання в методі By.cssSelector().

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

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

Створення екземплярів веб-елементів

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

Створення екземплярів веб-елементів

Натискання на елемент

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

Натискання на елемент

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

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

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

Команди Get отримують різноманітну важливу інформацію про сторінку/елемент. Ось кілька важливих команд «get», з якими ви повинні бути знайомі.

Команди Використання
get ()

Приклад використання:

  • Він автоматично відкриває нове вікно браузера та отримує сторінку, яку ви вказали в дужках.
  • Це відповідник Selenium Команда «відкрити» IDE.
  • Параметр має бути a рядок об'єкт
getTitle ()

Приклад використання:

  • Не потребує параметрів
  • Отримує назву поточної сторінки
  • Пробіли на початку та в кінці обрізаються
  • Повертає нульовий рядок, якщо сторінка не має заголовка
getPageSource()

Приклад використання:

  • Не потребує параметрів
  • Повертає вихідний код сторінки як рядкове значення
getCurrentUrl()

Приклад використання:

  • Не потребує параметрів
  • Отримує рядок, що представляє поточну URL-адресу, яку переглядає браузер
getText ()

Приклад використання:

  • Отримує внутрішній текст елемента, який ви вказуєте

Команди навігації

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

navigate().to()

Приклад використання:

  • Він автоматично відкриває нове вікно браузера та отримує сторінку, яку ви вказали в дужках.
  • Він робить те саме, що й get() метод.
navigate().refresh()

Приклад використання:

  • Не потребує параметрів.
  • Він оновлює поточну сторінку.
navigate().back()

Приклад використання:

  • Не потребує параметрів
  • Повертає вас на одну сторінку в історії браузера.
navigate().forward()

Приклад використання:

  • Не потребує параметрів
  • Переносить вас на одну сторінку вперед в історії браузера.

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

закрити ()

Приклад використання:

  • Не потребує параметрів
  • Він закриває лише вікно браузера, яким зараз керує WebDriver.
вийти ()

Приклад використання:

  • Не потребує параметрів
  • Він закриває всі вікна, які відкрив WebDriver.

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

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

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

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

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

Але якщо ви використовуєте 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 і вручну натисніть кнопку «Пусти!» кнопку там і самі перегляньте текст повідомлення.

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

Давайте подивимося 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 консолі, зауважте, що друковане повідомлення сповіщення:

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

Чекає

Є два види очікування.

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

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

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

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

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

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

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

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

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

Крок 1:

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

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

Крок 2:

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

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

Крок 3:

Використовуйте myWaitVar із ExpectedConditions у тих частинах, де потрібно явно очікувати. У цьому випадку ми будемо використовувати явне очікування на «імені користувача» (Mercury Tours HomePage), перш ніж ми введемо на ньому текст «tutorial».

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

Conditions

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

  • isEnabled() використовується, коли ви хочете перевірити, чи певний елемент увімкнено чи ні перед виконанням команди.

Умови isEnabled()

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

Умови isDisplayed()

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

Умови isSelected()

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

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

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

  • alertIsPresent() – чекає, поки не відобразиться вікно сповіщення.

Використання ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Очікує, доки елемент стане видимим і, водночас, увімкненим. Зразок Selenium Наведений нижче код чекатиме, доки елемент з id=”username” стане видимим і першим увімкнеться, перш ніж призначати цей елемент як змінну WebElement під назвою “txtUserName”.

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

  • frameToBeAvailableAndSwitchToIt() – Чекає, поки заданий кадр стане доступним, а потім автоматично перемикається на нього.

Використання ExpectedConditions elementToBeClickable()

Перехоплення винятків

Під час використання 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. Це дозволяє використовувати кнопки вперед і назад для навігації між сторінками під час кодування тесту.

Підсумуйте цей пост за допомогою: