Подробное руководство по Selenium с Java [Учебное пособие]

Приступая к автоматизированному тестированию, тестировщик задается двумя вопросами.

  • Какой фреймворк следует использовать для автоматизации тестирования?

  • Какому языку программирования отдать предпочтение?

Когда речь заходит о фреймворке для автоматизации тестирования, Selenium часто является первым вариантом, который приходит нам на ум. Selenium с открытым исходным кодом и большой поддержкой сообщества за последнее десятилетие стал любимым выбором тестировщиков автоматизации, получив значительную поддержку.

Звезды GitHub 23.8k
Forks 7k
Загрузки 240k

Когда дело доходит до выбора правильного языка программирования для написания тестов, необходимо учитывать множество факторов. К ним относятся язык, на котором разрабатывается тестируемое приложение (AUT), поддержка сообщества, доступные фреймворки для автоматизации тестирования, поддержка IDE, удобство использования, простота и кривая обучения для тестировщика, пишущего тестовый сценарий.

Тестовые сценарии в Selenium могут быть реализованы на таких популярных языках программирования, как C#, Java, JavaScript, Python, PHP и Ruby. В этом руководстве по Selenium Java мы рассмотрим самую популярную комбинацию в автоматизации тестирования — Selenium с Java. К концу этого подробного руководства вы сможете начать свой путь в автоматизации тестирования Selenium с помощью Java. Я рассмотрел ряд тем, таких как установка и настройка проекта для написания вашего первого тестового случая. Я также расскажу о некоторых лучших практиках Selenium для автоматизации тестирования с помощью Selenium на Java.

Нам еще многое предстоит узнать 🙂 Итак, давайте начнем!

Содержание
  1. Начало работы: Автоматическое тестирование Selenium с Java
  2. Что такое Selenium?
  3. Как работает Selenium WebDriver?
  4. Почему стоит выбрать Selenium с Java?
  5. Установка и настройка: Как использовать Selenium с Java?
  6. Установка
  7. Установка JDK
  8. Установка Eclipse IDE
  9. Установите Selenium WebDriver и языковые привязки
  10. Установите драйверы браузера (необязательно)
  11. Как создать Java-проект Selenium в Eclipse?
  12. [Демонстрация] Написание первого тестового случая с помощью Selenium и Java
  13. Пример 1: Запуск нашего тестового примера на локальной машине
  14. Пример 2: Запуск нашего тестового случая на онлайн Selenium Grid
  15. Использование фреймворка TestNG для параллельного выполнения тестов
  16. Введение во фреймворк TestNG
  17. Параллельное выполнение тестов в TestNG с использованием XML-файла TestNG
  18. Установка и настройка
  19. Создание проекта TestNG
  20. Как запускать тестовые случаи параллельно с Selenium в TestNG на Cloud Grid?
  21. Лучшие практики для автоматизированного тестирования Selenium
  22. Заключение

Начало работы: Автоматическое тестирование Selenium с Java

Если вы новичок в автоматизации или перешли от ручного к автоматизированному тестированию, то Selenium WebDriver — лучшее место для начала. В нем есть все, что нужно для начала вашего пути автоматизации Selenium.

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

Что такое Selenium?

Selenium — это широко распространенная система автоматизации тестирования, используемая для автоматизации браузера веб-приложений. Согласно недавнему исследованию автоматизации тестирования, 81% респондентов использовали Selenium в качестве инструмента автоматизации тестирования.

Несколько особенностей Selenium, которые способствовали его популярности, следующие

  • Открытый исходный код с большим сообществом.

  • Поддерживает автоматизацию на различных платформах, таких как Windows, Macintosh, Linux и т.д.,

  • Поддерживает множество браузеров, включая Chrome, Firefox, IE, Safari и т.д.

  • Поддерживает множество языков программирования, таких как Java, Python, Ruby, C# и т.д.

  • Поддерживает множество фреймворков, таких как JUnit, TestNG и т.д.

  • Легко интегрируется с инструментами CI, такими как Jenkins, Docker и т.д.

  • Простая генерация отчетов

Selenium доступен в четырех различных вариантах, наиболее популярным является Selenium WebDriver. Selenium WebDriver — это объектно-ориентированный API, используемый для автоматизации взаимодействия с веб-браузерами (например, Chrome, Firefox, Edge и т.д.) с помощью соответствующих драйверов браузера.

У нас также есть Selenium Grid, который помогает запускать тесты параллельно в различных комбинациях браузеров и платформ. Selenium Grid следует концепции концентратор-узел, где мы можем запускать скрипты WebDriver на одной машине (концентраторе), но выполнение будет осуществляться несколькими удаленными машинами (узлами) с помощью команд маршрутизации.

LambdaTest предоставляет вам облачную онлайн Selenium Grid, которая поможет вам запустить ваши тестовые случаи на онлайн ферме браузеров из 3000+ браузеров и версий браузеров, обеспечивая более быстрое выполнение и максимальное покрытие тестов с помощью минимальных конфигураций.

Последняя версия, Selenium 4, содержит множество серьезных изменений, включая улучшенную архитектуру и расширенные возможности. Вы можете просмотреть это руководство по Selenium 4, чтобы узнать, что нового появилось в Selenium 4.

Знаете ли вы, что логические свойства и значения CSS позволяют управлять версткой с помощью логических, а не физических сопоставлений направлений и размеров. Они являются эквивалентом соответствующих физических эквивалентов в режиме записи.

