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

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

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

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

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

  1. On Eclipseв строке меню, нажмите Выполнить > Выполнить.
  2. 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 ниже –

Примечание по использованию findElement(By.cssSelector())

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

Примечание по использованию findElement(By.cssSelector())

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

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

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

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

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

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

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

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

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

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

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

Команды Применение
получить()

Использование образца:

  • Он автоматически открывает новое окно браузера и выбирает страницу, указанную вами в скобках.
  • Это аналог Selenium Команда «открыть» IDE.
  • Параметр должен быть строка объект.
getTitle ()

Использование образца:

  • Не требует параметров
  • Получает заголовок текущей страницы
  • Ведущие и конечные пробелы обрезаются.
  • Возвращает нулевую строку, если страница не имеет заголовка
получить источник страницы ()

Использование образца:

  • Не требует параметров
  • Возвращает исходный код страницы в виде строкового значения.
получить текущий URL ()

Использование образца:

  • Не требует параметров
  • Извлекает строку, представляющую текущий URL-адрес, который просматривает браузер.
getText ()

Использование образца:

  • Извлекает внутренний текст указанного вами элемента.

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

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

перейдите к()

Использование образца:

  • Он автоматически открывает новое окно браузера и выбирает страницу, указанную вами в скобках.
  • Он делает то же самое, что и get() метод.
навигация().обновить()

Использование образца:

  • Не нуждается в параметрах.
  • Он обновляет текущую страницу.
навигация().обратно()

Использование образца:

  • Не требует параметров
  • Возвращает вас на одну страницу назад в истории браузера.
навигация().вперед()

Использование образца:

  • Не требует параметров
  • Перемещает вас вперед на одну страницу истории браузера.

Закрытие и выход из браузера 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 сосредоточиться на фрейме или всплывающем окне, прежде чем мы сможем получить доступ к элементам внутри них. Возьмем, к примеру, веб-страницу 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!» кнопку там и сами посмотрите текст сообщения.

Переключение между всплывающими окнами 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. Явное ожидание – используется для установки времени ожидания только для конкретного экземпляра.

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

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

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

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

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

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

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

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

Шаг 1:

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

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

Шаг 2:

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

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

Шаг 3:

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

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

Conditions

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

  • включен() используется, когда вы хотите проверить, включен или нет определенный элемент перед выполнением команды.

Условия isEnabled()

  • отображается() используется, когда вы хотите проверить, отображается ли определенный элемент или нет перед выполнением команды.

Условия isDisplayed()

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

Условия isSelected()

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

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

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

  • оповещение присутствует () – ждет, пока не появится окно с предупреждением.

Использование ExpectedConditions alertIsPresent()

  • элементToBeClickable() – Ожидает, пока элемент станет видимым и одновременно включенным. Образец Selenium Код ниже будет ждать, пока элемент с id="username" не станет видимым и включенным, прежде чем назначать этот элемент в качестве переменной WebElement с именем "txtUserName".

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

  • фреймToBeAvailableAndSwitchToIt() – Ждет, пока данный кадр станет доступен, а затем автоматически переключается на него.

Использование элемента ExpectedConditionsToBeClickable()

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

При использовании 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. Это позволяет использовать кнопки «вперед» и «назад» для навигации между страницами при кодировании тестового случая.