«Запуск автоматических тестов масштабирования с помощью Playwright»

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

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

Playwright, фреймворк на Node.js, является одним из таких фреймворков, которые недавно приобрели популярность. Его популярность можно объяснить популярностью Node, что помогло Playwright привлечь большую пользовательскую базу. Playwright – это мощный фреймворк с открытым исходным кодом, разработанный Microsoft для автоматизации веб-приложений. У него есть уникальный набор функций и возможностей, которые делают его ценным инструментом для разработчиков и тестировщиков.

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

Итак, приступим.

Что такое Playwright?

Playwright – это фреймворк с открытым исходным кодом, созданный Microsoft для тестирования и автоматизации веб-приложений. Этот фреймворк совместим с Windows, macOS и Linux и поддерживает кросс-браузерное тестирование на Chromium (Google Chrome, Microsoft Edge), Mozilla Firefox и WebKit (Apple Safari).

Он широко используется, потому что совместим с Java, Python, C# .NET и Node.js. Это означает, что его могут использовать разработчики с различными языками программирования, что делает его универсальным фреймворком. Playwright является более эффективным инструментом для кросс-браузерного тестирования и веб-скрапинга, чем другие аналоги (например, Selenium, Cypress) из-за единого высокоуровневого API для автоматизации веб-приложений в разных браузерах. Тестировщики могут использовать эти API для перехода по URL-адресам, взаимодействия с элементами, выполнения действий, например, заполнения форм и скрапинга данных.

Playwright, который был выпущен в январе 2020 года, быстро набрал популярность благодаря своей стабильности, открытому исходному коду и поддержке нескольких языков, таких как C#, Java и Python. Эта поддержка позволяет пользователям легко перейти с существующих фреймворков на Playwright. Его растущая популярность проявляется в текущем количестве пользователей Microsoft Playwright на GitHub.

Более чем 36 000 активных пользователей, более 3 000 форков и более 450 активных участников свидетельствуют о его популярности, которая будет продолжаться.

Преимущества Playwright

Последняя версия Playwright, 1.38, включает все разнообразные функции, которые предлагает фреймворк. Он поддерживает тестовые сценарии с несколькими вкладками, несколькими пользователями и iframe, а также встроенные и пользовательские ожидания для любого действия локатора.

Кроме того, несколько важных преимуществ использования Playwright для автоматизации тестирования веб-приложений перед другими фреймворками:

Playwright также поддерживает все основные языки программирования, такие как C#, Python, .NET и JavaScript/TypeScript, что делает его простым в использовании для автоматизации тестов и добавления утверждений для различных приложений. Тестовые сценарии могут включать потоки навигации по вебу, заполнение форм и т.д.

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

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

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

Широкая поддержка интеграций

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

  • Инструментами CI/CD, такими как Jenkins, Gitlab, и др.
  • Инструментами отчетности и фреймворками тестирования, такими как Allure, Extent Reports или собственной отчетностью, а также JUnit, TestNG, Cucumber и др.
  • Инструментами тестирования производительности и фреймворками для тестирования API.
  • Облачными тестовыми платформами, такими как LambdaTest.

Умное встроенное ожидание

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

Этот корпоративный подход может использоваться для реализации времени ожидания и условий, таких как видимость элемента, доступность элемента для взаимодействия, навигация по странице и завершение сетевых вызовов.

Параллельное тестирование с полной изоляцией тестов

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

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

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

Комбинация Playwright Java дополняют возможности друг друга, что позволяет создавать более стабильные и масштабируемые тестовые случаи автоматизации.

Она поддерживает различные языки, но Java популярна благодаря широкому использованию и надежной экосистеме. Java по-прежнему входит в топ 3 языков и занимает место в топ 5 последнего индекса TIOBE по языкам программирования, поэтому она знакома многим программистам и легко используется с Playwright. JDK 21 – это последний релиз с долгосрочной поддержкой платформы Java SE.

Несколько других преимуществ, которые делают эту комбинацию мощной, включают в себя:

Непрерывная настройка

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

Все доступные версии готовы к использованию на веб-сайте Maven и могут быть добавлены в ваш проект следующим образом.

Изображение 1

Кроссплатформенная совместимость