Как работает Selenium WebDriver?

Selenium WebDriver работает по модели архитектуры клиент-сервер.

На стороне клиента имеется клиентская библиотека Selenium, которая поддерживает несколько клиентских библиотек, соответствующих используемому языку программирования, например, Java, Ruby, Python и т.д. Функция связывания языков в Selenium позволяет ему поддерживать различные языки программирования. Исходя из языка программирования тестовых сценариев, нам необходимо выбрать клиентскую библиотеку. Например, для использования Selenium с Java необходимо использовать привязку к языку Java. Вы можете загрузить соответствующие языковые привязки отсюда.

На стороне сервера находится драйвер браузера, который принимает HTTP-запросы, поступающие со стороны клиента по протоколу связи. Затем драйвер браузера взаимодействует с реальным браузером и заставляет его выполнять действия, определенные в сценариях автоматизации. Для каждого браузера существует свой драйвер браузера. Например, для автоматизации браузера Chrome необходимо использовать драйвер Chrome. Ниже указаны места, откуда можно загрузить соответствующий драйвер браузера.

БРАУЗЕР МЕСТО ЗАГРУЗКИ
Opera https://github.com/operasoftware/operachromiumdriver/releases
Firefox https://github.com/mozilla/geckodriver/releases
Chrome http://chromedriver.chromium.org/downloads
Internet Explorer https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
Microsoft Edge https://blogs.windows.com/msedgedev/2015/07/23/bringing-automated-testing-to-microsoft-edge-through-webdriver/

Сторона клиента и сторона сервера взаимодействуют друг с другом посредством протокола связи.

В версиях, предшествующих Selenium 4, для связи между клиентом и сервером использовался протокол JSON wire. Он состоит из REST API, который отправляет запросы от клиента к серверу (родной API браузера) через HTTP. Но здесь, поскольку клиентские библиотеки Selenium (клиент) используют протокол JSON, а веб-браузер (сервер) — протокол W3C, для связи между тестовыми скриптами и браузерами требовалось кодирование и декодирование запросов API.

Начиная с Selenium 4, проводной протокол JSON заменяется протоколом W3C WebDriver, позволяющим осуществлять прямую связь между библиотеками Selenium Client и целевым браузером. Поскольку WebDriver и веб-браузер используют один и тот же протокол, кодирование и декодирование запросов API больше не требуется, что делает тестовые примеры более стабильными, чем когда-либо.

Почему стоит выбрать Selenium с Java?

Согласно опросу разработчиков Stack Overflow, Java является одним из самых популярных языков программирования, его предпочитают более 35% респондентов.

Выбор написания тестов автоматизации Selenium с использованием Java имеет множество преимуществ. Некоторые из них перечислены ниже.

  • Поскольку Selenium поддерживает Java, доступна подробная документация, что облегчает написание тестовых примеров.

  • По сравнению с другими языками, такими как Python, программы, написанные на Java, работают быстрее.

  • Доступность для различных операционных систем, таких как UNIX, Linux, Windows, Mac OS и т.д.

  • Java поставляется с множеством готовых фреймворков автоматизации, таких как TestNG, JUnit и т.д., которые можно использовать вместе с Selenium для улучшения кодирования, отчетности и обслуживания.

Установка и настройка: Как использовать Selenium с Java?

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

Установка

Процесс установки состоит из следующих шагов.

  1. Установите JDK.

  2. Установите Eclipse IDE.

  3. Установите Selenium WebDriver и языковые привязки.

  4. Установите драйверы браузеров (необязательно).

Установка JDK

Начнем с установки Java Development Kit (JDK). JDK включает в себя JRE (Java Runtime Environment), используемую для написания и выполнения Java-кода. Вы можете загрузить JDK с любого из предложенных ниже сайтов.

  • Oracle JDK

  • OpenJDK

После завершения установки установите переменные среды. Для этого выполните следующие действия:

  1. Щелкните правой кнопкой мыши на Компьютер.

  2. Нажмите на «Свойства».

  3. Нажмите на ‘Дополнительные параметры системы’.

  4. В Свойствах системы выберите вкладку ‘Дополнительно’.

  5. Нажмите на ‘Переменные среды’.

  6. Скопируйте путь, по которому установлен JDK. (Например: C:Program FilesJavajdk1.6.0bin).

  7. В открывшемся окне «Переменные среды» выберите ‘New’ в разделе ‘System variables’.

  8. Задайте путь. Если ‘Path’ уже существует, то отредактируйте его.

9- Нам также необходимо установить CLASSPATH. Создайте новую переменную окружения и скопируйте в качестве значения тот же путь к JDK. Если ‘CLASSPATH’ уже существует, отредактируйте ее.

Настройка переменной окружения завершена.

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

java -version
Войти в полноэкранный режим Выйдите из полноэкранного режима

Установка Eclipse IDE

Далее нам необходимо установить IDE (интегрированную среду разработки). IDE — это платформа, на которой разработчики могут писать код и запускать его. Я буду использовать Eclipse IDE for Java Developers для этой демонстрации. Вы можете скачать последнюю версию отсюда.

После загрузки установочного файла завершите процесс установки. В качестве альтернативы вы также можете использовать любую другую популярную IDE, например Jetbrains Webstorm, IntelliJ IDEA и т.д.

Установите Selenium WebDriver и языковые привязки

