Первый скрипт Selenium Webdriver: пример кода JAVA

Содержание:

Anonim

Используя Java-класс myclass, который мы создали в предыдущем руководстве, давайте попробуем создать сценарий WebDriver, который:

  1. получить домашнюю страницу Mercury Tours
  2. проверить его название
  3. распечатать результат сравнения
  4. закройте его перед завершением всей программы.

Код WebDriver

Ниже приведен фактический код WebDriver для логики, представленной в приведенном выше сценарии.

Примечание. Начиная с Firefox 35, вам необходимо использовать драйвер gecko, созданный Mozilla, чтобы использовать веб-драйвер. У Selenium 3.0, gecko и firefox есть проблемы с совместимостью, и их правильная установка может стать сложной задачей. Если код не работает, перейдите на Firefox версии 47 или ниже. Кроме того, вы можете запускать свои скрипты в Chrome. Selenium сразу работает с Chrome. Вам просто нужно изменить 3 строки кода, чтобы ваш скрипт работал с Chrome или Firefox.

пакет newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// прокомментируйте строку выше и раскомментируйте строку ниже, чтобы использовать Chrome// импортировать org.openqa.selenium.chrome.ChromeDriver;public class PG1 {public static void main (String [] args) {// объявление и создание экземпляров объектов / переменныхSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер WebDriver = новый FirefoxDriver ();// закомментируем 2 строки выше и раскомментируем 2 строки ниже, чтобы использовать Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Драйвер WebDriver = новый ChromeDriver ();Строка baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Добро пожаловать: Mercury Tours";String actualTitle = "";// запускаем Fire fox и направляем его на базовый URLdriver.get (baseUrl);// получаем актуальное значение заголовкаactualTitle = driver.getTitle ();/ ** сравните фактическое название страницы с ожидаемым и распечатайте* результат как «пройден» или «не пройден»* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println («Тест пройден!»);} еще {System.out.println («Тест не пройден»);}// закрываем Fire foxdriver.close ();}}

Объяснение кода

Импорт пакетов

Для начала вам необходимо импортировать следующие два пакета:

  1. org.openqa.selenium. * - содержит класс WebDriver, необходимый для создания экземпляра нового браузера, загруженного с определенным драйвером
  2. org.openqa.selenium.firefox.FirefoxDriver - содержит класс FirefoxDriver, необходимый для создания экземпляра специфичного для Firefox драйвера в браузере, созданного классом WebDriver.

Если вашему тесту требуются более сложные действия, такие как доступ к другому классу, создание снимков экрана браузера или управление внешними файлами, вам определенно потребуется импортировать больше пакетов.

Создание экземпляров объектов и переменных

Обычно именно так создается объект драйвера.

Класс FirefoxDriver без параметров означает, что профиль Firefox по умолчанию будет запущен нашей программой Java. Профиль Firefox по умолчанию аналогичен запуску Firefox в безопасном режиме (расширения не загружаются).

Для удобства мы сохранили базовый URL и ожидаемый заголовок как переменные.

Запуск сеанса браузера

Метод WebDriver get () используется для запуска нового сеанса браузера и направляет его на URL-адрес, который вы указываете в качестве его параметра.

Получите фактическое название страницы

Класс WebDriver имеет метод getTitle (), который всегда используется для получения заголовка текущей загруженной страницы.

Сравните ожидаемые и фактические значения

Эта часть кода просто использует базовую структуру Java if-else для сравнения фактического заголовка с ожидаемым.

Завершение сеанса браузера

Метод close () используется для закрытия окна браузера.

Завершение всей программы

Если вы воспользуетесь этой командой, не закрыв сначала все окна браузера, вся ваша программа Java завершится, а окно браузера останется открытым.

Запуск теста

Есть два способа выполнить код в Eclipse IDE.

  1. В строке меню Eclipse щелкните Выполнить> Выполнить.
  2. Нажмите Ctrl + F11, чтобы запустить весь код.

Если вы все сделали правильно, Eclipse выдаст сообщение «Тест пройден!».

Расположение элементов графического интерфейса