Java является языком, независимым от платформы, который позволяет создавать сценарии Playwright, работающие на Linux, Windows или macOS. Это полезно при работе с автоматизацией веб-приложений, когда тестовые случаи необходимо выполнять в браузерах на всех платформах.

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

Современные привязки к языкам

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

Подробная документация и поддержка

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

Настройка фреймворка для Playwright и Java

Настройка проекта Playwright Java довольно проста. Как уже упоминалось, Playwright поставляется в виде набора модулей Maven. Это делает его очень простым в настройке, добавив одну зависимость в файл pom.xml проекта Maven.

На более высоком уровне настройку можно разделить на три части:

  • Установка Java 11
  • Создание проекта Maven
  • Добавление зависимости Maven Playwright

Давайте рассмотрим каждую из них по очереди, прежде чем написать наш первый тестовый случай.

Установка Java 11

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

Шаг 1. Посетите официальный веб-сайт Java и загрузите последнюю совместимую версию, соответствующую вашей операционной системе. Вместо этого вы также можете выбрать OpenJDK. Он является открытым и идентичным Oracle Java по сборке и результатам.

Шаг 2. Запустите загруженный файл установки и следуйте инструкциям по установке Java на вашу систему.

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

В этом руководстве в качестве примера использовалась среда разработки Eclipse IDE. Однако вы можете использовать любую среду разработки по своему выбору и создать новый проект Maven в ней, а затем продолжить с последующими шагами.

Шаг 1. Запустите среду Eclipse IDE → Выберите Создать → Проект.

Шаг 2. Выберите Maven → Maven Project, а затем нажмите Далее.

Шаг 3. Заполните необходимые детали проекта и назовите его PlaywrightJava. Будет создан новый проект, подобный приведенному ниже.

Добавление зависимости Playwright в Maven

Playwright для Java доступен как зависимость Maven. Чтобы использовать его в вашем проекте,

Шаг 1. Посетите веб-сайт Maven и найдите Playwright.

Шаг 2. Выберите первый вариант, а затем выберите последнюю стабильную версию.

Шаг 3. Скопируйте данные зависимости и добавьте их в файл pom.xml вашего проекта. Мы использовали v1.38.0, которая была последней версией на момент написания этой статьи.

<dependency>         <groupId>com.microsoft.playwright</groupId>         <artifactId>playwright</artifactId>         <version>1.38.0</version></dependency>

Таким образом, мы завершили базовую настройку проекта и установку для начала написания первого тестового сценария Playwright Java для автоматизации веб-тестирования.

Написание первого тестового сценария с использованием Playwright Java

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

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

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

Тестовый сценарий

  1. Перейти на Площадку LambdaTest.
  2. Нажмите кнопку Submit формы ввода.
  3. Утвердите, что страница с формой ввода загружена.
  4. Заполните форму на главной странице.
  5. Нажмите кнопку Submit.
  6. Утвердите подтверждение.

Для выполнения тестового сценария используется TestNG. Добавьте зависимость TestNG вместе с зависимостью gson в файл pom.xml.

Gson, как описано на веб-сайте Maven, является библиотекой Java, которая может преобразовывать объекты Java в их представление JSON. Мы будем использовать его для создания JsonObject для добавления свойств облака для платформы LambdaTest и подключения к облачной сетке. Эти свойства помогают выбрать браузер и платформу для выполнения и определить детали выполнения на панели инструментов автоматизации веб-платформы LambdaTest для лучшего анализа результатов и отладки.

Окончательный файл pom.xml после добавления всех зависимостей должен выглядеть так:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">         <modelVersion>4.0.0</modelVersion>         <groupId>PlaywrightJava</groupId>         <artifactId>PlaywrightJava</artifactId>         <version>0.0.1-SNAPSHOT</version>         <build>                  <sourceDirectory>src</sourceDirectory>                  <plugins>                           <plugin>                                    <artifactId>maven-compiler-plugin</artifactId>                                    <version>3.8.1</version>                                    <configuration>                                             <release>19</release>                                    </configuration>                           </plugin>                  </plugins>         </build>         <dependencies>                  <dependency>                           <groupId>com.microsoft.playwright</groupId>                           <artifactId>playwright</artifactId>                           <version>1.38.0</version>                  </dependency>                  <dependency>                           <groupId>org.testng</groupId>                           <artifactId>testng</artifactId>                           <version>7.8.0</version>                           <scope>test</scope>                  </dependency>                  <dependency>                           <groupId>com.google.code.gson</groupId>                           <artifactId>gson</artifactId>                           <version>2.10.1</version>                  </dependency>         </dependencies></project>