Загрузите библиотеку Selenium Client Library для Java отсюда. Загрузка идет в виде ZIP-файла. Распакуйте содержимое (JAR-файлы) и сохраните их в директории.

Мы загружаем клиентские драйверы для Selenium 4. Для работы с Selenium 3 или более старыми версиями посмотрите раздел «Предыдущие релизы».

Установите драйверы браузера (необязательно)

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

Однако если вы используете облачную Selenium Grid, например LambdaTest, этот шаг можно пропустить.

После завершения процесса установки перейдем к настройке проекта.

Посмотрите это видео, чтобы узнать больше об анализе результатов тестирования и отчетности в Selenium 4. Также узнайте о различных инструментах для создания отчетов в Selenium, исходя из простоты настройки, цены, поддерживаемых форматов отчетов и многого другого.

Как создать Java-проект Selenium в Eclipse?

Нам необходимо создать проект для написания и хранения наших тестовых примеров. Чтобы создать новый проект Selenium с Java в Eclipse, выполните следующие шаги.

Шаг 1: Запустите Eclipse
Шаг 2: Создайте рабочее пространство.

Рабочее пространство — это место, где вы будете хранить все свои проекты. Вы можете создать столько рабочих пространств, сколько потребуется.

Шаг 3: Создайте новый проект Java.

Перейдите в меню Файл > Новый > Java-проект. Назовите проект.

Появится новое всплывающее окно. Введите следующие данные:

  • Имя проекта

  • Место сохранения проекта

  • Исполняемая JRE

После этого нажмите ‘Finish’.

Теперь проект создан.

Шаг 4: Добавьте файлы Selenium API JAR в Java-проект, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши на проекте и выберите Properties.

  2. Выберите Java Build Path.

  3. В разделе библиотек нажмите на Add External JARs, который активируется после выбора Classpath.

4- Добавьте Selenium Java Client JARS. Перейдите в папку, в которую вы загрузили и извлекли JAR-файлы.

5- Как только все JAR-файлы будут добавлены, нажмите «Применить и закрыть».

Когда наш проект настроен с Selenium и Java, мы готовы написать и запустить наш первый тестовый сценарий в Selenium.

Если вы разработчик или тестировщик и хотите поднять свои навыки работы с Selenium и Java на новый уровень, эта сертификация Selenium Java 101 от LambdaTest поможет вам достичь этой цели.

Вот краткий обзор сертификации Selenium Java 101 от LambdaTest:

Проверьте это: Маски CSS: вы можете замаскировать часть элемента с помощью другого элемента (или изображения)

[Демонстрация] Написание первого тестового случая с помощью Selenium и Java

Пришло время перейти к практическим занятиям! В этом разделе статьи о Selenium с Java вы научитесь писать свой первый тестовый пример с использованием Selenium с Java.

Сценарий тестирования

Сначала давайте разберемся, для какого сценария тестирования мы будем писать тестовый сценарий. Мы будем автоматизировать отправку простой формы, где шаги будут следующими.

  1. Запустите веб-сайт.

  2. Введите значение ‘a’.

  3. Введите значение для ‘b’.

  4. Нажмите на кнопку «Получить итог», чтобы вывести сумму двух чисел «a» и «b».

  5. Проверьте результат.

Пример 1: Запуск нашего тестового примера на локальной машине

В этом разделе статьи о Selenium с Java мы узнаем, как написать автоматизированный тестовый пример и запустить его на локальной машине. Шаги подробно описаны ниже.

Шаг 1: Создайте файл класса внутри вашего Java-проекта.
Щелкните правой кнопкой мыши на папке src внутри вашего проекта. Выберите New > Class.

Я назову его TestOne.java. Тест будет создан внутри пакета по умолчанию.

Шаг 2: Напишите код нашего тестового примера, используя Selenium с Java.

Прежде всего, давайте сделаем необходимые импорты Selenium в верхней части нашего файла класса теста. Я буду запускать тест на браузере Chrome для этой демонстрации.

import org.openqa.selenium.By;      
import org.openqa.selenium.WebDriver;              
import org.openqa.selenium.chrome.ChromeDriver;
Вход в полноэкранный режим Выход из полноэкранного режима

Внутри метода main() зададим свойства для определения пути к драйверу браузера, который мы загрузили во время установки.

System.setProperty(“webdriver.chrome.driver”, “C:/location_of_chromedriver.exe”);
Вход в полноэкранный режим Выйти из полноэкранного режима

После этого определим новый экземпляр Webdriver.

WebDriver driver= new ChromeDriver();
Войти в полноэкранный режим Выход из полноэкранного режима

Обзор всех возможных методов, которые WebDriver API предоставляет нам для автоматизации браузера, показан на снимке ниже.

Теперь давайте напишем код для нашего тестового сценария.

//Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

        //Enter values into form and submit      
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed");
        }

        //Close the browser
        driver.quit();
Вход в полноэкранный режим Выход из полноэкранного режима

Я хотел бы кратко объяснить команды WebDriver, которые я использовал в тестовом сценарии.

  • get(String arg): void

Метод get() принимает в качестве параметра строковый URL и открывает указанный URL в текущем окне браузера. Этот метод ничего не возвращает.

  • findElement(By by): WebElement

