Учебники

4) Первый скрипт WebDriver

Using the Java class «myclass»  that we created in the previous tutorial, let us try to create a WebDriver script that would:

  1. fetch Mercury Tours’ homepage
  2. verify its title
  3. print out the result of the comparison
  4. close it before ending the entire program.

Код WebDriver

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

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

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();
       
    }

}

Объясняя код

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выполнение теста

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

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

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

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

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

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

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

Вот пример кода, который находит элемент по его идентификатору. 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);
}
}

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

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

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

варьирование Описание Образец
По. имя класса находит элементы на основе значения атрибута «class» findElement (By.className ( «someClassName»))
По. CSSSelector находит элементы на основе движка CSS Selector findElement (By.cssSelector ( «вход # электронная почта»))
По. Я бы находит элементы по значению их атрибута «id» findElement (By.id ( «someId»))  
По. LinkText находит элемент ссылки по точному тексту, который он отображает findElement (By.linkText ( «РЕГИСТРАЦИЯ»))  
По. имя находит элементы по значению атрибута «имя» findElement (By.name ( «SomeName»))  
По. partialLinkText находит элементы, которые содержат данный текст ссылки findElement (By.partialLinkText ( «REG»))  
По. название тэга находит элементы по имени тега findElement (By.tagName ( «ДИВ»))  
По. 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 Webdriver: пример кода JAVA

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

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

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

Создание веб-элементов

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

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

Нажав на элемент

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

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

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

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

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

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

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

Навигация по командам

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

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

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

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

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

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

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

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

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

Но если вы используете 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
    }
}

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

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

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

Эта страница содержит 3 фрейма, атрибуты которых указаны выше. Мы хотим получить доступ к «Устаревшей» ссылке, выделенной выше желтым цветом. Чтобы сделать это, мы должны сначала дать команду WebDriver переключиться на фрейм «classFrame», используя метод «switchTo (). Frame ()» . Мы будем использовать атрибут name фрейма в качестве параметра для части «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», что означает, что наш код успешно смог получить доступ к ссылке «Устаревший».

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

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

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

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

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

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 обратите внимание, что распечатанное предупреждающее сообщение:

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

Ждет

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

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

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

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

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

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

Затем в части вашего кода, добавьте это.

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

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

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

Шаг 1

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

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

 

Шаг 2

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

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

Шаг 3

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

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

 

условия

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

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

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

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

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

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

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

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

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

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

  • alertIsPresent () — ждет, пока не отобразится окно с предупреждением.

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

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

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

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

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

Ловить исключения

При использовании 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».

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

Резюме

  • Чтобы начать использовать API WebDriver, необходимо импортировать как минимум эти два пакета.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Метод get () является эквивалентом команды open в IDE Selenium.
  • Поиск элементов в WebDriver выполняется с помощью метода findElement ()  .
  • Ниже приведены доступные варианты размещения элементов в WebDriver:
  • По. имя класса
  • По. CSSSelector
  • По. Я бы
  • По. LinkText
  • По. имя
  • По. partialLinkText
  • По. название тэга
  • По. XPath
  • By.cssSelector () не поддерживает функцию «содержит» .
  • Вы можете создать экземпляр элемента, используя класс WebElement .
  • Нажатие на элемент выполняется с помощью метода click () .
  • WebDriver предоставляет следующие полезные команды get :
  • получить()
  • GetTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • GetText ()
  • WebDriver предоставляет эти полезные команды навигации
  • навигации (). вперед ()
  • навигации (). назад ()
  • перейдите к()
  • навигации (). Refresh ()
  • Методы 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