Skip to content

Playwright ​

简介 ​

1. 什么是 Playwright ​

Playwright 是一个由微软开发的现代化网页自动化测试和浏览器操作工具。它支持多种浏览器,包括 Chromium、Firefox 和 WebKit,并提供一致的跨浏览器 API。以下是 Playwright 的一些关键特点:

  1. 多浏览器支持:Playwright 支持 Chromium(包括 Google Chrome 和 Microsoft Edge)、Firefox 和 WebKit(包括 Safari),使开发者能够在多个浏览器上进行一致的测试。

  2. 自动化测试:Playwright 提供强大的自动化测试功能,支持编写和执行测试用例,适用于端到端(E2E)测试、功能测试和回归测试等。

  3. 丰富的 API:Playwright 拥有直观且强大的 API,用于浏览器自动化、页面导航、表单填写、截图、PDF 生成等操作。

  4. 并行测试:支持并行执行测试,显著提升测试速度和 CI/CD 管道的效率。

  5. 无头模式与有头模式:Playwright 支持无头模式(Headless)和有头模式(Headful),在无头模式下不会打开浏览器窗口,有头模式则会显示浏览器界面。

  6. 跨平台:Playwright 可在 Windows、Mac 和 Linux 上运行,适用于本地开发和 CI 环境。

  7. 自动处理页面同步:自动管理页面加载、元素可见性等同步问题,减少开发者手动等待的需求。

  8. 强大的选择器:提供多种选择器策略,包括 CSS 选择器、文本选择器、XPath 等,方便精准定位页面元素。

  9. 网络拦截与模拟:允许拦截和模拟网络请求,适用于测试不同的网络条件和 API 响应。

  10. 截图与视频录制:支持截取网页截图和录制测试过程的视频,有助于调试和记录测试结果。

总之,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 配置示例:

xml
<dependency>
  <groupId>com.microsoft.playwright</groupId>
  <artifactId>playwright</artifactId>
  <version>1.27.0</version> <!-- 请检查最新版本 -->
</dependency>

注意:Playwright 的客户端驱动 driver-bundle-1.27.0.jar 约为 117MB。

Gradle 配置示例:

groovy
dependencies {
  implementation 'com.microsoft.playwright:playwright:1.27.0' // 请检查最新版本
}

2. 编写 Playwright 测试脚本 ​

使用 Java 编写测试脚本的基本示例如下:

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 ​

  1. 更新包管理器:

    bash
    sudo apt update
  2. 安装 Chromium:

    bash
    sudo apt install chromium-browser -y

2. 启动远程浏览器 ​

通过命令行启动 Chromium 并指定远程调试端口:

bash
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 连接到远程调试服务器并发送命令以控制浏览器。以下是示例代码,展示如何连接到远程浏览器并进行操作:

java
package nexus.io.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 上使用出现了上面的错误,该如何解决

shell
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 支持远程连接,适应分布式测试环境和云服务的需求,为开发者提供了极大的便利和灵活性。

MIT Licensed