Метод findElement() в Selenium — это команда WebElement, используемая для поиска Web-элемента в DOM для выполнения какого-либо действия, например, щелчка мышью, ввода текста и т. д. Он принимает входной параметр типа By для поиска элемента с использованием различных стратегий локатора, таких как id, classname, XPath и т.д.

Функция findElement() возвращает WebElement, если элемент найден, в противном случае выбрасывается исключение времени выполнения — NoSuchElementException. Чтобы узнать больше об обработке исключений, вы можете просмотреть этот блог о распространенных исключениях Selenium.

  • quit(): void

Метод quit() используется для закрытия всех окон браузера, открытых Webdriver. Он не принимает никаких параметров и ничего не возвращает.

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

МЕТОД WEBELEMENT ИСПОЛЬЗОВАНИЕ МЕТОДА
click(): void Чтобы щелкнуть элемент
sendKeys(): void Имитация ввода текста в элемент, который может установить его значение. В качестве ввода принимается последовательность символов.
getText(): String Получение видимого (т.е. не скрытого CSS) текста элемента, включая вложенные элементы.

Чтобы узнать больше о методах WebElement, пожалуйста, найдите официальную документацию здесь.

Для поиска элементов я использовал инструменты разработчика браузера.

Наш финальный код выглядит следующим образом!

import org.openqa.selenium.By;      
import org.openqa.selenium.WebDriver;              
import org.openqa.selenium.chrome.ChromeDriver;

public class TestOne {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "E:/Selenium/chromedriver.exe");

        WebDriver driver= new ChromeDriver();          

        //Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo");

        //Enter values into form and submit      
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed");
        }
               //Close the browser
        driver.quit();              
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Источник: *GitHub*.

Шаг 3: Запустите тест.

Наконец, пришло время запустить наш тест. Щелкните правой кнопкой мыши на файле тестового класса и выберите.

Run As > Java Application

Запустится браузер, и тест будет успешно выполнен на вашей локальной машине!

Вы также можете проверить журналы в консоли.

Пример 2: Запуск нашего тестового случая на онлайн Selenium Grid

В предыдущем разделе этой статьи о Selenium с Java мы рассмотрели, как запустить наш тестовый пример на локальной машине. Здесь мы рассмотрим, как запустить наш тестовый пример в удаленной облачной Selenium Grid.

Запуск тестовых примеров в онлайн Selenium Grid поможет нам решить перечисленные ниже проблемы, которые возникают при локальном выполнении, когда размер проекта и требования к тестовому покрытию увеличиваются.

  • Масштабируемость

  • Лучшее покрытие браузеров

  • Ограничения инфраструктуры для кросс-браузерного тестирования и т.д.

LambdaTest — это платформа для кросс-браузерного тестирования, которая предоставляет онлайн ферму браузеров из 3000+ комбинаций браузеров и ОС и онлайн Selenium Grid, которую вы можете интегрировать в ваш текущий проект тестирования путем минимальных изменений кода. Следуйте за нами, чтобы узнать, как это сделать!

Вот взгляд на облачную Selenium Grid от LambdaTest:

Вы также можете подписаться на YouTube-канал LambdaTest и быть в курсе последних уроков по Selenium-тестированию, Cypress E2E тестированию, CI/CD и многому другому.

Шаг 1: Создайте бесплатный аккаунт на LambdaTest и получите уникальное имя пользователя и ключ доступа.

Шаг 2: Внутри класса теста определите все необходимые переменные для соединения с удаленной сеткой. Кроме того, вы можете определить свое уникальное имя пользователя и ключ доступа.

static String username = "YOUR_USERNAME";
   static String accesskey = "YOUR_ACCESS_KEY";
   static RemoteWebDriver driver = null;
   static String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
   static boolean status = false;
Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг 3: Передайте возможности браузера. Вы можете сгенерировать свои собственные желаемые возможности с помощью LambdaTest Capabilities Generator.

DesiredCapabilities capabilities = new DesiredCapabilities();  
     capabilities.setCapability("browserName", "Chrome");
     capabilities.setCapability("browserVersion", "101.0");
     HashMap<String, Object> ltOptions = new HashMap<String, Object>();
     ltOptions.put("user",username);
     ltOptions.put("accessKey",accesskey);
     ltOptions.put("build", "Selenium Java Test");
     ltOptions.put("name", "TestOne");
     ltOptions.put("platformName", "Windows 11");
     ltOptions.put("selenium_version","4.1.2");
     ltOptions.put("driver_version","101.0");
     capabilities.setCapability("LT:Options", ltOptions);
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 4: Определите новый экземпляр RemoteWebDriver().

Remote WebDriver — это интерфейс, который используется для выполнения автоматизации браузера на удаленном вычислительном устройстве или в распределенной среде. Он может управлять браузером в сетке путем настройки узла и концентратора.

Обратите внимание, что вам больше не нужно передавать драйвер браузера.

try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        }
        catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 5: Наш окончательный код теперь выглядит так!

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class TestOneWithRemoteGrid {

    static String username = "YOUR_USERNAME";
    static String accesskey = "YOUR_ACCESS_KEY";
    static RemoteWebDriver driver = null;
    static String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
    static boolean status = false;

    public static void main(String[] args) {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "Chrome");
        capabilities.setCapability("browserVersion", "101.0");
        HashMap<String, Object> ltOptions = new HashMap<String, Object>();
        ltOptions.put("user",username);
        ltOptions.put("accessKey",accesskey);
        ltOptions.put("build", "Selenium Java Test");
        ltOptions.put("name", "TestOne");
        ltOptions.put("platformName", "Windows 11");
        ltOptions.put("selenium_version","4.1.2");
        ltOptions.put("driver_version","101.0");
        capabilities.setCapability("LT:Options", ltOptions);

        try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }  


        //Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

        //Enter values into form and submit        
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed - " + result);
        }                

        //Close browser
        driver.quit();                    
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Источник: *GitHub*.

