Skip to main content

发布说明

版本 1.27

定位器

有了这些新的 API,编写定位器将成为一种乐趣:

page.get_by_label("User Name").fill("John")

page.get_by_label("Password").fill("secret-password")

page.get_by_role("button", name="Sign in").click()

expect(page.get_by_text("Welcome, John!")).to_be_visible()

所有相同的方法也可在 LocatorFrameLocatorFrame 类上使用。

其他亮点

  • 正如 v1.25 中宣布的那样,Ubuntu 18 将从 2022 年 12 月起不再受支持。除此之外,从下一个 Playwright 版本开始,Ubuntu 18 上将不再有 WebKit 更新。

行为变更

浏览器版本

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 106
  • Microsoft Edge 106

版本 1.26

断言

其他亮点

行为变更

许多 Playwright API 已经支持 wait_until: "domcontentloaded" 选项。例如:

page.goto("https://playwright.dev", wait_until="domcontentloaded")

在 1.26 之前,这将等待所有 iframe 触发 DOMContentLoaded 事件。

为了与 Web 规范保持一致,'domcontentloaded' 值仅等待目标帧触发 'DOMContentLoaded' 事件。使用 wait_until="load" 等待所有 iframe。

浏览器版本

  • Chromium 106.0.5249.30
  • Mozilla Firefox 104.0
  • WebKit 16.0

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 105
  • Microsoft Edge 105

版本 1.25

公告

  • 🎁 我们现在发布 Ubuntu 22.04 Jammy Jellyfish docker 镜像:mcr.microsoft.com/playwright/python:v1.28.0-jammy
  • 🪦 这是最后一个支持 macOS 10.15 的版本(自 1.21 起已弃用)。
  • ⚠️ Ubuntu 18 现已弃用,从 2022 年 12 月起将不再受支持。

浏览器版本

  • Chromium 105.0.5195.19
  • Mozilla Firefox 103.0
  • WebKit 16.0

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 104
  • Microsoft Edge 104

版本 1.24

🐂 Debian 11 Bullseye 支持

Playwright 现在支持 x86_64 上的 Debian 11 Bullseye,适用于 Chromium、Firefox 和 WebKit。如果您遇到任何问题,请告诉我们!

Linux 支持如下所示:

Ubuntu 18.04Ubuntu 20.04Ubuntu 22.04Debian 11
Chromium
WebKit
Firefox

新的介绍文档

我们重写了入门文档,更加注重端到端测试。请在 playwright.dev 上查看。

版本 1.23

网络重放

现在,您可以将网络流量记录到 HAR 文件中,并在测试中重用此流量。

要将网络记录到 HAR 文件中:

npx playwright open --save-har=github.har.zip https://github.com/microsoft

或者,您可以以编程方式记录 HAR:

context = browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
context.close()
context = await browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
await context.close()

使用新方法 page.route_from_har(har, **kwargs)browser_context.route_from_har(har, **kwargs)HAR 文件提供匹配的响应:

context.route_from_har("github.har.zip")
await context.route_from_har("github.har.zip")

我们的文档 中阅读更多内容。

高级路由

您现在可以使用 route.fallback(**kwargs) 将路由推迟到其他处理程序。

考虑以下示例:

# Remove a header from all requests
def remove_header_handler(route: Route) -> None:
headers = route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
route.fallback(headers=headers)

page.route("**/*", remove_header_handler)

# Abort all images
def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
route.abort()
else:
route.fallback()

page.route("**/*", abort_images_handler)
# Remove a header from all requests
async def remove_header_handler(route: Route) -> None:
headers = await route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
await route.fallback(headers=headers)

await page.route("**/*", remove_header_handler)

# Abort all images
async def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
await route.abort()
else:
await route.fallback()

await page.route("**/*", abort_images_handler)

请注意,新方法 page.route_from_har(har, **kwargs)browser_context.route_from_har(har, **kwargs) 也参与路由,并且可以被推迟。

Web-First 断言更新

其他

  • 如果有 service worker 妨碍您,您现在可以使用新的上下文选项 service_workers 轻松禁用它:

    context = browser.new_context(service_workers="block")
    page = context.new_page()
    context = await browser.new_context(service_workers="block")
    page = await context.new_page()
  • recordHar 上下文选项使用 .zip 路径会自动压缩生成的 HAR:

    context = browser.new_context(record_har_path="github.har.zip")
    context = await browser.new_context(record_har_path="github.har.zip")
  • 如果您打算手动编辑 HAR,请考虑使用 "minimal" HAR 录制模式,该模式仅记录重放所需的基本信息:

    context = browser.new_context(record_har_mode="minimal", record_har_path="har.har")
    context = await browser.new_context(record_har_mode="minimal", record_har_path="har.har")
  • Playwright 现在在 Ubuntu 22 amd64 和 Ubuntu 22 arm64 上运行。

