Selenium Вебдрайвер Java Пример программы (пример кода)
Selenium Java Пример
Посмотрите на график Java класс «myclass», который мы создали в предыдущем уроке, давайте попробуем создать скрипт WebDriver, который бы:
Шаг 1: получать Mercury Домашняя страница туров
Шаг 2: проверить его название
Шаг 3: распечатать результат сравнения
Шаг 4: закройте его перед завершением всей программы.
Selenium Пример кода веб-драйвера
Ниже приведен фактический код 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 = "http://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в строке меню, нажмите Выполнить > Выполнить.
- Press 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); } }
Мы использовали получитьИмяТега() метод для извлечения имени тега этого конкретного элемента, идентификатор которого — «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 сосредоточиться на фрейме или всплывающем окне, прежде чем мы сможем получить доступ к элементам внутри них. Возьмем, к примеру, веб-страницу http://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("http://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
В условных и циклических операциях используются следующие методы:
- включен() используется, когда вы хотите проверить, включен или нет определенный элемент перед выполнением команды.
- отображается() используется, когда вы хотите проверить, отображается ли определенный элемент или нет перед выполнением команды.
- isSelected () используется, когда вы хотите проверить, является ли определенный флажок, переключатель или опция в раскрывающемся списке выбран. На другие элементы это не действует.
Использование ожидаемых условий
Класс ExpectedConditions предлагает более широкий набор условий, которые вы можете использовать в сочетании с методом Until() WebDriverWait.
Ниже приведены некоторые из наиболее распространенных методов ExpectedConditions.
- оповещение присутствует () – ждет, пока не появится окно с предупреждением.
- элементToBeClickable() – Ожидает, пока элемент станет видимым и одновременно включенным. Образец Selenium Код ниже будет ждать, пока элемент с 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».
Итого
- Чтобы начать использовать API WebDriver, вам необходимо импортировать как минимум эти два пакета.
- org.openqa.selenium.*
- org.openqa.selenium.firefox.FirefoxДрайвер
- Команда
get()
метод эквивалентен Selenium Команда «открыть» IDE. - Поиск элементов в WebDriver осуществляется с помощью
findElement()
метод. - Ниже приведены доступные варианты размещения элементов в WebDriver:
- По.имякласса
- Автор :.cssSelector
- Автор.id
- Автор.linkText
- По имени
- By.partialLinkText
- Автор.tagName
- По.xpath
- By.cssSelector() не поддержки "содержит" функцию.
- Вы можете создать экземпляр элемента, используя класс WebElement.
- Щелчок по элементу осуществляется с помощью
click()
метод. - WebDriver предоставляет следующие полезные команды получения:
- получить()
- getTitle ()
- получить источник страницы ()
- получить текущий URL ()
- getText ()
- WebDriver предоставляет эти полезные команды навигации.
- навигация().вперед()
- навигация().обратно()
- перейдите к()
- навигация().обновить()
- Методы 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. Это позволяет использовать кнопки «вперед» и «назад» для навигации между страницами при кодировании тестового случая.