Шаг 6: Запустите тест.

Тест начинает выполняться. Перейдите на панель LambdaTest Dashboard, чтобы посмотреть состояние выполнения.

Наш тест выполнен успешно. Вы можете проанализировать подробный отчет, содержащий видео и журналы.

Кроме того, вы можете перейти на панель аналитики LambdaTest Analytics Dashboard, чтобы увидеть показатели производительности теста. Вы можете увидеть общее количество пройденных или проваленных тестов в разделе «Сводка тестов». Вы также можете увидеть снимок последовательных тестов в разделе «Обзор тестов».

Знаете ли вы, что математические функции CSS min(), max() и clamp() — это полифилл, который предоставляет более продвинутые математические выражения в дополнение к ‘calc()’.

Использование фреймворка TestNG для параллельного выполнения тестов

Если вы работаете над реальным проектом, вам придется писать, запускать и поддерживать сотни тестовых случаев. Каждый цикл тестирования потребует от вас выполнения тестовых примеров на нескольких платформах и устройствах, чтобы убедиться, что приложение ведет себя так, как ожидается, в различных условиях, чтобы гарантировать качество продукта перед запуском. Сокращение общего времени выполнения тестов становится крайне желательным, и одним из способов достижения этой цели является параллельное тестирование.

Параллельное тестирование — это предпочтительная стратегия выполнения тестов, при которой тесты выполняются параллельно для сокращения общего времени выполнения теста. Параллельное тестирование было введено для замены традиционного подхода последовательного тестирования. Как следует из названия, тесты выполняются последовательно, что отнимает больше времени.

В предыдущем разделе вы узнали, как написать и запустить тест последовательно, используя Selenium с Java. Теперь я расскажу вам, как выполнять тесты параллельно на облачной Selenium Grid с помощью фреймворка TestNG.

Введение во фреймворк TestNG

TestNG — это известная платформа автоматизации тестирования с открытым исходным кодом для Java, где NG означает «следующее поколение». TestNG широко используется пользователями Selenium благодаря своим возможностям и практичности. Запуск тестов Selenium в одиночку имеет множество ограничений. Однако TestNG предоставляет целый набор новых возможностей, делая его мощным и полезным.

Ниже перечислены несколько важнейших особенностей TestNG:

  • Легкая генерация отчетов в желаемых форматах. Теперь стало проще анализировать, сколько тестовых примеров прошло и сколько не прошло во время каждого запуска теста.

  • Поддержка параллельного тестирования. Несколько тестовых примеров могут выполняться одновременно, что сокращает общее время выполнения теста.

  • Возможность группировать тестовые случаи в TestNG без особых усилий.

  • Поддерживаются аннотации TestNG, такие как @test, @BeforeTest, @AfterTest и т.д.

  • Легкая интеграция с такими инструментами, как Maven, Jenkins и т.д.

Параллельное выполнение тестов в TestNG с использованием XML-файла TestNG

Как уже отмечалось, одним из ключевых преимуществ использования фреймворка автоматизации TestNG является то, что он поддерживает параллельное выполнение тестов. Система автоматизации тестирования TestNG позволяет выполнять тесты в параллельном или многопоточном режиме, используя концепцию многопоточности Java.

Многопоточность — это процесс одновременного выполнения нескольких потоков без какой-либо зависимости друг от друга. Это означает, что потоки выполняются изолированно, и поэтому исключения, возникающие в одном потоке, не влияют на другие. Многопоточность помогает эффективно использовать процессор, значительно сокращая время простоя. В TestNG мы включаем параллельное тестирование путем внесения необходимых изменений в файл конфигурации — файл TestNG XML.

TestNG XML — это файл конфигурации тестового набора в TestNG, который помогает настроить выполнение тестов. Он также позволяет запускать один тестовый файл при многочисленных комбинациях заданных параметров и значений. Простой XML-файл TestNG XML выглядит следующим образом.

Чтобы запустить параллельное выполнение, нам нужно установить атрибут parallel. Этот атрибут принимает четыре значения:

  • classes — для запуска в параллельном режиме всех тестовых примеров, присутствующих внутри классов в XML.

  • methods — для запуска всех методов с аннотацией @test в параллельном режиме.

  • tests — для запуска всех тестовых случаев, присутствующих внутри тегов в XML в параллельном режиме.

  • экземпляры — для запуска всех тестовых случаев в одном экземпляре в параллельном режиме.

Мы также можем задать количество потоков, которые мы хотим выделить во время выполнения, используя атрибут thread-count. По умолчанию значение количества потоков в TestNG равно 5.

<suite name=”Regression Test Suite” parallel=”methods” thread-count=”2">
Вход в полноэкранный режим Выход из полноэкранного режима

Двигаясь дальше, давайте установим и настроим TestNG в нашем Eclipse. Также мы узнаем, как переписать наш демонстрационный тест в виде теста TestNG и запустить его параллельно в трех разных браузерах, используя онлайн Selenium Grid.

