使用 Playwright 对规模化自动化测试进行运行

在这篇文章中,我们将学习关于Playwright,它的工作原理,以及为什么它是使用Java进行网络自动化的不错选择

在网页开发的世界中,选择适合的框架来进行自动化测试可能是一项困难的任务。在一个快速发展的技术环境中,做出明智的决策对于选择与Selenium竞争的测试自动化框架至关重要。

Playwright是一个基于Node.js的框架,最近获得了广泛的关注。它的受欢迎程度可以归功于Node的流行,这有助于Playwright吸引了一大批用户。Playwright是由微软开发的功能强大的开源框架,用于自动化处理Web应用程序。它拥有一套独特的功能和能力,使其成为开发人员和测试人员的宝贵框架。

在本文中,我们将以Java为例,探索Playwright的世界。我们将首先了解Playwright以及如何使用它来批量执行测试用例。为此,我们将学习在LambdaTest平台上进行云端测试执行,这可以加速执行并获得更快的反馈周期。

那么,让我们开始吧。

什么是Playwright?

Playwright是一个由Microsoft创建的开源自动化框架,用于测试和自动化处理Web应用程序。该框架兼容Windows、macOS和Linux,支持跨浏览器在Chromium(Google Chrome、Microsoft Edge)、Mozilla Firefox和WebKit(Apple Safari)上进行自动化测试。

它因与Java、Python、C# .NET和Node.js兼容而被广泛使用。这意味着它可以被使用不同编程语言的开发人员使用,使其成为一个多功能的框架。相比其他对手(如Selenium、Cypress等),Playwright是一个更有效的跨浏览器测试和Web数据抓取工具,因为它提供了统一、高级的API来自动处理多个浏览器的Web应用程序。测试人员可以使用这些API导航到URL,与元素进行交互,执行填充表单和数据抓取等操作。

Playwright于2020年1月首次发布,由于其稳定性、开源性以及支持C#、Java和Python等多种编程语言,它迅速赢得了人们的喜爱。从目前在GitHub上对Microsoft Playwright的使用情况来看,它的受欢迎程度将继续增长。

目前已有超过36,000名活跃用户,超过3,000个分支和450多个活跃贡献者,其受欢迎程度将持续增长。

Playwright的优势

Playwright的最新版本,1.38,包含了该框架提供的多功能功能。它支持多标签、多用户和iframe测试用例,以及针对任何定位器操作的内置和自定义等待。

此外,相比其他框架,使用Playwright进行Web测试自动化的一些主要优势有:

Playwright还支持C#、Python、.NET以及JavaScript/TypeScript等主要编程语言,这使得它可以简化自动化测试和对各种应用程序添加断言。这些测试用例可能包含Web导航流程、表单填充等内容。

可扩展性

在具有大型测试套件和并行测试需求的复杂应用程序中,可扩展性变得至关重要。Playwright具有高度可扩展性,支持在本地和基于云的平台上并行测试执行多个浏览器和平台。

它允许您通过容器化和测试用例的分布式执行来扩展测试基础设施,从而实现有效的资源管理。它还通过与数据库和其他数据源集成,为数据驱动测试提供了测试数据的可扩展性。

广泛集成支持

Playwright支持与许多工具和技术的集成。它可以与以下工具集成:

  • CI/CD工具,如Jenkins、Gitlab等。
  • 报告工具和测试框架,如Allure、Extent Reports或自定义报告以及JUnit、TestNG、Cucumber等。
  • 性能测试工具和API测试框架。
  • 基于云的测试平台,如LambdaTest。

智能内置自动等待

Playwright拥有一个内置的自动等待功能,在其他框架中不可用。这个功能会等待所有元素准备好进行交互,然后再执行操作或检查。

这种内部方法可以用来实现等待时间和条件,比如元素可见性、元素可供交互、页面导航和网络调用的完成。

完全测试隔离的并行测试

Playwright为每个测试创建一个浏览器上下文,类似于一个新的独立浏览器配置文件。这有助于并行执行多个测试用例,减少执行时间。

由于每个测试都有一个单独的浏览器配置文件,就像Selenium中的不同线程,所有测试都在完全隔离的环境中运行,互不干扰。这有助于减少测试用例之间的干扰,提高测试的可靠性,通过隔离的日志和测试数据更容易进行调试,减少不稳定性,并保持更清洁的测试环境。

为什么选择Playwright与Java?

Playwright与Java的组合能够互补各自的能力,从而实现编写更稳定和可扩展的自动化测试用例。

Playwright支持多种语言,但由于其广泛的采用和强大的生态系统,Java很受欢迎。Java仍然是前三名的编程语言之一,并在最新的TIOBE编程语言排行榜中位列前五位,因此对许多程序员来说是熟悉的,并且与Playwright一起使用很容易。JDK 21是Java SE平台的最新长期支持版本。

