Selenium - это набор библиотек, который используется для имитации взаимодействия пользователя с браузером.
Пользователи пишут сценарии с использованием библиотек селена для имитации обычных взаимодействий пользователя с браузером, таких как переход на страницу, нажатие кнопки и заполнение формы.
Selenium обычно используется в проектах, которые создают интерфейсные веб-приложения (UI). Он используется для автоматизации сценариев, имитирующих взаимодействие пользователя с веб-приложением.
Чтобы использовать Selenium WebDriver в проекте, нам сначала нужно установить Selenium Core и WebDriver Binaries.
Мы также должны указать путь для каждого исполняемого файла драйвера.
Если вы хотите использовать Selenium с Java, то самый простой способ установить Selenium - через зависимость Maven в вашем проекте pom.xml
файл:
org.seleniumhq.selenium
selenium-java
3.141.59
Чтобы запустить тесты Selenium в браузере Google Chrome или Firefox, вам необходимо добавить соответствующую зависимость в свой pom.xml
файл:
org.seleniumhq.selenium
selenium-chrome-driver
3.141.59
org.seleniumhq.selenium
selenium-firefox-driver
3.141.59
Чтобы выполнить тесты Selenium в конкретном браузере, у вас должны быть установлены соответствующие двоичные файлы WebDriver для конкретного браузера и задан правильный путь.
Хром Чтобы установить путь к исполняемому файлу хрома в системе MacOS, вы можете использовать:
$ export PATH='$PATH:/path/to/chromedriver'
Вы также можете установить путь программно, прямо в коде:
System.setProperty('webdriver.chrome.driver', '/path/to/chromedriver');
Firefox - Geckodriver:
System.setProperty('webdriver.gecko.driver', '/path/to/geckodriver');
Край:
System.setProperty('webdriver.edge.driver', 'C:/path/to/MicrosoftWebDriver.exe');
Internet Explorer:
System.setProperty('webdriver.ie.driver', 'C:/path/to/IEDriver.exe');
После установки Selenium необходимо создать экземпляр конкретного драйвера браузера для запуска тестов пользовательского интерфейса.
Тесты Selenium запускаются в пользовательском интерфейсе приложения и требуют для работы браузера. Мы можем указать, в каком браузере мы хотим запустить наши тесты, а затем создать экземпляр соответствующего драйвера.
Примечание:Тесты на селен используются только для Автоматизация пользовательского интерфейса и тесты запускаются в браузере.import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; WebDriver driver = new ChromeDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.Firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; WebDriver driver = new EdgeDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; WebDriver driver = new InternetExplorerDriver();
После того, как у нас есть активный сеанс WebDriver и запущен браузер, следующее, что мы хотим сделать, - это перейти на страницу и запустить тесты.
Selenium WebDriver предоставляет ряд полезных методов для взаимодействия с браузером. Мы можем осуществлять навигацию и получать информацию о текущей странице.
Для перехода по URL-адресу у нас есть два варианта:
//The short form driver.get('https://devqa.io'); //The long form driver.navigate().to('https://devqa.io');
Селен back()
имитирует нажатие кнопки 'Назад' в браузере:
driver.navigate().back();
Селен forward()
имитирует нажатие кнопки перехода в браузере:
driver.navigate().forward();
Селен refresh()
имитирует нажатие кнопки обновления в браузере:
driver.navigate().refresh();
Selenium также предоставляет методы для получения текущего URL-адреса, заголовка страницы и источника страницы.
Мы можем получить URL-адрес текущей страницы:
driver.getCurrentUrl();
Мы можем получить заголовок текущей страницы:
driver.getTitle();
Мы можем получить исходный код текущей страницы:
driver.getPageSource();
Чтобы закрыть текущее окно браузера:
driver.close();
Примечание:Закрытие окна браузера не завершить сеанс WebDriver.Чтобы выйти из сеанса WebDriver по окончании тестирования, используйте:
driver.quit();
Метод выхода:
Прежде чем мы сможем взаимодействовать с веб-элементом, нам нужно найти этот элемент на html-странице.
Один из наиболее важных навыков инженера по автоматизации тестирования, работающего с Selenium WebDriver, - уметь использовать соответствующие методы для поиска элементов на странице.
Например, если мы хотим щелкнуть ссылку, убедиться, что отображается сообщение или щелкнуть кнопку, нам нужно сначала найти элемент.
Selenium WebDriver предоставляет различные методы для поиска элементов на странице.
Локатор описывает то, что вы хотите найти на странице. В Java мы создаем локатор с помощью By
класс.
Например, если мы хотим найти h1
заголовок на странице, мы бы написали
WebElement h1Element = driver.findElement(By.tagName('h1'));
Или, если бы мы хотели найти все элементы абзаца на странице, мы бы использовали
List pElements = driver.findElements(By.tagName('p'));
Этот метод находит элементы по отображаемому им тексту. Этот метод обычно является предпочтительным локатором для ссылок на странице.
Например, предположим, что у нас есть эта ссылка на странице:
Forgotten Password
Затем ссылку можно найти, используя:
driver.findElement(By.linkText('Forgotten Password'));
Когда мы не уверены в точной формулировке текста ссылки, но хотим найти ссылку или ссылки, которые содержит данный текст, мы можем использовать
driver.findElement(By.partialLinkText('Forgotten '));
или же
driver.findElement(By.partialLinkText('Password'));
Будьте осторожны при использовании findElement
с этим локатором, так как могут быть другие элементы, содержащие такой же частичный текст, поэтому его не следует использовать для поиска отдельного элемента отдельно. Лучше всего использовать его для поиска группы элементов с помощью метода findElements
.
Это находит элементы по значению атрибута класса. Это можно использовать только для тех элементов, у которых есть атрибут класса, но это не лучший селектор для использования с findElement
метод.
Используя тот же пример выше со ссылкой, ссылка «Забыли пароль» имеет один класс CSS: btn
который можно использовать, чтобы найти его
Forgotten Password
Затем ссылку можно найти, используя:
driver.findElement(By.className('btn'));
Примечание:Атрибут class используется для стилизации страниц, поэтому есть вероятность, что многие элементы имеют один и тот же класс.По идентификатору находит элементы по значению их атрибута id. Ссылка в приведенном выше примере имеет идентификатор, который мы можем использовать:
Forgotten Password
Затем ссылку можно найти, используя:
driver.findElement(By.id('change-password'));
Если атрибут id доступен, его следует использовать в качестве первого предпочтительного выбора.
Находит элементы по значению их атрибута name. Обычно его можно использовать только для поиска элементов формы, построенных с помощью: ,
,
, и
.
На типичной странице входа в систему у вас есть поля ввода, которые могут выглядеть примерно так:
Затем мы можем найти поле электронной почты по атрибуту имени ввода
driver.findElement(By.name('email'));
Этот локатор находит элементы по их имени тега HTML. Поскольку большинство тегов часто повторяются, не рекомендуется использовать этот метод для поиска одного элемента.
Типичное использование поиска элемента по имени тега - поиск заголовка страницы, поскольку существует только один из них:
Welcome to DevQA!
Затем мы можем найти поле заголовка по имени тега:
driver.findElement(By.tagName('h1'));
Находит элементы с помощью механизма выбора CSS W3, лежащего в основе драйвера. Локатор селектора CSS является мощным средством, поскольку его можно использовать для поиска любого элемента на странице.
Forgotten Password
Затем мы можем найти поле электронной почты по атрибуту имени ввода
driver.findElement(By.cssSelector('#change-password'));
Здесь #
представляет идентификатор элемента. И .
нотация представляет собой атрибут класса элемента.
Например:
driver.findElement(By.cssSelector('.btn'));
Связанный:
Локаторы XPath - наиболее сложный в использовании селектор. Для этого требуется знание языка запросов XPath, поэтому, если вы плохо владеете этим языком запросов, вам будет сложно найти элементы с помощью запросов XPath.
Давайте посмотрим на пример использования XPath для этого HTML:
Change Password
Затем мы можем найти поле электронной почты по атрибуту имени ввода
driver.findElement(By.xpath('//a[@id='change-password']'));
После того, как мы нашли элемент на странице, мы можем взаимодействовать с ним, используя различные методы, предоставляемые селеном.
Selenium WebDriver предоставляет несколько способов взаимодействия с веб-элементами, таких как нажатие кнопок отправки и ввод текста в поля ввода.
WebElement
class имеет ряд методов, которые мы можем использовать для взаимодействия с элементами страницы. Самые распространенные из них:
click()
clear()
sendKeys()
submit()
click()
используется для щелчка по веб-элементу, например по ссылке или кнопке.
Пример:
Menu
WebElement mToggle = driver.findElement(By.id('menu-toggle')); mToggle.click();
clear()
очищает значение поля ввода.
Пример:
WebElement username = driver.findElement(By.id('username')); username.clear();
Мы используем sendKeys()
метод ввода символов в поле ввода.
Пример:
WebElement username = driver.findElement(By.id('username')); username.sendKeys('jondoe');
Ниже приведен пример того, как использовать Selenium для заполнения формы.
username:
Last name:
WebElement username = driver.findElement(By.id('username'));
username.sendKeys('jondoe');
WebElement password = driver.findElement(By.id('password'));
password.sendKeys('secret');
WebElement submit = driver.findElement(By.cssSelector('input[type='submit']'));
submit.click();
Теперь, когда мы рассмотрели основы Selenium WebDriver, пришло время создать фреймворк.
Узнайте, как создать фреймворк на основе селена с нуля.
Первая часть учебника содержит пошаговые инструкции по созданию среды Selenium WebDriver с использованием Java, Maven и TestNG.
Вторая часть посвящена структурированию тестов на селен на основе известной объектной модели страницы.