在本篇博客中,我们将探讨 Playwright,了解如何使用 Java 和 Playwright 进行 UI 自动化测试。
Playwright 简介
Playwright 是一个开源的测试自动化库,最初由微软开发。
它支持多个浏览器,如 Chromium、Firefox、Webkit。它支持多种语言,如 TypeScript、JavaScript、Java、Python、.NET、C#,并且支持多个平台,如 Windows、Linux、macOS、Android、iOS。
Playwright 旨在为测试 Web 应用程序提供快速、可靠和用户友好的自动化功能。它提供了广泛的功能,使它适用于各种任务。
Playwright 有三个主要组件:
- 浏览器驱动程序 - 负责控制浏览器引擎并执行来自 Playwright API 的命令。
- 浏览器上下文 - 表示一个浏览器的单个实例,具有自己的 cookie、缓存和其他设置。Playwright 支持同一浏览器实例中的多个浏览器上下文,可用于分离的测试或场景,并且每个浏览器上下文都有自己的页面集。
- 页面 - 表示浏览器上下文中的单个 Web 页面,具有自己的 DOM 树、框架层次结构和其他内容。
示例测试:
使用 Playwright 编写测试时,它提供了“assertThat”重载,可以智能地等待直到满足预期条件。
有一些断言,例如:
.isChecked()、.isEnabled()、.isDisabled()、.isEditable()、.isVisible() 等等。
定位器在 Playwright 的自动等待和重试机制中起着关键作用,可以在 Web 页面上高效地识别元素。它们提供了一种定位元素并执行各种操作,如 click()、fill() 等的方法。此外,Playwright 允许使用“page.locator()”方法创建自定义定位器。
此外,Playwright 还提供了多个操作,例如:
• 对于文本输入,它提供了 fill() 方法, • 对于复选框和单选按钮,它提供了 setChecked(), • 对于选择一个或多个选项,它具有 selectOptions(), • 对于点击,它具有 click()、dblClick() 方法, • 它提供了一个称为 type 的方法,逐个字符输入字符串,还有许多其他方法。
Playwright 提供了多种功能,使其成为 UI 自动化测试的优秀选择。
这些功能包括:
1.自动等待:
Playwright 对元素进行彻底的检查,以确保操作表现如预期。在执行所请求的操作之前,它会自动等待所有必要条件满足。如果在指定的超时时间内未满足所需条件,则操作失败。此方法确保操作在正确的时间执行,增强了 UI 自动化的可靠性和准确性。
例如:如果我们想对一个元素执行 click() 操作,那么 Playwright 确保
- 元素是否附加到 DOM 上
- 元素是否可见
- 是否稳定
- 是否启用并接收事件
在执行所有所需的检查后,它执行单击操作。
2.有头和无头模式:
在有头模式或无头模式下运行自动化测试。
3.调试测试:
Playwright Inspector 是一个图形用户界面(GUI)工具,可简化 Playwright 测试的调试。它允许你实时编辑定位器、选择定位器和查看日志。此外,你可以使用“page.pause()”方法有效地调试测试用例。这种方法消除了手动导航到每个测试操作以达到所需调试点的需要,简化了调试过程。
4.测试生成器:
Playwright 包括一个强大的测试生成功能,允许你在浏览器中执行操作。Playwright 找到页面上最好的定位器,为此优先考虑角色、文本和 testid 定位器。
如果测试生成器发现多个与相同定位器匹配的元素,则它会增强定位器以确保唯一性,使我们能够准确地识别每个元素。
命令: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=”codegen demo.playwright.dev/todomvc”
运行 Codegen 命令时会打开两个窗口,一个浏览器窗口用于与页面元素交互,另一个是 Playwright Inspector 用于记录测试。
5.仿真:
我们可以使用测试生成器来使用仿真生成测试,因此我们可以为特定的视口大小、特定的设备或特定的颜色方案生成测试,还可以模拟地理位置、语言或时区。
首先让我们看看仿真视口大小:
Playwright 允许你使用“viewport”选项打开具有特定宽度和高度的浏览器窗口。此功能使你可以使用不同的视口大小生成测试,提供了模拟各种屏幕分辨率和响应式设计的灵活性。
命令: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=”codegen — viewport-size=800,600 playwright.dev”
- 仿真设备:
我们可以使用以下命令:
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=’codegen — device=”iPhone 13" playwright.dev’
在命令中,我们可以使用--device选项来设置视口大小和用户代理。
我们也可以编写脚本来实现:
Playwright提供了一个有用的功能,可以模拟不同设备及其特性,让你可以在不需要物理设备的情况下测试你的Web应用程序在各种设备上的行为。你可以使用“setViewportSize”和“setUserAgent”方法来模拟设备属性。下面是一个例子:
6.拦截网络请求
Playwright提供了一个强大的功能,可以无缝地修改或阻止网页发起的网络请求。这对于测试目的非常有用,比如模拟慢速网络条件、模拟服务器响应或测试Web应用程序在某些条件下的行为。
例子:
所以在这个例子中,我们为请求的URL设置了一个网络路由,当匹配请求被发起时,lambda表达式被调用。我们将自定义消息、状态码、内容类型和消息体设置为我们的自定义消息。
因为我们为URL设置了一个网络路由,所以我们的自定义响应将被返回,而不是常规页面内容,如下所示:
7.可访问性测试
可访问性测试是确保Web应用程序对所有用户可用,包括残疾人士的重要方面。Playwright提供了内置的支持,用于执行可访问性测试。
8.身份验证
Playwright提供了一个名为浏览器上下文的隔离环境,用于执行测试。这允许测试加载现有的身份验证状态,消除了每个测试都需要登录的需要。通过在上下文中保存身份验证状态,它可以在所有测试中重复使用。这种方法通过避免冗余的登录操作节省时间,并确保独立测试之间的完全隔离。
9.下载
使用Playwright的下载功能,你可以自动化从网站下载文件的过程。这个功能对于涉及验证文件正确下载或自动化涉及下载文件的任务的测试场景非常有用。此外,Playwright允许你通过指定下载路径或过滤可以下载的文件类型来自定义下载功能的行为。
10.跟踪查看器
Playwright跟踪查看器是Playwright提供的一个工具,可以分析和可视化浏览器在测试执行期间记录的跟踪数据。让我们看一些不同的选项,它们提供了详细的事件序列、网络请求和其他相关信息。
命令: mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=”show-trace”
操作:
一旦在Playwright跟踪查看器中打开跟踪,你将在左侧找到Playwright执行的操作列表。通过从列表中选择每个操作,你可以探索详细的信息,如操作快照、操作日志、网络日志等。
元数据:
Playwright跟踪查看器提供了全面的信息,包括操作的时间、使用的浏览器引擎、视口细节、移动设备模拟和记录的页面、操作和事件的数量。
屏幕截图:
每个跟踪记录了一个屏幕截图,并将其呈现为电影条。这个电影条提供了记录的操作和状态的可视化表示。通过悬停在电影条中的每个帧上,你可以查看对应于特定操作或状态的放大图像,从而进行详细的检查和分析。
调用:
调用选项包括操作名称、调用时的时间戳、操作执行的持续时间、传递给操作的参数、返回值和任何相关的日志消息。
控制台:
Playwright跟踪查看器中的控制台面板提供了在记录的操作期间生成的控制台输出的视图。它允许你观察控制台日志、错误、警告和其他相关的消息,在测试用例执行期间产生。
网络:
它提供了浏览器发起的所有网络请求的视图,以及它们的响应、头、时间和其他相关信息。
Selenium和Playwright
它们都是Web自动化测试的流行选择。有一些关键的区别。
架构:
在Selenium中,每个命令都作为一个单独的HTTP请求传输,并接收相应的JSON响应。每个执行的操作,如启动浏览器、单击元素或在文本框中输入文本,都作为一个不同的HTTP请求传输。这种方法导致服务器和客户端之间的连接终止,需要重新建立下一个请求的连接。每个请求后的连接终止会导致执行变慢,也会引入一层不稳定性。
另一方面,Playwright利用单个WebSocket连接来处理整个测试执行期间的所有请求。这种架构方法最小化了潜在的故障点,并使命令可以顺畅地通过单个连接传输。相比之下,这使得Playwright成为比Selenium更稳定的工具。
速度:
由于其架构,Playwright在执行测试时比Selenium更快。
不稳定性:
Playwright旨在比Selenium更不易出错,这又得益于其将每个测试隔离在单独的浏览器上下文中的架构。这意味着测试不会互相干扰,从而减少了不稳定性的机会。
跨浏览器一致性:
Playwright旨在提供跨多个浏览器的一致的API,确保测试只需编写一次即可在不同的浏览器上运行。对于Selenium,它需要特定于浏览器的驱动程序,这可能会导致不同浏览器之间的行为和功能存在不一致性。
调试:
Selenium和Playwright都提供良好的调试功能,但Playwright提供了一些额外的功能,使调试更加容易。Playwright提供了一个交互模式,允许你在测试运行时与浏览器进行交互,从而帮助你更快地识别问题。
测试框架:
Selenium和Playwright都可以与多种测试框架(如Jest、Mocha和Jasmine)一起使用。然而,Playwright有自己的测试运行器,使得在不需要学习单独的框架的情况下开始测试变得更加容易。
结论
总之,Playwright与Java结合提供了一个强大而最新的UI自动化解决方案。其统一的API、在不同浏览器上的工作能力以及广泛的功能范围,简化了自动化流程并提高了测试效率。Playwright的架构利用特定于浏览器的二进制文件并维护持久的WebSocket连接,保证了测试执行期间的稳定性和可靠性。有关详细信息和其他示例,请参阅参考文献中提供的链接。
参考文献
- https://playwright.dev/java/docs/intro
- https://playwright.dev/java/
- https://trace.playwright.dev/
- https://www.way2automation.com/create-and-execute-first-playwright-java-test/
- https://applitools.com/blog/playwright-java/
译自:https://poojampatil241.medium.com/ui-automation-using-playwright-with-java-180b4fd9b831
评论(0)