Selenium Вебдрайвер Java Пример программы
⚡ Умное резюме
Selenium Вебдрайвер Java В этом руководстве вы найдете пошаговый пример создания вашего первого скрипта автоматизации «под ключ». LessВ рамках курса рассматриваются настройка среды, поиск элементов, отправка входных данных, навигация, валидация, ожидания, обработка исключений и лучшие практики для надежных тестов WebDriver.

Selenium Java Пример
Посмотрите на график Java класс «myclass», который мы создали в предыдущем уроке, давайте попробуем создать скрипт WebDriver, который бы:
Шаг 1: получать Mercury Домашняя страница туров
Шаг 2: проверить его название
Шаг 3: распечатать результат сравнения
Шаг 4: закройте его перед завершением всей программы.
Selenium Пример WebDriver Code
Ниже приведен фактический код 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Класс драйвера, необходимый для создания экземпляра Firefox-специфичный драйвер в браузере, созданный классом WebDriver
Если вашему тесту требуются более сложные действия, такие как доступ к другому классу, создание снимков экрана браузера или манипулирование внешними файлами, вам определенно потребуется импортировать больше пакетов.
Создание экземпляров объектов и переменных
Обычно именно так создается экземпляр объекта драйвера.
WebDriver driver = new FirefoxDriver();
A FirefoxКласс драйвера без параметров означает, что по умолчанию Firefox профиль будет запущен нашим Java программа. По умолчанию Firefox профиль аналогичен запуску Firefox в безопасном режиме (расширения не загружаются).
Для удобства мы сохранили Базу. URL а ожидаемый заголовок — в виде переменных.
Запуск сеанса браузера
WebDriver's получить() Этот метод используется для запуска новой сессии браузера и перенаправляет её на... 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 IDE.
- On Eclipseв строке меню, нажмите Выполнить > Выполнить.
- Штамповочный пресс Ctrl + F11 для запуска всего кода.
Если вы все сделали правильно, Eclipse выведет «Тест пройден!»
Расположение элементов графического интерфейса
Поиск элементов в WebDriver осуществляется с помощью «найтиЭлемент(By.локатор())метод. Часть кода «локатор» такая же, как и любой из локаторов, ранее обсуждавшихся в Selenium IDE главы этих руководств. Фактически, рекомендуется находить элементы графического интерфейса с помощью 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); } }
Мы использовали получитьИмяТега() метод для extracукажите имя тега конкретного элемента, идентификатор которого равен «email». При запуске этот код должен корректно идентифицировать имя тега «input» и вывести его на экран. EclipseОкно консоли.
Сводка по поиску элементов
| Изменение | Описание | Образец |
|---|---|---|
| По.имякласса | находит элементы на основе значения атрибута «class» | findElement(By.className("someClassName")) |
| Автор :.cssSelector | находит элементы на основе базового движка CSS Selector драйвера | findElement(By.cssSelector("input#email")) |
| Автор.id | находит элементы по значению их атрибута «id» |
findElement(By.id("someId")) |
| Автор.linkText | находит элемент ссылки по точному тексту, который он отображает |
findElement(By.linkText("РЕГИСТРАЦИЯ")) |
| По имени | находит элементы по значению атрибута «name» |
findElement(By.name("someName")) |
| By.partialLinkText | находит элементы, содержащие заданный текст ссылки |
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() не поддерживает функцию «содержит». Рассмотрим Selenium Код IDE ниже –
In Selenium IDE выше, весь тест пройден. Однако в Selenium WebDriver, приведенный ниже, тот же тест вызвал ошибку, поскольку WebDriver не поддерживает ключевое слово «contains» при использовании в методе By.cssSelector().
Общие команды
Создание экземпляров веб-элементов
Вместо использования длинного синтаксиса «driver.findElement(By.locator())» каждый раз, когда вы получаете доступ к определенному элементу, мы можем создать для него экземпляр объекта WebElement. Класс WebElement содержится в пакете «org.openqa.selenium.*».
Щелчок по элементу
Нажатие — это, пожалуй, самый распространенный способ взаимодействия с веб-элементами. click() Метод используется для имитации нажатия любого элемента. Следующий Selenium Java пример показывает, как click() использовался для нажатия на Mercury Кнопка «Войти» в Туре.
При использовании метода click() необходимо учитывать следующие вещи.
- Он не принимает никаких параметров/аргументов.
- Метод автоматически ожидает загрузки новой страницы, если это применимо.
- Элемент, на который нужно кликнуть, должен быть видимым (высота и ширина не должны быть равны нулю).
Получить команды
Команды Get извлекают различную важную информацию о странице/элементе. Вот несколько важных команд «get», с которыми вы должны быть знакомы.
| Команды | Применение |
|---|---|
| получить()
Использование образца: |
|
| getTitle ()
Использование образца: |
|
| получить источник страницы ()
Использование образца: |
|
| получить текущий URL ()
Использование образца: |
|
| getText ()
Использование образца: |
|
Команды навигации
Эти команды позволяют вам обновлять, переходить и переключаться между различными веб-страницами.
| перейдите к()
Использование образца: |
|
| навигация().обновить()
Использование образца: |
|
| навигация().обратно()
Использование образца: |
|
| навигация().вперед()
Использование образца: |
|
Закрытие и выход из браузера 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()» метод. Мы будем использовать атрибут имени кадра в качестве параметра для части «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» переносится на страницу «Устаревший API», что означает, что наш код успешно смог получить доступ к ссылке «Устаревший».
Переключение между всплывающими окнами Windows
WebDriver позволяет отображать всплывающие окна, такие как оповещения, в отличие от Selenium IDE. Чтобы получить доступ к элементам оповещения (например, содержащемуся в нем сообщению), мы должны использовать метод "switchTo().alert()" метод. В приведенном ниже коде мы будем использовать этот метод для доступа к окну предупреждения, а затем получить его сообщение с помощью метода "getText()" метод, а затем автоматически закройте окно предупреждения с помощью "switchTo().alert().accept()" метод.
Сначала зайдите в https://output.jsbin.com/usidix/1 и вручную нажмите кнопку «Go!» кнопку там и сами посмотрите текст сообщения.
Давайте посмотрим 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 консоли обратите внимание, что напечатанное предупреждающее сообщение имеет следующий вид:
Ждет
Есть два вида ожидания.
- Неявное ожидание – используется для установки времени ожидания по умолчанию во всей программе.
- Явное ожидание – используется для установки времени ожидания только для конкретного экземпляра.
Неявное ожидание
- Кодировать проще, чем явное ожидание.
- Обычно он объявляется в части кода, посвященной созданию экземпляра.
- Для импорта вам понадобится только один дополнительный пакет.
Чтобы начать использовать неявное ожидание, вам придется импортировать этот пакет в свой код.
Затем в части вашего кода, связанной с созданием экземпляра, добавьте это.
Явное ожидание
Явное ожидание осуществляется с помощью классов WebDriverWait и ExpectedCondition.. Для следующего Selenium В примере WebDriver мы подождем до 10 секунд, пока элемент с идентификатором «имя пользователя» станет видимым, прежде чем перейти к следующей команде. Вот шаги.
Шаг 1:
Импортируйте эти два пакета:
Шаг 2:
Объявите переменную WebDriverWait. В этом примере мы будем использовать «myWaitVar» в качестве имени переменной.
Шаг 3:
Используйте myWaitVar с ExpectedConditions в тех частях, где вам необходимо явное ожидание. В этом случае мы будем использовать явное ожидание «имени пользователя» (Mercury Tours HomePage) до того, как мы напечатаем на нем текст «tutorial».
Conditions
В условных операторах и запросах используются следующие методы.ping операции —
- включен() используется, когда вы хотите проверить, включен или нет определенный элемент перед выполнением команды.
- отображается() используется, когда вы хотите проверить, отображается ли определенный элемент или нет перед выполнением команды.
- isSelected () используется, когда вы хотите проверить, является ли определенный флажок, переключатель или опция в раскрывающемся списке выбран. На другие элементы это не действует.
Использование ожидаемых условий
Класс ExpectedConditions предлагает более широкий набор условий, которые вы можете использовать в сочетании с методом Until() WebDriverWait.
Ниже приведены некоторые из наиболее распространенных методов ExpectedConditions.
- оповещение присутствует () – ждет, пока не появится окно с предупреждением.
- элементToBeClickable() – Ожидает, пока элемент станет видимым и одновременно включенным. Образец Selenium Code Приведённый ниже код будет ждать, пока элемент с id=”username” не станет видимым и активным, прежде чем присвоить этому элементу значение переменной WebElement с именем “txtUserName”.
- фреймToBeAvailableAndSwitchToIt() – Ждет, пока данный кадр станет доступен, а затем автоматически переключается на него.
Выявление исключений
При использовании isEnabled(), isDisplayed() и isSelected() WebDriver предполагает, что элемент уже существует на странице. В противном случае будет выброшено 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».

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

.png)


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

.png)
.png)
.png)