Playwright
简介
1. 什么是 Playwright
Playwright 是一个由微软开发的现代化网页自动化测试和浏览器操作工具。它支持多种浏览器,包括 Chromium、Firefox 和 WebKit,并提供一致的跨浏览器 API。以下是 Playwright 的一些关键特点:
多浏览器支持:Playwright 支持 Chromium(包括 Google Chrome 和 Microsoft Edge)、Firefox 和 WebKit(包括 Safari),使开发者能够在多个浏览器上进行一致的测试。
自动化测试:Playwright 提供强大的自动化测试功能,支持编写和执行测试用例,适用于端到端(E2E)测试、功能测试和回归测试等。
丰富的 API:Playwright 拥有直观且强大的 API,用于浏览器自动化、页面导航、表单填写、截图、PDF 生成等操作。
并行测试:支持并行执行测试,显著提升测试速度和 CI/CD 管道的效率。
无头模式与有头模式:Playwright 支持无头模式(Headless)和有头模式(Headful),在无头模式下不会打开浏览器窗口,有头模式则会显示浏览器界面。
跨平台:Playwright 可在 Windows、Mac 和 Linux 上运行,适用于本地开发和 CI 环境。
自动处理页面同步:自动管理页面加载、元素可见性等同步问题,减少开发者手动等待的需求。
强大的选择器:提供多种选择器策略,包括 CSS 选择器、文本选择器、XPath 等,方便精准定位页面元素。
网络拦截与模拟:允许拦截和模拟网络请求,适用于测试不同的网络条件和 API 响应。
截图与视频录制:支持截取网页截图和录制测试过程的视频,有助于调试和记录测试结果。
总之,Playwright 是一个功能强大且灵活的网页自动化工具,适用于各种测试和自动化需求。
2. Playwright 和 Selenium 的关系
Playwright 和 Selenium 均为浏览器自动化工具,但它们在多个方面存在关键区别和特点:
历史背景:
Selenium:作为一个开源的自动化工具,Selenium 早于 Playwright 出现,拥有多年的发展历史。它支持多种浏览器(如 Chrome、Firefox、Safari、Edge 等)和编程语言(如 Java、Python、C#、Ruby 等),其设计理念是提供跨浏览器一致的自动化 API。
Playwright:由微软开发的相对较新的自动化框架,专注于现代 Web 应用的测试,支持 Chromium、Firefox 和 WebKit。Playwright 的设计目标是提供更高效、稳定和一致的自动化体验。
API 和功能:
Selenium:提供广泛的 API,但在处理现代 Web 应用中的复杂交互时可能会遇到一些问题,且不同浏览器间的 API 一致性有时存在差异。
Playwright:提供更现代化的 API,支持自动处理页面同步、网络拦截和模拟等功能。其 API 在多个浏览器间保持高度一致,确保相似的行为表现。
性能和稳定性:
Selenium:由于历史悠久,在性能和稳定性方面可能面临挑战,尤其是在复杂的 Web 应用场景中。
Playwright:在性能和稳定性上具有优势,特别是在处理现代 Web 应用和复杂用户交互时。其并行测试和自动同步功能显著提高了测试效率。
3. Playwright 是否采用客户端-服务器模式?
Playwright 本身并非传统意义上的客户端-服务器模式工具,而是一个客户端库。它通过客户端库与浏览器进行交互,浏览器实例可以在本地机器或远程服务器上运行。以下是 Playwright 的架构和工作方式:
客户端库:Playwright 提供客户端库,开发者通过该库编写测试脚本和自动化任务,与 Chromium、Firefox 和 WebKit 浏览器通信。
浏览器实例:浏览器实例可在本地或远程服务器上运行(通过远程浏览器调试协议)。Playwright 支持灵活的配置,但自身不提供服务器功能。
Playwright Server:在某些场景下,Playwright 可与独立的 Playwright Server 交互,该服务器负责提供浏览器实例并处理自动化请求。这种模式更多用于集成测试环境,而非 Playwright 的主要设计模式。
综上所述,Playwright 主要作为一个客户端库,用于与浏览器进行自动化交互,而非传统的客户端-服务器模式工具。
4. Playwright 对 Java 的支持
Playwright 支持 Java,提供官方的 Java 客户端库,允许开发者使用 Java 编写测试脚本和进行浏览器自动化操作。Playwright 的 Java 客户端库与其他语言的客户端库功能一致,提供丰富的功能用于处理浏览器交互、页面操作和自动化测试等任务。
使用 Playwright 的 Java 客户端库
1. 安装 Playwright Java 客户端库
使用 Maven 或 Gradle 添加 Playwright 的依赖。
Maven 配置示例:
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.27.0</version> <!-- 请检查最新版本 -->
</dependency>
注意:Playwright 的客户端驱动
driver-bundle-1.27.0.jar
约为 117MB。
Gradle 配置示例:
dependencies {
implementation 'com.microsoft.playwright:playwright:1.27.0' // 请检查最新版本
}
2. 编写 Playwright 测试脚本
使用 Java 编写测试脚本的基本示例如下:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.BrowserType.LaunchOptions;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Page.ScreenshotOptions;
import com.microsoft.playwright.Playwright;
public class PlaywrightExample {
public static void main(String[] args) {
String url = "https://www.sjsu.edu/classes/calendar/2024-2025.php";
// 创建 Playwright 实例
try (Playwright playwright = Playwright.create()) {
// 启动 Chromium 浏览器
LaunchOptions launchOptions = new BrowserType.LaunchOptions().setHeadless(true);
Browser browser = playwright.chromium().launch(launchOptions);
// 创建新浏览器上下文和页面
BrowserContext context = browser.newContext();
Page page = context.newPage();
// 导航到指定网页
page.navigate(url);
// 截取页面截图
ScreenshotOptions screenshotOptions = new Page.ScreenshotOptions().setPath(Paths.get("example.png"));
page.screenshot(screenshotOptions);
// 获取页面内容并写入文件
String content = page.content();
try {
Files.write(Paths.get("remote_page.html"), content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
// 关闭浏览器
browser.close();
}
}
}
说明:首次启动时,Playwright 会自动下载必要的浏览器和依赖包,包括:
- FFMPEG (Playwright build v1007) - 1.4 MB
- Firefox 105.0.1 (Playwright build v1357) - 77 MB
- WebKit 16.0 (Playwright build v1724) - 58 MB
- Chromium 107.0.5304.18 (Playwright build v1028) - 109.2 MB
3. 运行测试
确保项目配置正确,并且 Playwright 的相关依赖已下载。运行 Java 应用程序以执行 Playwright 脚本。
远程连接
Playwright 支持服务器模式。启动 Playwright 服务器后,可以使用 Java 进行远程浏览器连接。这对于在分布式测试环境或云服务上运行测试尤为有用。以下是设置 Playwright Java 客户端库以支持远程连接的基本步骤:
1. 安装 Chromium
更新包管理器:
sudo apt update
安装 Chromium:
sudo apt install chromium-browser -y
2. 启动远程浏览器
通过命令行启动 Chromium 并指定远程调试端口:
chromium --no-sandbox --headless --disable-gpu --remote-debugging-port=9222
--no-sandbox
:允许以 root 用户运行。--headless
:开启无头模式,在无图形界面的环境下运行 Chromium。--disable-gpu
:禁用 GPU 加速。--remote-debugging-port=9222
:指定远程调试端口。
启动成功后,将显示类似以下信息:
DevTools listening on ws://127.0.0.1:9222/devtools/browser/86a5e2f5-2d49-4639-bcf2-d6be0cf0c59d
3. 配置 Playwright Java 客户端库连接到远程浏览器
远程调试服务器作为服务端,接受来自客户端的调试命令。客户端则是 Playwright Java 应用程序,通过 WebSocket 连接到远程调试服务器并发送命令以控制浏览器。以下是示例代码,展示如何连接到远程浏览器并进行操作:
package com.litongjava.playwright.example;
import java.nio.file.Paths;
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;
public class RemotePlaywrightExample {
public static void main(String[] args) {
// 创建 Playwright 实例
try (Playwright playwright = Playwright.create()) {
// 连接到远程浏览器实例
BrowserType browserType = playwright.chromium();
Browser browser = browserType.connect("ws://localhost:9222");
// 创建新的浏览器上下文和页面
BrowserContext context = browser.newContext();
Page page = context.newPage();
// 导航到指定网页
page.navigate("https://example.com");
// 截取页面截图
page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("remote_example.png")));
// 关闭浏览器
browser.close();
}
}
}
aws linux
╔══════════════════════════════════════════════════════╗
║ Host system is missing dependencies to run browsers. ║
║ Missing libraries: ║
║ libatk-1.0.so.0 ║
║ libatk-bridge-2.0.so.0 ║
║ libcups.so.2 ║
║ libdrm.so.2 ║
║ libatspi.so.0 ║
║ libX11.so.6 ║
║ libXcomposite.so.1 ║
║ libXdamage.so.1 ║
║ libXext.so.6 ║
║ libXfixes.so.3 ║
║ libXrandr.so.2 ║
║ libgbm.so.1 ║
║ libxcb.so.1 ║
║ libxkbcommon.so.0 ║
║ libpango-1.0.so.0 ║
║ libcairo.so.2 ║
║ libasound.so.2 ║
║ libwayland-client.so.0 ║
╚══════════════════════════════════════════════════════╝
在 aws linux 上使用出现了上面的错误,该如何解决
sudo dnf install -y \
atk \
at-spi2-atk \
cups-libs \
libdrm \
libX11 \
libXcomposite \
libXdamage \
libXext \
libXfixes \
libXrandr \
mesa-libgbm \
libxcb \
libxkbcommon \
pango \
cairo \
alsa-lib \
libwayland-client
总结
Playwright 是一个功能强大且灵活的网页自动化工具,特别适用于现代 Web 应用的测试和自动化需求。相比 Selenium,Playwright 提供了更现代化的 API、更高的性能和稳定性,以及更丰富的功能支持。通过官方提供的 Java 客户端库,开发者可以轻松地在 Java 项目中集成 Playwright,实现高效的自动化测试和浏览器操作。同时,Playwright 支持远程连接,适应分布式测试环境和云服务的需求,为开发者提供了极大的便利和灵活性。