Поиск элементов в WebDriver осуществляется с помощью метода findElement (By. Locator ()) . «Локаторная» часть кода такая же, как и в любом из локаторов, ранее обсуждавшихся в главах этих руководств по Selenium IDE. Фактически, рекомендуется находить элементы графического интерфейса с помощью IDE и после успешной идентификации экспортировать код в WebDriver.

Вот пример кода Selenium, который находит элемент по его идентификатору. Facebook используется в качестве базового URL.

пакет 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 = новый FirefoxDriver ();Строка baseUrl = "http://www.facebook.com";Строка tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("электронная почта")). getTagName ();System.out.println (имя тега);driver.close ();System.exit (0);}}

Мы использовали метод getTagName () для извлечения имени тега того конкретного элемента, идентификатор которого - «электронная почта». При запуске этот код должен быть в состоянии правильно идентифицировать имя тега «input» и распечатать его в окне консоли Eclipse.

Резюме для размещения элементов

Вариация Описание Образец
К. className находит элементы на основе значения атрибута "класс" findElement (By.className ("someClassName"))
К. cssSelector находит элементы на основе движка селектора CSS, лежащего в основе драйвера findElement (By.cssSelector ("input # email"))
К. я бы находит элементы по значению их атрибута "id" findElement (By.id ("someId"))
К. linkText находит элемент ссылки по отображаемому в ней тексту findElement (By.linkText ("РЕГИСТРАЦИЯ"))
К. имя находит элементы по значению атрибута name findElement (By.name ("someName"))
К. partialLinkText находит элементы, содержащие указанный текст ссылки findElement (By.partialLinkText ("REG"))
К. название тэга находит элементы по имени их тега 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 ниже -

В Selenium IDE выше весь тест пройден. Однако в приведенном ниже сценарии Selenium WebDriver тот же тест вызвал ошибку, поскольку WebDriver не поддерживает ключевое слово «содержит» при использовании в методе By.cssSelector ().

Общие команды

Создание экземпляров веб-элементов

Вместо использования длинного синтаксиса driver.findElement (By.locator ()) каждый раз, когда вы обращаетесь к определенному элементу, мы можем создать для него экземпляр объекта WebElement. Класс WebElement содержится в пакете org.openqa.selenium. *.

Щелчок по элементу

Щелчок - это, пожалуй, самый распространенный способ взаимодействия с веб-элементами . Метод click () используется для имитации щелчка любого элемента. В следующем примере Selenium Java показано, как click () использовался для нажатия кнопки «Войти» в Mercury Tours.

При использовании метода click () необходимо учитывать следующее.

  • Он не принимает никаких параметров / аргументов.
  • Метод автоматически ожидает загрузки новой страницы, если это возможно.
  • Элемент, на который нужно щелкнуть, должен быть видимым (высота и ширина не должны быть равны нулю).

Получить команды

Команды Get извлекают различную важную информацию о странице / элементе. Вот несколько важных команд "get", с которыми вы должны быть знакомы.

Команды использование
get () Пример использования:
  • Он автоматически открывает новое окно браузера и выбирает страницу, указанную вами в круглых скобках.
  • Это аналог команды «открыть» в Selenium IDE.
  • Параметр должен быть объектом String .
getTitle () Пример использования:
  • Не требует параметров
  • Получает заголовок текущей страницы
  • Начальные и конечные пробелы обрезаются
  • Возвращает пустую строку, если у страницы нет заголовка
getPageSource () Пример использования:
  • Не требует параметров
  • Возвращает исходный код страницы как строковое значение
getCurrentUrl () Пример использования:
  • Не требует параметров
  • Получает строку, представляющую текущий URL-адрес , на который смотрит браузер.
getText () Пример использования:
  • Выбирает внутренний текст указанного вами элемента

Команды навигации

Эти команды позволяют обновлять, переходить и переключаться между различными веб-страницами.

navigate (). to () Пример использования:
  • Он автоматически открывает новое окно браузера и выбирает страницу , указанную вами в круглых скобках.
  • Он делает то же самое, что и метод get ().
navigate (). refresh () Пример использования:
  • Не требует параметров.
  • Он обновляет текущую страницу.
navigate (). back () Пример использования:
  • Не требует параметров
  • Возвращает вас на одну страницу в историю браузера.