После завершения настройки проекта и создания файла pom с обновленными зависимостями, мы переходим к написанию нашего первого тестового случая на Java с использованием облачного исполнения Playwright.

Тестовый случай, который мы собираемся написать, фактически будет разделен на две части:

  1. Файл класса Java, который будет содержать фактический тестовый сценарий, включая навигацию, выполнение действий на веб-странице, заполнение данных и проверку результата.
  2. Файл тестового случая, который будет содержать код для подключения к облачной сети LambdaTest и вызов выполнения тестового сценария, определенного в первом файле.

Давайте начнем.

Добавьте пакет base внутри пакета src. В нем добавьте новый файл и назовите его SampleTestFlow.java. В этом файле будет выполнение сценария тестирования, описанного ранее, и он будет выглядеть следующим образом:

package base;import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;import com.microsoft.playwright.Locator;import com.microsoft.playwright.Page;public class SampleTestFlow {       /*       * Эта функция предназначена для выполнения тестового сценария.       * Переход на веб-страницу, заполнение и отправка данных и проверка сообщений об успешном завершении.       */       public static void playwrightTestFlow(Page page) {              try {                     // Перейти на площадку LambdaTest Selenium                     page.navigate("https://www.lambdatest.com/selenium-playground/");                     // Найти и кликнуть на ссылку Input Form Submit                     Locator inputForm = page.locator("text=Input Form Submit");                     inputForm.click();                     // Проверить, что страница Input Form Submit загружена                     assertThat(page.getByText("Input form validations")).isVisible();                     // заполнить данные в форме                     fillInputFormData(page);                     // Нажать кнопку Submit для отправки формы                     page.getByText("Submit").click();                     // Получить сообщение об успешном завершении, вывести его на консоль и проверить его.                     String successMessage = page.locator("xpath=//p[@class='success-msg hidden']")                     .textContent();                     System.out.println(successMessage);                     assertThat(page.locator("xpath=//p[@class='success-msg hidden']"))                     .hasText("Thanks for contacting us, we will get back to you shortly.");              } catch (Exception err) {                     err.printStackTrace();              }       }       /*       * Эта функция предназначена для заполнения всех обязательных полей формы на веб-странице       */       private static void fillInputFormData(Page page)       {              page.locator("id=name").fill("Playwright");              page.locator("id=inputEmail4").fill("[email protected]");              page.locator("id=inputPassword4").fill("Playwright@123");              page.getByPlaceholder("Company").fill("Lambdatest");              page.getByPlaceholder("Website").fill("www.playwright.dev");              page.locator("xpath=//select[@name='country']").selectOption("IN");              page.locator("xpath=//input[@name='city']").fill("Gurgaon");              page.locator("xpath=//*[@name='address_line1']").fill("House 1");              page.locator("css=input#inputAddress2").fill("Sector 1");              page.locator("css=#inputState").fill("Haryana");              page.locator("id=inputState").fill("Haryana");              page.locator("css=input[name='zip']").fill("123456");       }}

Обзор кода: SampleTestFlow.java

Шаг 1. Импорт интерфейсов Locator и Page из пакета playwright. Интерфейс Locator используется для поиска веб-элемента на веб-странице в любое время, в то время как интерфейс Page взаимодействует с веб-страницей на протяжении всего тестового сценария с помощью своих методов.

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

Шаг 2. Добавьте первую функцию внутри этого класса под названием playwrightTestFlow(). Эта функция будет иметь один параметр – page, который будет использоваться для взаимодействия с веб-страницей.

Открытый доступ и тип static для этой функции позволят вызывать ее непосредственно в файлах классов тестов, используя имя класса без создания объекта.

Шаг 3. Перейти на площадку LambdaTest Selenium.

Шаг 4. Найти ссылку Input Form Submit на загруженной веб-странице и кликнуть на нее.

Playwright обеспечивает несколько встроенных методов для локализации веб-элементов на веб-странице с использованием экземпляров page.

В дополнение к этим методам также доступен универсальный метод locator(), в котором мы можем использовать общепринятый подход для поиска веб-элементов, таких как XPath, id, name, text, CSS и т. д., передавая их в виде пары ключ-значение в аргумент функции.

В этом шаге используется метод locator(). Мы используем тип text для локализации веб-элемента и сохраняем его в переменную типа Locator.

Затем эта переменная используется для щелчка по ней.

Шаг 5. Утвердить, что страница демонстрации формы ввода была загружена, проверив видимость этого текста на веб-странице.

Для проверки мы используем метод assertThat(), который мы импортировали изначально. Здесь используется встроенный метод Playwright isVisible(), чтобы проверить, виден ли данный веб-элемент на странице или нет.

В этот раз мы используем локатор элемента getByText(), чтобы получить ссылку на веб-элемент.

Шаг 6. Заполните данные в форме, вызвав функцию fillInputFormData() с использованием экземпляра page в качестве параметра.

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

Шаг 7. Щелкните кнопку Отправить, чтобы отправить заполненную форму с данными.

Для поиска кнопки Отправить снова используется локатор getByText().

Шаг 8. Получите локатор успешного сообщения после отправки формы с использованием его XPath.

Фактическое содержимое выбирается с использованием метода textContent() API Playwright.

Запишите это сообщение в консоль и проверьте его точное соответствие заданному сообщению с использованием метода hasText() с функцией assertThat.

Шаг 9. Добавьте следующую функцию в качестве fillInputFormData(), которая будет использоваться для заполнения всех данных во входной форме.

Эта функция будет принимать экземпляр page в качестве параметра для взаимодействия с страницей и определения веб-элементов для заполнения данных.

Шаг 10. Используйте page.locator() или другие методы локатора для полей на веб-странице для определения и заполнения всех данных в форме. Для разных полей используются разные идентификаторы для демонстрации использования.

Для ввода данных во все текстовые поля в форме используется метод fill(), который принимает данные для ввода в качестве аргумента типа String.

10.1) Чтобы заполнить имя, электронную почту и пароль, мы используем метод locator() с идентификатором id.

10.2) Для компании и веб-сайта используется метод локатора getByPlaceholder().

10.3) Поскольку параметр Страна является раскрывающимся списком, для выбора значения из списка использован метод selectOption() вместе с XPath для нахождения элемента.

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