Установка и настройка

Установка TestNG в Eclipse — это простой процесс. Перейдите в Eclipse Marketplace и установите TestNG.

Справка > Eclipse Marketplace.

После установки вы сможете найти его в разделе Installed.

Завершив установку, перейдем к базовой настройке проекта.

Создание проекта TestNG

Чтобы создать новый проект Java TestNG в Eclipse, выполните следующие шаги.

Шаг 1: Запустите Eclipse и создайте новый Java-проект.

Перейдите в меню Файл > Новый > Java-проект.

Шаг 2: Назовите свой проект и нажмите кнопку Next.

Шаг 3: Добавьте библиотеки.

Щелкните правой кнопкой мыши на папке проекта и выберите Properties.

  1. Выберите Java Build Path.

  2. Перейдите к Libraries, выберите Classpath и нажмите Add Library.

Шаг 4: Выберите TestNG и нажмите Далее.

Вы увидите, что TestNG был добавлен в библиотеку проекта.

Шаг 5: Добавьте JAR-файлы Selenium API в проект TestNG и нажмите Применить и Закрыть.

Мы успешно создали проект TestNG и готовы написать и запустить наш первый тестовый пример TestNG.

Как запускать тестовые случаи параллельно с Selenium в TestNG на Cloud Grid?

В этом разделе статьи о Selenium с Java мы узнаем, как добиться параллельного выполнения тестов в TestNG. Для демонстрации мы перепишем наш предыдущий тестовый пример в тест TestNG и выполним его параллельно на пяти различных браузерах (Chrome, Safari, Firefox, Opera и Edge), используя Online Selenium Grid, предоставляемый LambdaTest.

Шаги подробно описаны ниже.

Шаг 1: Перейдите в проект TestNG, который мы создали в предыдущем шаге.
Шаг 2: Создайте файл класса TestNG, выполнив описанные ниже действия:

  1. Щелкните правой кнопкой мыши на проекте src и найдите TestNG в нижней части списка.

  2. Выберите Создать класс TestNG.

3- Назовите класс, выберите необходимые аннотации, укажите имя XML-файла и нажмите Finish. Здесь я назвал класс ParallelTest.

Создается файл класса TestNG, содержащий скелетную структуру кода.

Давайте быстро пройдемся по используемым аннотациям TestNG:

  • @test — Подразумевает, что метод является тестовым случаем. Поэтому все тесты должны быть помечены этой аннотацией.

  • @BeforeMethod и @AfterMethod — эти аннотации запускаются один раз до и после каждого метода @test в классе.

