Пример Java-программы Selenium Webdriver (пример кода)

Пример селена Java

Посмотрите на график Java класс «myclass», который мы создали в предыдущем уроке, давайте попробуем создать скрипт WebDriver, который бы:

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

Пример кода Selenium WebDriver

Ниже приведен фактический код 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, для использования веб-драйвера. Селен 3.0, геккон и firefox имеет проблемы с совместимостью, и их правильная настройка может стать непростой задачей. Если код не работает, перейдите на более раннюю версию Firefox версия 47 или ниже. Кроме того, вы можете запускать свои сценарии в Chrome. Селен работает из box для Хрома. Вам просто нужно изменить 3 строки кода, чтобы ваш скрипт работал с Chrome или Firefox

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

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

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

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

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

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

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

WebDriver driver = new FirefoxDriver();

A FirefoxКласс драйвера без параметров означает, что по умолчанию Firefox Profile будет запущен нашей 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();

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

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

System.exit(0);

Запуск теста

Существует два способа выполнения кода в Eclipse IDE.

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

Запуск теста

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

Запуск теста

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

Поиск элементов в WebDriver осуществляется с помощью «найтиЭлемент(By.локатор())метод. Часть кода «локатор» такая же, как и любой из локаторов, ранее обсуждавшихся в Селен 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». При запуске этот код должен правильно идентифицировать имя тега «вход» и распечатать его на 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())

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

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

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

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

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

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

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

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

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

Фоллоwing следует учитывать некоторые вещи при использовании метода click().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

близко()

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

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

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

  • Не требует параметров
  • Он закрывает все windows что WebDriver открылся.

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

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

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

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

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

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

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 позволяет всплывающие окна windows например, отображение предупреждений, в отличие от Selenium IDE. Чтобы получить доступ к элементам оповещения (например, содержащемуся в нем сообщению), мы должны использовать метод "switchTo().alert()" метод. В приведенном ниже коде мы будем использовать этот метод для доступа к оповещению. box а затем получить его сообщение, используя "getText()" метод, а затем автоматически закрыть оповещение box используя "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.. Для последователейwing В примере с Selenium WebDriver мы подождем до 10 секунд, пока элемент с идентификатором «имя пользователя» станет видимым, прежде чем перейти к следующей команде. Вот шаги.

Шаг 1:

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

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

Шаг 2:

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

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

Шаг 3:

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

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

Conditions

Фоллоwing методы используются в условных и циклических операциях —

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

Условия isEnabled()

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

Условия isDisplayed()

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

Условия isSelected()

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

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

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

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

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

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

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

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

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

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

При использовании isEnabled(), isDisplayed() и isSelected() WebDriver предполагает, что элемент уже существует на странице. Другойwise, он выкинет 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() метод.
  • Фоллоwing доступные варианты размещения элементов в WebDriver:
  • По.имякласса
  • Автор :.cssSelector
  • Автор.id
  • Автор.linkText
  • По имени
  • By.partialLinkText
  • Автор.tagName
  • По.xpath
  • By.cssSelector() не поддержки "содержит" функцию.
  • Вы можете создать экземпляр элемента, используя класс WebElement.
  • Щелчок по элементу осуществляется с помощью click() метод.
  • WebDriver предоставляет следующие полезные команды получения:
  • получить()
  • getTitle ()
  • получить источник страницы ()
  • получить текущий URL ()
  • getText ()
  • WebDriver предоставляет эти полезные команды навигации.
  • навигация().вперед()
  • навигация().обратно()
  • перейдите к()
  • навигация().обновить()
  • Методы close() и quit() используются для закрытия браузера. windows. Close() используется для закрытия одного окна; пока quit() используется для закрытия всех windows связанный с родительским окном, которым управлял объект 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, поэтому мы можем использовать кнопки вперед и назад для навигации между страницами во время кодирования Testcase.