navigate (). forward () Пример использования:
  • Не требует параметров
  • Перемещает вас вперед на одну страницу в истории браузера.

Закрытие и выход из окон браузера

close () Пример использования:
  • Не требует параметров
  • Он закрывает только то окно браузера, которым в данный момент управляет WebDriver .
quit () Пример использования:
  • Не требует параметров
  • Он закрывает все окна, открытые WebDriver.

Чтобы наглядно проиллюстрировать разницу между close () и quit (), попробуйте выполнить приведенный ниже код. Он использует веб-страницу, которая автоматически открывает окно при загрузке страницы и открывает другое после выхода.

Обратите внимание, что было закрыто только родительское окно браузера, а не два всплывающих окна.

Но если вы используете quit (), все окна будут закрыты, а не только родительское. Попробуйте запустить приведенный ниже код, и вы заметите, что два всплывающих окна выше также автоматически закроются.

пакет 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 = новый FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // используя QUIT, все окна закроются}}

Переключение между кадрами

Чтобы получить доступ к элементам графического интерфейса во фрейме, мы должны сначала указать WebDriver, чтобы он сфокусировался на фрейме или всплывающем окне, прежде чем мы сможем получить доступ к элементам внутри них. Возьмем, например, веб-страницу http://demo.guru99.com/selenium/deprecated.html

Эта страница имеет 3 фрейма, атрибуты "name" которых указаны выше. Мы хотим получить доступ к ссылке «Устаревшие», обведенной желтым кружком. Для этого мы должны сначала проинструктировать WebDriver переключиться на фрейм "classFrame" с помощью метода "switchTo (). Frame ()" . Мы будем использовать атрибут name фрейма в качестве параметра для части «frame ()».

пакет 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 = новый FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Устарело")). click ();driver.close ();}}

После выполнения этого кода вы увидите, что кадр «classFrame» переносится на страницу «Устаревший API», что означает, что нашему коду удалось получить доступ к ссылке «Устаревший».

Переключение между всплывающими окнами

WebDriver позволяет отображать всплывающие окна, такие как предупреждения, в отличие от Selenium IDE. Чтобы получить доступ к элементам в предупреждении (например, к содержащемуся в нем сообщению), мы должны использовать метод switchTo (). Alert () . В приведенном ниже коде мы будем использовать этот метод для доступа к окну предупреждения, а затем получить его сообщение с помощью метода "getText ()" , а затем автоматически закрыть окно с предупреждением, используя "switchTo (). Alert (). Accept ()" " метод.

Сначала перейдите на http://jsbin.com/usidix/1 и вручную нажмите «Пуск!». кнопку там и сами убедитесь в тексте сообщения.

Давайте посмотрим на пример кода Selenium, чтобы сделать это -

пакет 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 = новый FirefoxDriver ();Строка alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). click ();alertMessage = драйвер.switchTo (). alert (). getText ();driver.switchTo (). предупреждение (). accept ();System.out.println (alertMessage);driver.quit ();}}

Обратите внимание на напечатанное предупреждающее сообщение на консоли Eclipse:

Ждет

Есть два вида ожидания.

  1. Неявное ожидание - используется для установки времени ожидания по умолчанию во всей программе.
  2. Явное ожидание - используется для установки времени ожидания только для определенного экземпляра

Неявное ожидание

  • Кодировать проще, чем явное ожидание.
  • Обычно это объявляется в части кода, посвященной созданию экземпляра.
  • Для импорта вам понадобится только один дополнительный пакет.

Чтобы начать использовать неявное ожидание, вам нужно будет импортировать этот пакет в свой код.

Затем в части вашего кода, посвященной созданию экземпляра, добавьте это.

Явное ожидание

Явные ожидания выполняются с использованием классов WebDriverWait и ExpectedCondition . В следующем примере Selenium WebDriver мы подождем до 10 секунд, пока элемент с идентификатором username станет видимым, прежде чем переходить к следующей команде. Вот шаги.

Шаг 1

Импортируйте эти два пакета:

Шаг 2

Объявите переменную WebDriverWait. В этом примере мы будем использовать myWaitVar в качестве имени переменной.

Шаг 3