版本 1.22

亮点

  • Role selectors 允许通过 ARIA roleARIA attributesaccessible name 选择元素。

    # Click a button with accessible name "log in"
    page.locator("role=button[name='log in']").click()

    我们的文档 中阅读更多内容。

  • 新的 locator.filter(**kwargs) API 用于过滤现有的 locator。

    buttons = page.locator("role=button")
    # ...
    submit_button = buttons.filter(has_text="Submit")
    submit_button.click()
  • Codegen 现在支持生成 Pytest 测试

    Graphics

版本 1.21

亮点

行为变更

  • mcr.microsoft.com/playwright docker 镜像不再包含 Python。请使用 mcr.microsoft.com/playwright/python 作为预装了 Python 的 Playwright-ready docker 镜像。
  • Playwright 现在通过 locator.set_input_files(files, **kwargs) API 支持大文件上传(数百 MB)。

浏览器版本

  • Chromium 101.0.4951.26
  • Mozilla Firefox 98.0.2
  • WebKit 15.4

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 100
  • Microsoft Edge 100

版本 1.20

亮点

公告

  • 我们现在发布指定的 Python docker 镜像 mcr.microsoft.com/playwright/python。如果您使用 Python,请切换到它。这是最后一个在我们的 javascript mcr.microsoft.com/playwright docker 镜像中包含 Python 的版本。
  • v1.20 是最后一个接收 macOS 10.15 Catalina WebKit 更新的版本。请更新 MacOS 以继续使用最新最好的 WebKit!

浏览器版本

  • Chromium 101.0.4921.0
  • Mozilla Firefox 97.0.1
  • WebKit 15.4

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 99
  • Microsoft Edge 99

版本 1.19

亮点

  • Locator 现在支持 has 选项,确保它包含另一个 locator:

    page.locator("article", has=page.locator(".highlight")).click()
    await page.locator("article", has=page.locator(".highlight")).click()

    locator 文档 中阅读更多内容

  • 新的 locator.page

  • page.screenshot(**kwargs)locator.screenshot(**kwargs) 现在自动隐藏闪烁的插入符号

  • Playwright Codegen 现在生成 locators 和 frame locators

浏览器版本

  • Chromium 100.0.4863.0
  • Mozilla Firefox 96.0.1
  • WebKit 15.4

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 98
  • Microsoft Edge 98

版本 1.18

API 测试

Playwright for Python 1.18 引入了新的 API 测试,让您可以直接从 Python 向服务器发送请求!现在您可以:

  • 测试您的服务器 API
  • 在访问测试中的 Web 应用程序之前准备服务器端状态
  • 在浏览器中运行某些操作后验证服务器端后置条件

要代表 Playwright 的 Page 执行请求,请使用 新的 page.request API

# Do a GET request on behalf of page
res = page.request.get("http://example.com/foo.json")
# Do a GET request on behalf of page
res = await page.request.get("http://example.com/foo.json")

我们的文档 中阅读更多内容。

Web-First 断言

Playwright for Python 1.18 引入了 Web-First 断言

考虑以下示例:

from playwright.sync_api import Page, expect

def test_status_becomes_submitted(page: Page) -> None:
# ..
page.locator("#submit-button").click()
expect(page.locator(".status")).to_have_text("Submitted")
from playwright.async_api import Page, expect

async def test_status_becomes_submitted(page: Page) -> None:
# ..
await page.locator("#submit-button").click()
await expect(page.locator(".status")).to_have_text("Submitted")

Playwright 将重新测试带有选择器 .status 的节点,直到获取的节点具有 "Submitted" 文本。它将一遍又一遍地重新获取节点并检查它,直到满足条件或达到超时。您可以将此超时作为选项传递。

我们的文档 中阅读更多内容。

Locator 改进

  • locator.drag_to(target, **kwargs)

  • 每个 locator 现在可以通过其包含的文本进行可选过滤:

    page.locator("li", has_text="my item").locator("button").click()
    await page.locator("li", has_text="my item").locator("button").click()

    locator 文档 中阅读更多内容

新 API 和变更

浏览器版本

  • Chromium 99.0.4812.0
  • Mozilla Firefox 95.0
  • WebKit 15.4

此版本还针对以下稳定频道进行了测试:

  • Google Chrome 97
  • Microsoft Edge 97