使这种组合强大的另外几个优点包括:

无缝配置

Playwright与Java自动化框架的设置简单易用,是Web自动化任务的首选。Playwright作为一组Maven模块依赖项捆绑在一起,可以轻松与Java项目集成。

所有可用的版本都可以在Maven网站上找到,并可以像下面这样添加到您的项目中。

Image 1

跨平台兼容性

Java是一种平台无关的语言,可以在Linux、Windows或macOS上创建可在所有平台上的浏览器上执行的Playwright脚本。在进行Web自动化工作并且需要在所有平台上执行测试用例时,这非常有用。

通过使用Java,可以使用相同的用例,无需为每个平台重新编写。

现代化的语言绑定

Playwright的Java API旨在适用于Java测试人员,具有用户友好和符合惯用法的特点。它提供了结构良好的API,简化了编写和维护自动化脚本的过程,无需学习新的语言。

全面的文档和支持

Playwright在Java方面有着广泛的文档。加上庞大的活跃Java开发者社区,很容易找到资源,并在出现任何问题时获得帮助。

Playwright和Java的框架设置

配置Playwright Java项目非常简单。如前所述,Playwright作为一组Maven模块提供。通过将一个依赖项添加到Maven项目的pom.xml中,非常容易进行配置。

从高层来看,设置可以分为三个部分:

  • 安装Java 11
  • 创建Maven项目
  • 添加Playwright Maven依赖

在编写第一个测试用例之前,让我们逐个了解每个部分。

安装Java 11

如果您的计算机上尚未安装Java,请按照以下步骤进行安装。

步骤1。访问官方Java网站,根据您的操作系统下载最新的兼容版本。或者,您也可以选择OpenJDK。它是开源的,并且在构建和结果方面与Oracle Java相同。

步骤2。运行下载的安装文件,并按照系统提示安装Java。

创建Maven项目

在本教程中,使用了Eclipse IDE进行演示。但是,您可以使用任何您喜欢的IDE,在其中创建一个新的Maven项目,然后继续下一步。

步骤1。启动Eclipse IDE → 选择新建 → 项目。

步骤2。选择Maven → Maven项目,然后点击下一步。

第3步。填写所需的项目细节,并将其命名为PlaywrightJava。类似下面的新项目将被创建。

添加Playwright Maven依赖项

Playwright for 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是一个AI驱动的测试执行平台,用户可以在3000多种真实浏览器和操作系统组合上执行Playwright自动化以进行Web应用程序。我们将看到同一云平台如何用于单个测试案例的执行,然后是在不同浏览器上的并行执行。

测试场景

  1. 导航至LambdaTest游乐场
  2. 单击Input Form Submit
  3. 断言Input Form页面已加载。
  4. 填写登陆页面上的表单。
  5. 点击Submit按钮。
  6. 断言确认消息。

为了执行测试案例,使用了TestNG。将TestNG依赖项与gson依赖项一起添加到pom.xml中。

如Maven网站上描述的那样,Gson是一个可以将Java对象转换为其JSON表示的Java库。我们将使用它来创建一个JsonObject,以添加用于LambdaTest平台的云属性,并连接到云网格。这些属性有助于选择执行的浏览器和平台,并可在LambdaTest Web自动化仪表板上识别执行详细信息,以进行更好的结果分析和调试。

在添加所有依赖项后,最后的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文件,我们现在转向使用云执行编写我们的第一个Playwright Java测试用例。

我们即将编写的测试用例基本上分为两个部分:

  1. Java类文件,其中包含实际的测试流程,包括导航、对网页执行操作、填充数据和断言结果。
  2. 测试用例文件,其中包含连接到LambdaTest云网格的代码以及对第一个文件中定义的测试流程执行的调用。

让我们现在开始。

在“src”包内添加一个名为“base”的包。在这个包内添加一个新文件并将其命名为“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 Playground                     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。导入playwright包的LocatorPage接口。Locator接口用于在任何时候在网页上找到一个元素,而Page接口通过其方法与网页进行测试流程交互。

此外,您应该静态地从PlaywrightAssertions接口导入assertThat方法,以验证测试流程中的成功消息。

步骤2。在这个类中添加第一个函数playwrightTestFlow()。这个函数将有一个参数page,用于在网页上进行交互。

在此函数上的public访问权限以及static类型将允许直接在测试类文件中使用类名调用它,而不需要创建对象。

步骤3。导航到LambdaTest Selenium Playground。

步骤4。在加载的网页上定位Input Form Submit链接并点击它。