Шаг 3: Напишите наш тестовый пример, используя TestNG и Selenium.
Я переписал наш предыдущий тестовый сценарий в виде тестового случая TestNG. Некоторые заметные изменения следующие:

  • Внутри метода, отмеченного аннотацией @BeforeMethod, я разместил все шаги настройки, поскольку они должны быть выполнены первыми перед тестом. Кроме того, имя метода было переименовано в setUp(). Кроме того, для обработки исключений был реализован блок try-catch.

  • Также я добавил аннотацию @Parameters поверх метода для получения значений браузера, версии и платформы из нашего XML-файла TestNG.

 [@BeforeMethod](http://twitter.com/BeforeMethod)
    [@Parameters](http://twitter.com/Parameters)(value={"browser","version","platform"})
    public void setUp(String browser, String version, String platform) throws Exception {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("browserName", browser);
            capabilities.setCapability("browserVersion",version);
            HashMap<String, Object> ltOptions = new HashMap<String, Object>();
            ltOptions.put("user",username);
            ltOptions.put("accessKey",accesskey);
            ltOptions.put("build", "TestNG Parallel Test");
            ltOptions.put("name", "TestOne");
            ltOptions.put("platformName", platform);

            ltOptions.put("selenium_version","4.1.2");
            ltOptions.put("driver_version","101.0");
            capabilities.setCapability("LT:Options", ltOptions);

         try {
             driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
         } catch (MalformedURLException e) {
             System.out.println("Invalid grid URL");
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
     }
Вход в полноэкранный режим Выход из полноэкранного режима
  • Внутри метода, отмеченного аннотацией @AfterMethod, я разместил шаги по завершению теста, поскольку они должны выполняться последними после каждого теста. Также имя метода было переименовано в tearDown().
[@AfterMethod](http://twitter.com/AfterMethod)
        public void tearDown() throws Exception {
           if (driver != null) {
                driver.quit();
            }
        }
    }
Вход в полноэкранный режим Выход из полноэкранного режима
  • Мы будем писать наш фактический код для шагов тестирования внутри метода, помеченного аннотацией @test. Поскольку мы автоматизируем дополнительный сценарий, я переименовал метод в addValues().
[@Test](http://twitter.com/Test)
    public void addValues() {
            //Maximize window      
            driver.manage().window().maximize();    

            //Launch the Site.        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

            //Enter values into form and submit        
            driver.findElement(By.id("sum1")).sendKeys("2");                    
            driver.findElement(By.id("sum2")).sendKeys("5");    
            driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

            //Verify the result
            String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

            if( Integer.parseInt(result) == 7) {
                 System.out.println("Test Success");
            } else {
                 System.out.println("Test Failed - " + result);
            }
Вход в полноэкранный режим Выход из полноэкранного режима

Окончательный код выглядит следующим образом.

g;

    import java.net.MalformedURLException;
    import java.net.URL;

    import org.openqa.selenium.By;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.remote.RemoteWebDriver;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;

    public class ParallelTest {

    public String username = "YOUR_USERNAME";
    public String accesskey = "YOUR_ACCESSKEY";
    public RemoteWebDriver driver = null;
    public String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
    boolean status = false;

    [@BeforeMethod](http://twitter.com/BeforeMethod)
    [@Parameters](http://twitter.com/Parameters)(value={"browser","version","platform"})
    public void setUp(String browser, String version, String platform) throws Exception {
            DesiredCapabilities capabilities = new DesiredCapabilities();
                    capabilities.setCapability("browserName", browser);
            capabilities.setCapability("browserVersion",version);
            HashMap<String, Object> ltOptions = new HashMap<String, Object>();
            ltOptions.put("user",username);
            ltOptions.put("accessKey",accesskey);
            ltOptions.put("build", "TestNG Parallel Test");
            ltOptions.put("name", "TestOne");
            ltOptions.put("platformName", platform);
            ltOptions.put("selenium_version","4.1.2");
            ltOptions.put("driver_version","101.0");
            capabilities.setCapability("LT:Options", ltOptions);

         try {
             driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
         } catch (MalformedURLException e) {
             System.out.println("Invalid grid URL");
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
     }
    [@Test](http://twitter.com/Test)
    public void addValues() {
            //Maximize window      
            driver.manage().window().maximize();    

            //Launch the Site.        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

            //Enter values into form and submit        
            driver.findElement(By.id("sum1")).sendKeys("2");                    
            driver.findElement(By.id("sum2")).sendKeys("5");    
            driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

            //Verify the result
            String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

            if( Integer.parseInt(result) == 7) {
                 System.out.println("Test Success");
            } else {
                 System.out.println("Test Failed - " + result);
            }   

    [@AfterMethod](http://twitter.com/AfterMethod)
        public void tearDown() throws Exception {
           if (driver != null) {
                driver.quit();
Вход в полноэкранный режим Выход из полноэкранного режима

GitHub

**Шаг 4: **Настройте XML-файл TestNG для работы в параллельном режиме. Шаги приведены ниже:

  1. Откройте файл testng.xml. Если он еще не создан, вы можете создать его, добавив новый файл в проект и назвав его testng.xml.

  2. Отредактируйте шаблон. Вы можете назвать тестовый набор и имя теста по своему усмотрению. Но имя класса должно быть точно таким же, как у нашего класса TestNG.

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "[https://testng.org/testng-1.0.dtd](https://testng.org/testng-1.0.dtd)">
    <suite name="Parallel Test Suite">
        <test name="Test">
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test> <!-- Test -->
    </suite> <!-- Suite -->
Войдите в полноэкранный режим Выйдите из полноэкранного режима

3- Чтобы запустить параллельное выполнение тестов в TestNG, задайте атрибут parallel в . Для параллельного выполнения тестовых методов установите значение атрибута как «tests».

<suite name="Parallel Test Suite" parallel="tests" thread-count="5">
Вход в полноэкранный режим Выйти из полноэкранного режима

4- Добавьте параметры для настройки тестов на выполнение в определенном браузере, версии браузера и ОС. Например, ниже приведен код для настройки теста на запуск в браузере Chrome версии 101.0 в Windows 11. Аналогично, вы можете указать любое количество комбинаций.

<test name="Chrome Test">
            <parameter name="browser" value="Chrome" />
            <parameter name="version" value="101.0" />

            <parameter name="platform" value="WIN11" />

            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>
Вход в полноэкранный режим Выйти из полноэкранного режима

Окончательный код для testng.xml выглядит следующим образом.

<?xml version="1.0" encoding="UTF-8"?>
    <suite name="Suite" parallel="tests" thread-count="5">

        <test name="Chrome Test">
            <parameter name="browser" value="Chrome" />
            <parameter name="version" value="101.0" />
            <parameter name="platform" value="WIN11" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Firefox Test">
            <parameter name="browser" value="Firefox" />
            <parameter name="version" value="100.0" />
            <parameter name="platform" value="WIN8" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Safari Test">
            <parameter name="browser" value="safari" />
            <parameter name="version" value="11.0" />
            <parameter name="platform" value="macos 10.13" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="MS Edge Test">
            <parameter name="browser" value="Edge" />
            <parameter name="version" value="101.0" />
            <parameter name="platform" value="WIN10" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Opera Test">
            <parameter name="browser" value="Opera" />
            <parameter name="version" value="85.0" />
            <parameter name="platform" value="WIN10" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test> <!-- Test -->
    </suite> <!-- Suite -->
Вход в полноэкранный режим Выйти из полноэкранного режима

Всего у нас 5 различных тегов, и каждый из них будет выполняться на разных потоках.

5- Наконец, пришло время запустить наш тестовый пример. Щелкните правой кнопкой мыши на нашем файле testng.xml и выберите Run As > TestNG Test Suite.

Наш тест начнет выполняться. Перейдите на панель автоматизации LambdaTest, чтобы увидеть статус выполнения.

Тест выполняется параллельно в 5 браузерах, отчеты и журналы генерируются успешно.

Лучшие практики для автоматизированного тестирования Selenium

С помощью автоматизации тестирования мы стремимся сократить трудозатраты на ручное тестирование, ускорить выполнение, обнаружить максимум ошибок на ранней стадии, добиться лучшего покрытия и ускорить время выхода на рынок. Однако написание стабильного и надежного тестового случая может оказаться сложной задачей из-за различных факторов, таких как нестабильность теста, неправильный подход к тестированию и т. д. Именно здесь на помощь приходит HyperExecute, который устраняет эти факторы и сокращает время выполнения тестов. Это позволяет предприятиям тестировать код и устранять проблемы гораздо быстрее, а значит, ускорять время выхода на рынок.

В этом разделе статьи о Selenium с Java мы обсудим некоторые рекомендации и шаблоны проектирования, рекомендованные сообществом Selenium, чтобы помочь вам создать хорошо структурированные тестовые наборы. Помните, что не существует ситуации «один размер подходит для всех», когда речь идет об автоматизации тестирования. Вдумчиво решите, что лучше всего подойдет для вашей конкретной среды.

  1. Планирование и разработка тестовых примеров заранее

Прежде чем приступить к написанию тестов автоматизации, рекомендуется, чтобы команды QA потратили время на создание надлежащего плана тестирования. Опросы показывают, что 80% проектов сразу приступают к автоматизации, не имея осязаемой стратегии.

Однако, чтобы обеспечить безошибочное тестирование приложения, QA должны придумать все возможные логические сценарии и создать максимум тестовых случаев, основанных на перспективах конечного пользователя.

2. Реализация объектной модели страницы

Когда происходит изменение пользовательского интерфейса, локаторы Selenium также могут измениться, и мы должны обновить измененные локаторы во всех тестовых сценариях, использующих их. Но по мере увеличения сложности приложения и более частых изменений пользовательского интерфейса создание и поддержка тестовых сценариев становится утомительным. Объектная модель страницы (POM) является популярным шаблоном проектирования в автоматизированном тестировании Selenium, который помогает улучшить обслуживание тестов и уменьшить дублирование кода.

3. Выбор наиболее подходящих локаторов

При написании сценариев автоматизированного тестирования значительная часть времени уходит на определение местоположения веб-элементов. Selenium предлагает нам множество стратегий для определения местоположения веб-элемента, таких как ID, Name, Link Text, XPath, CSS Selector, DOM Locator и т.д.

Однако некоторые веб-локаторы более хрупкие, чем другие. Поскольку реализация пользовательского интерфейса подвержена частым изменениям, мы должны быть осторожны в выборе правильных веб-локаторов, что позволит минимизировать влияние изменений кода пользовательского интерфейса на тесты автоматизации. Если есть возможность, выбирайте уникальные локаторы, такие как ID и Name, которые легко найти и они более надежны, так как менее подвержены изменениям.

4. Внедряйте протоколирование и отчетность

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

Отчет о тестировании — это документ, который содержит всю информацию о конкретном запуске теста, включая количество пройденных тестовых случаев, количество проваленных тестовых случаев, общее затраченное время, ошибки со снимком и т.д. Несмотря на то, что Selenium по умолчанию не поставляется с функцией создания отчетов, вы можете реализовать ее с помощью таких фреймворков автоматизации тестирования, как TestNG.

Логирование помогает нам лучше понять наш код и, следовательно, облегчает отладку. Изучение журналов — это самый быстрый способ проанализировать, почему в вашем коде возникла проблема. Некоторые из популярных уровней ведения журнала: отладка, информация, предупреждение, ошибка и критический. Хорошее ведение журнала экономит время. Однако, если переусердствовать, это может замедлить выполнение тестов.

5. Включение команд ожидания

Веб-браузерам требуется некоторое время для загрузки содержимого веб-страницы. Время загрузки страницы зависит от многих внешних факторов, таких как скорость сети, проблемы с сервером, возможности машины и т.д. Для решения этой проблемы тестировщикам необходимо добавить в код некоторую задержку, чтобы веб-элемент был загружен и доступен до выполнения каких-либо действий над ним.

В Java тестировщики часто добиваются такой задержки с помощью Thread.sleep(). Однако это не является рекомендуемой практикой. Как следует из названия, при вызове метода Thread.sleep() поток переходит в спящий режим на указанное время и не делает абсолютно ничего, чтобы приостановить сценарий автоматизации. По истечении этого времени он переходит к выполнению следующей строки кода.

В режиме реального времени мы не сможем предсказать точное время загрузки страницы, поскольку оно зависит от многих внешних факторов. Иногда страница может загрузиться быстро, снизив скорость выполнения теста из-за оставшейся ненужной задержки, вызванной sleep(). А иногда может потребоваться больше времени, чем указано, что приведет к неудаче теста, поскольку элемент не был полностью загружен. В качестве лучшей и более эффективной альтернативы используйте команды Implicit wait и Explicit wait, предоставляемые Selenium, вместо метода sleep.

Заключение

Selenium с Java является наиболее распространенной комбинацией автоматизации тестирования среди специалистов по контролю качества. В этом руководстве мы рассмотрели, как начать работу с Selenium Automation Testing with Java и написали наш самый первый тестовый пример. Кроме того, мы также узнали, как оптимизировать выполнение тестов с помощью параллельного тестирования и других лучших практик для создания надежного цикла тестирования. Я надеюсь, что этот учебник окажется полезным. Нам еще многое предстоит изучить!

Счастливого тестирования!

Оцените статью
Procodings.ru
Добавить комментарий