版本 1.17

Frame Locators

Playwright 1.17 引入了 frame locators - 页面上 iframe 的定位器。Frame locators 捕获足以检索 iframe 然后在该 iframe 中定位元素的逻辑。Frame locators 默认是严格的,将等待 iframe 出现,并且可以在 Web-First 断言中使用。

Graphics

Frame locators 可以使用 page.frame_locator(selector)locator.frame_locator(selector) 方法创建。

locator = page.frame_locator("my-frame").locator("text=Submit")
locator.click()

我们的文档 中阅读更多内容。

Trace Viewer 更新

Playwright Trace Viewer 现在可在 https://trace.playwright.dev 在线使用!只需拖放您的 trace.zip 文件即可检查其内容。

注意:trace 文件不会上传到任何地方;trace.playwright.dev 是一个 渐进式 Web 应用程序,在本地处理 traces。

  • Playwright Test traces 现在默认包含源代码(可以通过 tracing 选项关闭)
  • Trace Viewer 现在显示测试名称
  • 带有浏览器详细信息的新 trace 元数据选项卡
  • 快照现在有 URL 栏

image

HTML 报告更新

  • HTML 报告现在支持动态过滤
  • 报告现在是一个 单个静态 HTML 文件,可以通过电子邮件或作为 slack 附件发送。

image

Ubuntu ARM64 支持 + 更多

  • Playwright 现在支持 Ubuntu 20.04 ARM64。您现在可以在 Apple M1 和 Raspberry Pi 上的 Docker 内运行 Playwright 测试。

  • 您现在可以使用 Playwright 在 Linux 上安装稳定版本的 Edge:

    npx playwright install msedge

新 API

  • Tracing 现在支持 'title' 选项
  • 页面导航支持新的 'commit' 等待选项

版本 1.16

🎭 Playwright 库

locator.wait_for

等待 locator 解析为具有给定状态的单个元素。默认为 state: 'visible'

在处理列表时特别方便:

order_sent = page.locator("#order-sent")
order_sent.wait_for()

阅读更多关于 locator.wait_for(**kwargs) 的信息。

Docker 支持 Arm64

Playwright Docker 镜像现在已针对 Arm64 发布,因此可以在 Apple Silicon 上使用。

阅读更多关于 Docker 集成 的信息。

🎭 Playwright Trace Viewer

  • 使用 npx playwright show-trace 运行 trace viewer 并将 trace 文件拖放到 trace viewer PWA
  • 更好的操作目标视觉归因

阅读更多关于 Trace Viewer 的信息。

浏览器版本

  • Chromium 97.0.4666.0
  • Mozilla Firefox 93.0
  • WebKit 15.4

此版本的 Playwright 还针对以下稳定频道进行了测试:

  • Google Chrome 94
  • Microsoft Edge 94

版本 1.15

🖱️ 鼠标滚轮

通过使用 Page.mouse.wheel,您现在可以垂直或水平滚动。

📜 新的 Headers API

以前无法获取响应的多个标头值。现在这是可能的,并且提供了额外的辅助函数:

🌈 强制颜色模拟

现在可以通过在 上下文选项 中传递它或调用 Page.emulate_media() 来模拟 forced-colors CSS 媒体功能。

新 API

浏览器版本

  • Chromium 96.0.4641.0
  • Mozilla Firefox 92.0
  • WebKit 15.0

版本 1.14

⚡️ 新的 "strict" 模式

选择器歧义是自动化测试中的常见问题。"strict" 模式 确保您的选择器指向单个元素,否则会抛出异常。

strict=true 传递到您的操作调用中以选择加入。

# This will throw if you have more than one button!
page.click("button", strict=True)

📍 新的 Locators API

Locator 表示页面上元素及其视图。它捕获足以在任何给定时刻检索元素的逻辑。

LocatorElementHandle 之间的区别在于,后者指向特定元素,而 Locator 捕获如何检索该元素的逻辑。

此外,locators 默认是 "strict" 的

locator = page.locator("button")
locator.click()

文档 中了解更多信息。

🧩 实验性 ReactVue 选择器引擎

React 和 Vue 选择器允许通过组件名称和/或属性值选择元素。语法与 属性选择器 非常相似,并支持所有属性选择器运算符。

page.locator("_react=SubmitButton[enabled=true]").click()
page.locator("_vue=submit-button[enabled=true]").click()

react 选择器文档vue 选择器文档 中了解更多信息。

✨ 新的 nthvisible 选择器引擎

  • nth 选择器引擎等效于 :nth-match 伪类,但可以与其他选择器引擎结合使用。
  • visible 选择器引擎等效于 :visible 伪类,但可以与其他选择器引擎结合使用。