Playwright提供了几种不同的内置定位器方法,可以使用page实例在网页上找到一个Web元素。

除了这些方法之外,还有一个通用的locator()方法,我们可以使用常用的定位Web元素的方法(如XPath、id、name、text、CSS等),通过将它作为键值对传递给函数参数来使用。

在这个步骤中,使用了locator()方法。我们使用text类型来定位Web元素,并将其存储在Locator类型的变量中。

然后使用该变量来点击它。

第5步。通过检查网页上此文本的可见性来断言输入表单演示页面是否已加载。

对于断言,我们使用了最初导入的assertThat()方法。在这里,使用了Playwright的isVisible()内置方法来检查给定的Web元素是否在页面上可见。

这次,我们使用getByText()元素定位器来获取Web元素的引用。

第6步。调用fillInputFormData()函数,使用page实例作为参数在表单中填充数据。

在处理完当前函数后,我们将详细介绍此函数的内容。

第7步。点击“提交”按钮以提交填写的数据表单。

为了定位“提交”按钮,再次使用了getByText()定位器。

第8步。使用XPath定位器在提交表单后获取成功消息定位器。

使用Playwright API的textContent()方法获取其实际内容。

将此消息记录在控制台上,并使用assertThat函数的hasText()方法断言它与给定消息完全匹配。

第9步。将下一个函数命名为fillInputFormData(),将用于填充输入表单中的所有数据。

此函数将接受一个page实例作为参数,与页面进行交互,并定位Web元素以填充数据。

第10步。使用page.locator()或其他定位器方法来定位网页上的字段,并填充表单中的所有数据。不同的标识符用于不同的字段以展示用法。

要在表单中的所有文本框字段中输入数据,使用fill()方法,将要输入的数据作为字符串参数传入。

10.1) 要填写名称、电子邮件和密码,我们使用带有id标识符的locator()方法。

10.2) 对于公司和网址,使用getByPlaceholder()定位器方法。

10.3) 由于国家选项是一个下拉菜单,为了选择下拉菜单中的值,除了使用XPath定位元素外,还使用了selectOption()方法。

除此之外,还可以使用下拉菜单值的labelindex来进行选择。

10.4) 对于城市和地址行1,演示了使用带有XPath的page.locator()的用法。

10.5) 最后,对于所有剩余的字段,使用CSS标识符在locator()方法内定位元素并填充数据。

有了这些,我们已经完成了使用Playwright Java编写和理解测试用例流程的代码。让我们继续进行测试类文件,该文件将保存用于在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);                                   // 创建 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();              }       }}

代码演练:PlaywrightTestSingle.java

第 1 步。将以下 import 语句添加到测试类中,以便访问这些包中的方法。

添加 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 实例以访问 Playwright API。

第 5 步。创建 2 个 JsonObject 变量,分别命名为 capabilities 和 ltOptions。

5.1) 我们使用这些变量来定义 Playwright 的 LambdaTest 云网格的属性。这包括定义浏览器及其版本和平台。

案例的名称和构建详细信息可用于在 LambdaTest 平台上筛选执行日志。

并且,使用 LambaTest 帐户的用户名和密码来创建连接。

第 6 步。将 capabilities 对象传递给 URL,以便用于连接到 LambdaTest 云网格以执行 Playwright 测试。

第7步。使用最初创建的Playwright对象,使用Chromium浏览器类型连接到LambdaTest云网格。将其分配给Browser接口的对象。

我们在这里使用Chromium浏览器类型,因为我们在第5.1步中的browserName属性中提到将在Chrome浏览器上执行用例。

第8步。创建一个新的browserContext实例,为每个测试运行创建一个单独的线程,以便每个测试用例可以独立运行。BrowserContext可以操作多个独立的浏览器会话,通常用于并行执行。

这类似于在使用Selenium进行Web自动化时使用的ThreadLocal,为每个测试运行创建一个单独的线程。

第9步。在browserContext中,创建一个page。测试用例流中的所有相关操作都使用这个page实例执行。

每个BrowserContext可以有多个页面。一个Page是在浏览器上下文中打开的单个浏览器窗口或选项卡。它提供了多种与网页进行交互的方法。这些方法包括创建一个新页面,导航到URL,定位网页上的Web元素,并与页面元素进行交互以执行操作。

第10步。使用page实例在SampleTestFlow类中调用playwrightTestFlow()函数。这将执行测试场景并执行Web元素交互和断言。

第11步。测试执行后,使用close()方法关闭Playwright、BrowserContext、Browser和Page实例,以清理资源。

代码执行

将上述Playwright测试用例作为TestNG测试运行。

要做到这一点,右键单击并选择Run As→TestNG Test。执行后,会在本地上展示如下的输出。