Используйте myWaitVar с ExpectedConditions в тех частях, где требуется явное ожидание. В этом случае мы будем использовать явное ожидание на входе «имя пользователя» (Mercury Tours HomePage), прежде чем вводить на него текст «учебник».

Условия

Следующие методы используются в условных и циклических операциях:

  • isEnabled () используется, когда вы хотите проверить, включен ли определенный элемент перед выполнением команды.
  • isDisplayed () используется, когда вы хотите проверить, отображается ли определенный элемент перед выполнением команды.
  • isSelected () используется, когда вы хотите проверить, выбран ли определенный флажок, переключатель или параметр в раскрывающемся списке . Не работает с другими элементами.

Использование ожидаемых условий

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

Ниже приведены некоторые из наиболее распространенных методов ExpectedConditions.

  • alertIsPresent () - ждет, пока не отобразится окно с предупреждением.
  • elementToBeClickable () - ожидает, пока элемент не станет видимым и в то же время не будет включен. В приведенном ниже примере кода Selenium будет ожидаться, пока элемент с не станет видимым и включенным, прежде чем назначить этот элемент как переменную WebElement с именем «txtUserName».
  • frameToBeAvailableAndSwitchToIt () - ожидает, пока данный кадр уже не станет доступен, а затем автоматически переключается на него.

Выявление исключений

При использовании isEnabled (), isDisplayed () и isSelected () WebDriver предполагает, что элемент уже существует на странице. В противном случае это вызовет исключение NoSuchElementException . Чтобы этого избежать, мы должны использовать блок try-catch, чтобы программа не прерывалась.

WebElement txtbox_username = driver.findElement (By.id ("имя пользователя"));пытаться{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys («учебник»);}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Если вы используете явное ожидание, вам следует перехватить тип исключения «TimeoutException».

Резюме

  • Чтобы начать использовать WebDriver API, вы должны импортировать как минимум эти два пакета.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Метод get () эквивалентен команде Open в Selenium IDE.
  • Поиск элементов в WebDriver осуществляется с помощью метода findElement () .
  • Ниже перечислены доступные варианты размещения элементов в WebDriver:
  • К. className
  • К. cssSelector
  • К. я бы
  • К. linkText
  • К. имя
  • К. partialLinkText
  • К. название тэга
  • К. xpath
  • By.cssSelector () не поддерживает функцию «содержит» .
  • Вы можете создать экземпляр элемента с помощью класса WebElement .
  • Щелчок по элементу выполняется с помощью метода click () .
  • WebDriver предоставляет следующие полезные команды получения :
  • получать()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver предоставляет эти полезные команды навигации
  • навигация (). вперед ()
  • навигация (). назад ()
  • перейдите к()
  • навигация (). обновление ()
  • Методы close () и quit () используются для закрытия окон браузера. Close () используется для закрытия одного окна; в то время как quit () используется для закрытия всех окон, связанных с родительским окном, которым управлял объект WebDriver.
  • SwitchTo (). Рамка () и switchTo (). Предупреждения () методы используются для фокусировки прямого WebDriver в на раме или предупреждения, соответственно.
  • Неявные ожидания используются для установки времени ожидания во всей программе, в то время как явные ожидания используются только для определенных частей.
  • Вы можете использовать isEnabled (), isDisplayed (), isSelected () и комбинацию методов WebDriverWait и ExpectedConditions при проверке состояния элемента. Однако они не проверяют, существует ли элемент.
  • Когда вызывается isEnabled (), isDisplayed () или isSelected (), когда элемент не существует, WebDriver генерирует исключение NoSuchElementException .
  • Когда методы WebDriverWait и ExpectedConditions вызывались, когда элемент не существовал, WebDriver генерировал исключение TimeoutException .

Примечание:

driver.get (): он используется для перехода на конкретный веб-сайт, но он не поддерживает историю браузера и файлы cookie, поэтому мы не можем использовать кнопки вперед и назад, если мы нажмем на нее, страница не получит расписание

driver.navigate (): он используется для перехода на конкретный веб-сайт, но сохраняет историю браузера и файлы cookie, поэтому мы можем использовать кнопку вперед и назад для перехода между страницами во время кодирования Testcase.