# select the first button among all buttons
button.click("button >> nth=0")
# or if you are using locators, you can use first, nth() and last
page.locator("button").first.click()

# click a visible button
button.click("button >> visible=true")

浏览器版本

  • Chromium 94.0.4595.0
  • Mozilla Firefox 91.0
  • WebKit 15.0

版本 1.13

Playwright

工具

  • Playwright Trace Viewer 现在显示参数、返回值和 console.log() 调用。

新的和改进的指南

浏览器版本

  • Chromium 93.0.4576.0
  • Mozilla Firefox 90.0
  • WebKit 14.2

新 Playwright API

版本 1.12

🧟‍♂️ 介绍 Playwright Trace Viewer

Playwright Trace Viewer 是一个新的 GUI 工具,可帮助在脚本运行后探索记录的 Playwright trace。Playwright trace 让您可以检查:

  • 每个 Playwright 操作前后的页面 DOM
  • 每个 Playwright 操作前后的页面渲染
  • 脚本执行期间的浏览器网络

使用新的 browser_context.tracing API 记录 Traces:

browser = chromium.launch()
context = browser.new_context()

# Start tracing before creating / navigating a page.
context.tracing.start(screenshots=True, snapshots=True)

page.goto("https://playwright.dev")

# Stop tracing and export it into a zip archive.
context.tracing.stop(path = "trace.zip")

稍后使用 Playwright CLI 检查 Traces:

playwright show-trace trace.zip

这将打开以下 GUI:

image

👉 在 trace viewer 文档 中阅读更多内容。

浏览器版本

  • Chromium 93.0.4530.0
  • Mozilla Firefox 89.0
  • WebKit 14.2

此版本的 Playwright 还针对以下稳定频道进行了测试:

  • Google Chrome 91
  • Microsoft Edge 91

新 API

版本 1.11

🎥 新视频:Playwright:现代 Web 的新测试自动化框架 (幻灯片)

  • 我们谈到了 Playwright
  • 展示了幕后的工程工作
  • 进行了新功能的现场演示 ✨
  • 特别感谢 applitools 举办此次活动并邀请我们!

浏览器版本

  • Chromium 92.0.4498.0
  • Mozilla Firefox 89.0b6
  • WebKit 14.2

新 API

版本 1.10

捆绑的浏览器版本

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

此版本的 Playwright 还针对以下稳定频道进行了测试:

  • Google Chrome 89
  • Microsoft Edge 89

新 API

版本 1.9

  • Playwright Inspector 是一个 新的 GUI 工具,用于编写和调试您的测试。
    • 对 Playwright 脚本进行 逐行调试,具有播放、暂停和单步执行功能。
    • 通过 记录用户操作 编写新脚本。
    • 通过将鼠标悬停在元素上来 生成元素选择器
    • 设置 PWDEBUG=1 环境变量以启动 Inspector
  • 在有头模式下使用 page.pause() 暂停脚本执行。暂停页面会启动 Playwright Inspector 进行调试。
  • CSS 选择器的 新 has-text 伪类:has-text("example") 匹配内部某处包含 "example" 的任何元素,可能在子元素或后代元素中。查看 更多示例
  • 页面对话框现在在执行期间自动关闭,除非配置了 dialog 事件的侦听器。关于此 了解更多
  • Playwright for Python 现已稳定,具有惯用的 snake case API 和预构建的 Docker 镜像 以在 CI/CD 中运行测试。

浏览器版本

  • Chromium 90.0.4421.0
  • Mozilla Firefox 86.0b10
  • WebKit 14.1

新 API

版本 1.8

新 API

浏览器版本

  • Chromium 90.0.4392.0
  • Mozilla Firefox 85.0b5
  • WebKit 14.1

版本 1.7

  • 新 Java SDKPlaywright for Java 现在与 JavaScriptPython.NET bindings 相当。
  • 浏览器存储 API:新的便捷 API 用于保存和加载浏览器存储状态(cookie、本地存储),以简化带身份验证的自动化场景。
  • 新 CSS 选择器:我们听到了您关于更灵活选择器的反馈,并改进了选择器实现。Playwright 1.7 引入了 新 CSS 扩展,更多内容即将推出。
  • 新网站playwright.dev 上的文档网站已更新,现在使用 Docusaurus 构建。
  • 支持 Apple Silicon:WebKit 和 Chromium 的 Playwright 浏览器二进制文件现在针对 Apple Silicon 构建。

新 API

浏览器版本

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1