您还可以通过导航到LambdaTest仪表板中的Automation→Web Automation部分查看执行结果。

在LambdaTest上使用Playwright并行运行测试

通过之前的执行,我们已经了解了Playwright Java项目设置步骤,如何使用该组合编写第一个自动化测试用例,以及如何在云中执行。

那么,让我们看看需要做哪些额外的更改才能以2个浏览器的并行方式执行相同的测试场景。

为此,我们将使用TestNG的@DataProvider注释的parallel = true属性。

在现有的test.cloud_execution包中,添加2个Java类文件:

  1. PlaywrightTestParallel.java 用于并行执行的测试用例
  2. LambdaTestCapabilities.java 用于通过DataProvider传递2个不同的浏览器配置来执行。

更新后的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");                  //针对第一个浏览器 - 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);           //针对第二个浏览器 - 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() 的新方法。使用 TestNG 的 @DataProvider 注解对该方法进行注解。

该方法将用于传递测试数据,也就是浏览器的能力,以在 Lambdatest Playwright 云上执行 2 个浏览器 – Chrome 和 Edge。测试用例将在这两个浏览器上并行执行。

您可以注意到 @DataProvider 注解中使用了值为 BrowserCapabilitiesname 属性。这是我们在测试用例中使用的名称,用于定义要用于执行的数据提供程序。

这里需要注意的最重要的事情是带有注释的 parallel = true 属性。这告诉 TestNG 将所有数据传递给测试用例,然后在云上并行执行。

步骤 2。由于我们在 LambdaTest 云网格上执行 Playwright Java 用例,因此在 LambdaTest 平台上创建帐户后,从“密码和安全”部分获取用户名和访问密钥。

或者,您还可以在环境变量中配置它们,并从那里获取值,就像我们在前一个测试用例中讨论的那样。

步骤 3。为将并行执行的 Playwright 用例创建两个不同浏览器的能力。

3.1)为第一个浏览器 Chrome 的配置创建 2 个 JsonObjects capabilities1ltOptions1

3.2)像单个云执行一样,将所有与浏览器和 LambdaTest 平台相关的配置添加到这些对象中。

3.3)类似地,为第二个浏览器 Edge 的配置创建 capabilities2ltOptions2

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 能力对象作为参数,该对象包含从前一步创建的数据提供程序传递的浏览器能力。

使用 TestNG 的 @Test 注解对此测试用例进行注解。在注解内部添加属性:

  • dataProvider = "BrowserCapabilities",表示要用于此测试用例的 DataProvider 的名称。
  • dataProviderClass = LambdaTestCapabilities.class,表示此数据提供程序所在的 Java 类名。

步骤 2。初始化 Playwright 的新实例以访问 Playwright API。

步骤 3。使用测试参数中的 capability 对象创建用于连接到 LambdaTest 云网格以执行 Playwright Java 测试的 URL。

第四步。使用最初创建的playwright对象,调用chromium()函数并将URL传递给它,以启动浏览器,并将其分配给一个Browser接口对象。

在并行执行的情况下,我们使用chromium()浏览器类型,因为Chrome和MicrosoftEdge浏览器都属于该浏览器类型,并且都受到支持。

第五步。使用browser对象创建一个browserContext,用于在并行执行时执行两种情况,但彼此之间不会产生影响,完全隔离。

第六步。使用browserContext创建一个新的page实例,代表将在其中执行的浏览器窗口/选项卡。

第七步。调用SampleTestFlow类的先前创建的playwrightTestFlow()方法来执行测试场景。这是用于单个和并行执行的通用函数,不需要进行任何修改。

第八步。最后,使用close()方法关闭所有实例并释放内存。

代码执行

将测试用例作为TestNG测试执行以检查执行结果。

您可以从下面的屏幕截图中注意到,总共执行了2个用例。

执行结果可以在LambdaTest仪表板的Automation → Web Automation部分下查看,如下所示。

如果您想确认并行执行是否正常工作,请将@DataProvider注释中的parallel属性的值更新为false,然后再次执行。

在这些执行结果中,您可以注意到IDE和LambdaTest仪表板结果中的总执行时间大大增加。这证实了之前的执行是并行执行,而这次是串行执行。

通过这个,我们已经学会了如何在LambdaTest云网格上编写并行化的Playwright自动化脚本并进行执行。

结论

这篇文章介绍了如何使用Playwright Java运行自动化测试。在本文中,我们学习了Playwright的工作原理以及为什么它是使用Java进行网页自动化的好选择。我们还学习了如何使用LambdaTest云网格来扩展Playwright自动化测试。现在,您已经具备了解决复杂自动化挑战的基础,可以开始使用Playwright和Java编写您的第一个自动化脚本了!


Leave a Reply

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