10.4) Для города и адресной строки 1 демонстрируется использование метода page.locator() с XPath.

10.5) Наконец, для всех остальных полей используется идентификатор CSS внутри метода locator() для нахождения элементов и заполнения данных.

Таким образом, мы закончили написание и понимание кода для потока тестового случая с использованием Playwright Java. Перейдем к файлу класса теста, который будет содержать код для выполнения теста Cloud на платформе LambdaTest.

Начните с добавления нового пакета внутри src и назовите его test.cloud_execution. Внутри него добавьте Java-тестовый файл, PlaywrightTestSingle.java.

package test.cloud_execution;import java.net.URLEncoder;import org.testng.annotations.Test;import com.google.gson.JsonObject;import com.microsoft.playwright.*;import base.SampleTestFlow;public class PlaywrightTestSingle {       @Test       public void playwrightTestSingle()        {              String username = System.getenv("LT_USERNAME") == null ? "<lambdatest_username>" :                             System.getenv("LT_USERNAME");              String accessKey = System.getenv("LT_ACCESS_KEY") == null ? "<lambdatest_accesskey>" :               System.getenv("LT_ACCESS");              try (Playwright playwright = Playwright.create()) {                     JsonObject capabilities = new JsonObject();                     JsonObject ltOptions = new JsonObject();                     capabilities.addProperty("browsername", "Chrome");                     capabilities.addProperty("browserVersion", "latest");                     ltOptions.addProperty("platform", "Windows 10");                     ltOptions.addProperty("name", "Playwright Single Cloud Test");                     ltOptions.addProperty("build", "Playwright Java");                     ltOptions.addProperty("user", username);                     ltOptions.addProperty("accessKey", accessKey);                     capabilities.add("LT:Options", ltOptions);                            String cdpUrl = "wss://cdp.lambdatest.com/playwright?capabilities=" +                                                                                                          URLEncoder.encode(capabilities.toString(), "utf-8");                                          Browser browser = playwright.chromium().connect(cdpUrl);                                   // Create BrowserContext object and use it to create a Page object to execute cases in isolation                     BrowserContext browserContext = browser.newContext();                     Page page = browserContext.newPage();                                   SampleTestFlow.playwrightTestFlow(page);                     page.close();                     browserContext.close();                     browser.close();                     playwright.close();              }               catch (Exception err) {                     err.printStackTrace();              }       }}

Пошаговое объяснение кода: PlaywrightTestSingle.java

Шаг 1. Добавьте следующие импорты в тестовый класс, чтобы иметь доступ к методам внутри этих пакетов.

Аннотации TestNG для использования аннотации @Test, библиотека gson для создания JsonObject, пакет playwright для использования его интерфейсов и класс SampleTestFlow для вызова метода тестового потока.

Шаг 2. Добавьте метод тестового случая как playwrightTestSingle() и аннотируйте его аннотацией @Test, чтобы иметь возможность выполнить тестовый случай.

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

После создания учетной записи получите имя пользователя и ключ доступа из раздела “Пароль и безопасность” на вашем профиле LambdaTest.

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

Для macOS и Linux:

export LT_USERNAME=LT_USERNAMEexport LT_ACCESS_KEY=LT_ACCESS_KEY

Для Windows:

set LT_USERNAME=LT_USERNAMEset LT_ACCESS_KEY=LT_ACCESS_KEY

Шаг 4. Инициализируйте новый экземпляр Playwright для доступа к API Playwright.

Шаг 5. Создайте 2 переменные JsonObject и назовите их capabilities и ltOptions.

5.1) Мы используем эти переменные для определения свойств облачной сети LambdaTest для Playwright. Они включают определение браузера, его версии и платформы.

Имя и детали сборки для случая можно использовать для фильтрации журналов выполнения на платформе LambdaTest.

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

Шаг 6. Передайте объект capabilities в URL, который будет использоваться для подключения к облачной сети LambdaTest для выполнения тестового случая Playwright.

Шаг 7. С помощью созданного изначально объекта Playwright подключитесь к сетке облачных ресурсов LambdaTest с типом браузера Chromium. Назначьте это объекту интерфейса Браузер.

Мы здесь используем тип браузера Chromium, так как будем выполнять тесты в браузере Chrome, который мы указали в свойстве browserName в Шаге 5.1.

Шаг 8. Создайте новый экземпляр browserContext, чтобы создать отдельный поток для каждого запуска теста, чтобы каждый тестовый случай мог быть выполнен в изоляции. BrowserContext может работать с несколькими независимыми сессиями браузера и обычно используется при параллельном выполнении.

Это эквивалентно ThreadLocal при работе с Selenium для веб-автоматизации для создания отдельного потока для каждого запуска теста.

Шаг 9. Внутри browserContext создайте page. Все соответствующие действия в потоке тестового случая выполняются с использованием этого экземпляра page.

У каждого BrowserContext может быть несколько страниц. Page – это отдельное окно или вкладка браузера, открытая в контексте браузера. Он предоставляет несколько методов для взаимодействия с веб-страницей. Эти методы включают создание новой страницы, переход по URL-адресам, поиск элементов веб-страницы и взаимодействие с элементами страницы для выполнения действий.

Шаг 10. Сделайте вызов функции playwrightTestFlow() внутри класса SampleTestFlow с использованием экземпляра page. Это выполнит тестовый сценарий и выполнит взаимодействия с веб-элементами и проверки.

Шаг 11. После выполнения теста закройте экземпляры Playwright, BrowserContext, Browser и Page для освобождения ресурсов с использованием метода close().

Выполнение кода

Выполните вышеуказанный тестовый случай Playwright, запустив его как тест TestNG.

Для этого щелкните правой кнопкой мыши и выберите Запуск как → Тест TestNG. При выполнении получите вывод, аналогичный приведенному ниже на локальном компьютере.

Вы также можете увидеть результаты выполнения на панели управления LambdaTest, перейдя в раздел Automation → Web Automation.

Запуск параллельных тестов с использованием Playwright на LambdaTest

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

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

Для этого мы будем использовать атрибут parallel = true аннотации @DataProvider TestNG.

Внутри существующего пакета test.cloud_execution добавьте 2 дополнительных файлов Java класса:

  1. PlaywrightTestParallel.java для тестового случая с параллельным выполнением
  2. LambdaTestCapabilities.java для передачи возможностей для 2 разных конфигураций браузера для выполнения с использованием DataProvider.

Обновленный файл LambdaTestCapabilities.java с возможностями 2 браузеров для параллельного выполнения в облачной среде будет выглядеть следующим образом:

package test.cloud_execution;import org.testng.annotations.DataProvider;import com.google.gson.JsonObject;public class LambdaTestCapabilities {      @DataProvider(name = "BrowserCapabilities", parallel = true)      public static Object[] getDefaultTestCapability()       {            String username = System.getenv("LT_USERNAME") == null ? "<lambdatest_username>" :                               System.getenv("LT_USERNAME");            String accessKey = System.getenv("LT_ACCESS_KEY") == null ? "<lambdatest_accesskey>"                        : System.getenv("LT_ACCESS");                  //capabilities for first browser - Chrome            JsonObject capabilities1 = new JsonObject();            JsonObject ltOptions1 = new JsonObject();            capabilities1.addProperty("browserName", "Chrome");            capabilities1.addProperty("browserVersion", "latest");            ltOptions1.addProperty("platform", "Windows 10");            ltOptions1.addProperty("name", "Playwright Parallel Test - Chrome");            ltOptions1.addProperty("build", "Playwright Java Parallel Cloud");            ltOptions1.addProperty("user", username);            ltOptions1.addProperty("accessKey", accessKey);            capabilities1.add("LT:Options", ltOptions1);           //capabilities for second browser - Edge            JsonObject capabilities2 = new JsonObject();            JsonObject ltOptions2 = new JsonObject();            capabilities2.addProperty("browserName", "MicrosoftEdge");            capabilities2.addProperty("browserVersion", "latest");            ltOptions2.addProperty("platform", "Windows 10");            ltOptions2.addProperty("name", "Playwright Parallel Test - Edge");            ltOptions2.addProperty("build", "Playwright Java Parallel Cloud");            ltOptions2.addProperty("user", username);            ltOptions2.addProperty("accessKey", accessKey);            capabilities2.add("LT:Options", ltOptions2);                        return new Object[] { capabilities1, capabilities2 };      }}

Обзор кода: LambdaTestCapabilities.java

Шаг 1. Внутри класса добавьте новый метод с именем getDefaultTestCapability(). Аннотируйте этот метод аннотацией @DataProvider из TestNG.

Этот метод будет использоваться для передачи тестовых данных, в данном случае – возможностей браузера, для выполнения на облачной платформе Lambdatest Playwright для 2 браузеров – Chrome и Edge. Тестовые случаи будут выполняться параллельно на обоих этих браузерах.

Вы можете заметить, что атрибут name со значением BrowserCapabilities используется с аннотацией @DataProvider. Это имя, которое мы используем в нашем тестовом случае для определения того, какой провайдер данных должен использоваться для выполнения.

Самое важное здесь – атрибут parallel = true с аннотацией. Это говорит TestNG о том, что все данные должны быть переданы в тестовый случай и затем использоваться для параллельного выполнения на облачной платформе.

Шаг 2. Поскольку мы выполняем наши тесты Playwright Java на сетке облачной платформы LambdaTest, получите имя пользователя и ключ доступа из раздела “Пароль и безопасность”, после того, как вы создали свою учетную запись на платформе LambdaTest.

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

Шаг 3. Создайте возможности браузера для двух разных браузеров, на которых мы будем выполнять наши тесты Playwright параллельно.

3.1) Создайте 2 объекта JsonObjects capabilities1 и ltOptions1 для первого браузера, Chrome, настройки.

3.2) Добавьте все настройки, связанные с браузером и платформой LambdaTest, в эти объекты, как мы делали для выполнения в одном облаке.

3.3) Аналогично создайте capabilities2 и ltOptions2 для второго браузера, Edge, настроек.

3.4) Аналогично Chrome, добавьте все детали конфигурации в новые JsonObjects с необходимыми изменениями для Edge. Важное отличие, которое следует отметить здесь, – это значение browserName.

Шаг 4. Верните оба объекта возможностей, которые будут использоваться тестовыми случаями для параллельного выполнения тестов Playwright.

После этого перейдите к файлу класса теста для выполнения тестовых случаев.

package test.cloud_execution;import java.net.URLEncoder;import org.testng.annotations.Test;import com.google.gson.JsonObject;import com.microsoft.playwright.*;import base.SampleTestFlow;public class PlaywrightTestParallel {      @Test(dataProvider = "BrowserCapabilities", dataProviderClass = LambdaTestCapabilities.class)      public void playwrightTestParallel(JsonObject capability)      {            try (Playwright playwright = Playwright.create())            {                  String cdpUrl = "wss://cdp.lambdatest.com/playwright?capabilities=" +                                                                               URLEncoder.encode(capability.toString(), "utf-8");                  Browser browser = playwright.chromium().connect(cdpUrl);                  // Создаем объект BrowserContext и используем его для создания объекта Page для выполнения случаев в изоляции                  BrowserContext browserContext = browser.newContext();                  Page page = browserContext.newPage();                  SampleTestFlow.playwrightTestFlow(page);                  page.close();                  browserContext.close();                  browser.close();                  playwright.close();            }            catch (Exception err) {                  err.printStackTrace();            }      }}

Обзор кода: PlaywrightTestParallel.java

Шаг 1. Создайте новый тестовый метод с именем playwrightTestParallel(). Этот метод будет принимать объект возможности JsonObject в качестве параметра, содержащий возможности браузера, переданные из провайдера тестовых данных, созданного на предыдущем шаге.

Аннотируйте этот тестовый случай аннотацией @Test из TestNG. Внутри аннотации добавьте атрибуты

  • dataProvider = "BrowserCapabilities", чтобы указать имя провайдера данных, который будет использоваться для этого тестового случая.
  • dataProviderClass = LambdaTestCapabilities.class, чтобы указать имя класса Java, в котором находится этот провайдер данных.

Шаг 2. Инициализируйте новый экземпляр Playwright, чтобы получить доступ к API Playwright.

Шаг 3. Используйте объект capability из параметра теста для создания URL-адреса подключения к сетке облачной платформы LambdaTest для выполнения тестовых случаев Playwright Java.

Шаг 4. Используя созданный изначально объект playwright, вызовите функцию chromium() с URL-адресом для запуска браузера и присвойте его объекту интерфейса Browser.

Мы используем тип браузера chromium(), так как в этом случае используются браузеры Chrome и MicrosoftEdge, и оба поддерживаются этим типом.

Шаг 5. Используйте объект browser, чтобы создать browserContext, который поможет выполнить оба случая параллельно, но полностью изолированно друг от друга.

Шаг 6. Используя browserContext, создайте новый экземпляр page, представляющий окно/вкладку браузера, в котором будет выполняться.

Шаг 7. Вызовите ранее созданный метод playwrightTestFlow() класса SampleTestFlow, чтобы выполнить тестовый сценарий. Это общая функция, используемая как для одиночного, так и для параллельного выполнения без каких-либо изменений.

Шаг 8. Наконец, используйте метод close(), чтобы закрыть все экземпляры и освободить память.

Выполнение кода

Выполните тестовый случай как тест TestNG, чтобы проверить результаты выполнения.

Вы можете заметить на скриншоте ниже, что выполнено всего 2 случая.

Результаты выполнения можно просмотреть в панели инструментов LambdaTest в разделе Automation → Web Automation, как показано ниже.

Если вы хотите подтвердить, работает ли параллельное выполнение или нет, обновите значение атрибута parallel в аннотации @DataProvider на false и выполните повторно.

В этих результатах выполнения можно заметить значительное увеличение общего времени выполнения в IDE и результаты на панели инструментов LambdaTest. Это подтверждает, что предыдущее выполнение было параллельным, а на этот раз случаи выполняются поочередно.

Таким образом, мы изучили, как писать автоматизацию с Playwright в масштабе и запускать ее параллельно на облачной сети LambdaTest.

Итог

В заключение нашей статьи о запуске автоматизированных тестов с Playwright Java. В этой статье мы узнали о Playwright, как он работает и почему это хороший выбор для веб-автоматизации с Java. Мы также узнали, как выполнять автоматические случаи Playwright в масштабе с использованием облачной сети LambdaTest. Теперь у вас должна быть прочная основа для решения сложных задач автоматизации с Playwright. Пора приступать и написать свой первый скрипт автоматизации с помощью Playwright и Java!


Leave a Reply

Your email address will not be published. Required fields are marked *