跳到主要内容

发行说明

版本 1.49

Aria 快照

新的断言 expect(locator).to_match_aria_snapshot() 通过与表示为 YAML 的预期可访问性树进行比较来验证页面结构。

page.goto("https://playwright.net.cn")
expect(page.locator('body')).to_match_aria_snapshot('''
- banner:
- heading /Playwright enables reliable/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- main:
- img "Browsers (Chromium, Firefox, WebKit)"
- heading "Any browser • Any platform • One API"
''')

您可以使用 测试生成器 或调用 locator.aria_snapshot() 来生成此断言。

aria 快照指南 中了解更多信息。

Tracing groups

新的方法 tracing.group() 允许您在 trace viewer 中以可视方式对操作进行分组。

# All actions between group and group_end
# will be shown in the trace viewer as a group.
page.context.tracing.group("Open Playwright.dev > API")
page.goto("https://playwright.net.cn/")
page.get_by_role("link", name="API").click()
page.context.tracing.group_end()

重大变更:chromemsedge 频道切换到新的无头模式

如果您在 playwright.config.ts 中使用以下频道之一,则此更改会影响您

  • chromechrome-devchrome-betachrome-canary
  • msedgemsedge-devmsedge-betamsedge-canary

更新到 Playwright v1.49 后,运行您的测试套件。如果仍然通过,则一切正常。如果未通过,您可能需要更新快照,并调整一些围绕 PDF 查看器和扩展程序的测试代码。有关更多详细信息,请参阅 issue #33566

尝试新的 Chromium 无头模式

您可以使用 'chromium' 频道选择加入新的无头模式。正如 官方 Chrome 文档所述

另一方面,新的无头模式是真正的 Chrome 浏览器,因此更真实、更可靠,并提供更多功能。这使其更适合高精度端到端 Web 应用程序测试或浏览器扩展程序测试。

有关您可能遇到的潜在中断以及有关 Chromium 无头模式的更多详细信息,请参阅 issue #33566。如果您在选择加入后发现任何问题,请提交 issue。

pytest test_login.py --browser-channel chromium

其他

  • Ubuntu 20.04 和 Debian 11 上的 WebKit 将不再有更新。我们建议您将操作系统更新到更高版本。
  • 快照内的 <canvas> 元素现在绘制预览。
  • 不再支持 Python 3.8。

浏览器版本

  • Chromium 131.0.6778.33
  • Mozilla Firefox 132.0
  • WebKit 18.2

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

  • Google Chrome 130
  • Microsoft Edge 130

版本 1.48

WebSocket 路由

新的方法 page.route_web_socket()browser_context.route_web_socket() 允许拦截、修改和模拟页面中启动的 WebSocket 连接。以下是一个简单的示例,通过响应 "request""response" 来模拟 WebSocket 通信。

def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")

page.route_web_socket("/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))

有关更多详细信息,请参阅 WebSocketRoute

UI 更新

  • HTML 报告中用于注释和测试位置的新“复制”按钮。
  • 路由方法调用(如 route.fulfill())不再显示在报告和 trace viewer 中。您可以在网络选项卡中查看哪些网络请求被路由。
  • 网络选项卡中请求的新“复制为 cURL”和“复制为 fetch”按钮。

其他

浏览器版本

  • Chromium 130.0.6723.19
  • Mozilla Firefox 130.0
  • WebKit 18.0

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

  • Google Chrome 129
  • Microsoft Edge 129

版本 1.47

网络选项卡改进

trace viewer 中的网络选项卡有几个不错的改进

  • 按资产类型和 URL 过滤
  • 更好地显示查询字符串参数
  • 字体资产预览

Network tab now has filters

其他

  • mcr.microsoft.com/playwright/python:v1.47.0 现在提供基于 Ubuntu 24.04 Noble 的 Playwright 镜像。要使用基于 22.04 jammy 的镜像,请改用 mcr.microsoft.com/playwright/python:v1.47.0-jammy
  • 不再发布 Playwright Docker 镜像的 :latest/:focal/:jammy 标签。锁定到特定版本以获得更好的稳定性和可重现性。
  • TLS 客户端证书现在可以通过传递 client_certificates.certclient_certificates.key 作为字节而不是文件路径从内存中传递。
  • no_wait_afterlocator.select_option() 中已弃用。
  • 我们已经看到 WebGL 在 GitHub Actions macos-13 上 Webkit 行为异常的报告。我们建议将 GitHub Actions 升级到 macos-14

浏览器版本

  • Chromium 129.0.6668.29
  • Mozilla Firefox 130.0
  • WebKit 18.0

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

  • Google Chrome 128
  • Microsoft Edge 128

版本 1.46

TLS 客户端证书

Playwright 现在允许提供客户端证书,以便服务器可以按照 TLS 客户端身份验证的规定对其进行验证。

您可以将客户端证书作为 browser.new_context()api_request.new_context() 的参数提供。以下代码片段为 https://example.com 设置客户端证书

context = browser.new_context(
client_certificates=[
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
)

Trace Viewer 更新

  • 文本附件的内容现在在附件窗格中内联呈现。
  • 新设置用于显示/隐藏路由操作,如 route.continue_()
  • 请求方法和状态显示在网络详细信息选项卡中。
  • 新按钮用于将源文件位置复制到剪贴板。
  • 元数据窗格现在显示 base_url

其他

浏览器版本

  • Chromium 128.0.6613.18
  • Mozilla Firefox 128.0
  • WebKit 18.0

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

  • Google Chrome 127
  • Microsoft Edge 127

版本 1.45

时钟

利用新的 Clock API 允许在测试中操作和控制时间,以验证与时间相关的行为。此 API 涵盖许多常见场景,包括

  • 使用预定义时间进行测试;
  • 保持一致的时间和计时器;
  • 监控不活动状态;
  • 手动滴答计时。
# Initialize clock with some time before the test time and let the page load
# naturally. `Date.now` will progress as the timers fire.
page.clock.install(time=datetime.datetime(2024, 2, 2, 8, 0, 0))
page.goto("https://127.0.0.1:3333")

# Pretend that the user closed the laptop lid and opened it again at 10am.
# Pause the time once reached that point.
page.clock.pause_at(datetime.datetime(2024, 2, 2, 10, 0, 0))

# Assert the page state.
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:00:00 AM")

# Close the laptop lid again and open it at 10:30am.
page.clock.fast_forward("30:00")
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:30:00 AM")

有关更多详细信息,请参阅 时钟指南

其他

  • 方法 locator.set_input_files() 现在支持为 <input type=file webkitdirectory> 元素上传目录。

    page.get_by_label("Upload directory").set_input_files('mydir')
  • 多种方法(如 locator.click()locator.press())现在支持 ControlOrMeta 修饰键。此键在 macOS 上映射到 Meta,在 Windows 和 Linux 上映射到 Control

    # Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation.
    page.keyboard.press("ControlOrMeta+S")
  • api_request.new_context() 中的新属性 httpCredentials.send,允许始终发送 Authorization 标头,或仅在响应 401 Unauthorized 时发送。

  • Playwright 现在支持 Ubuntu 24.04 上的 Chromium、Firefox 和 WebKit。

  • v1.45 是 macOS 12 Monterey 接收 WebKit 更新的最后一个版本。请更新 macOS 以继续使用最新的 WebKit。

浏览器版本

  • Chromium 127.0.6533.5
  • Mozilla Firefox 127.0
  • WebKit 17.4

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

  • Google Chrome 126
  • Microsoft Edge 126

版本 1.44

新 API

可访问性断言

定位器处理程序

locator = page.get_by_text("This interstitial covers the button")
page.add_locator_handler(locator, lambda overlay: overlay.locator("#close").click(), times=3, no_wait_after=True)
# Run your tests that can be interrupted by the overlay.
# ...
page.remove_locator_handler(locator)

其他选项

浏览器版本

  • Chromium 125.0.6422.14
  • Mozilla Firefox 125.0.1
  • WebKit 17.4

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

  • Google Chrome 124
  • Microsoft Edge 124

版本 1.43

新 API

  • 方法 browser_context.clear_cookies() 现在支持筛选器以仅删除某些 Cookie。

    # Clear all cookies.
    context.clear_cookies()
    # New: clear cookies with a particular name.
    context.clear_cookies(name="session-id")
    # New: clear cookies for a particular domain.
    context.clear_cookies(domain="my-origin.com")
  • 新方法 locator.content_frameLocator 对象转换为 FrameLocator。当您在某处获得 Locator 对象,并且稍后想要与框架内的内容交互时,这可能很有用。

    locator = page.locator("iframe[name='embedded']")
    # ...
    frame_locator = locator.content_frame
    frame_locator.getByRole("button").click()
  • 新方法 frame_locator.ownerFrameLocator 对象转换为 Locator。当您在某处获得 FrameLocator 对象,并且稍后想要与 iframe 元素交互时,这可能很有用。

    frame_locator = page.frame_locator("iframe[name='embedded']")
    # ...
    locator = frame_locator.owner
    expect(locator).to_be_visible()
  • Conda 构建现在针对 macOS-arm64 和 Linux-arm64 发布。

浏览器版本

  • Chromium 124.0.6367.8
  • Mozilla Firefox 124.0
  • WebKit 17.4

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

  • Google Chrome 123
  • Microsoft Edge 123

版本 1.42

新的定位器处理程序

新的方法 page.add_locator_handler() 注册一个回调,当指定的元素变为可见并且可能阻止 Playwright 操作时,将调用该回调。回调可以去除覆盖。以下示例说明了如何在 cookie 对话框出现时将其关闭。

# Setup the handler.
page.add_locator_handler(
page.get_by_role("heading", name="Hej! You are in control of your cookies."),
lambda: page.get_by_role("button", name="Accept all").click(),
)
# Write the test as usual.
page.goto("https://www.ikea.com/")
page.get_by_role("link", name="Collection of blue and white").click()
expect(page.get_by_role("heading", name="Light and easy")).to_be_visible()

新 API

公告

  • ⚠️ 不再支持 Ubuntu 18。

浏览器版本

  • Chromium 123.0.6312.4
  • Mozilla Firefox 123.0
  • WebKit 17.4

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

  • Google Chrome 122
  • Microsoft Edge 123

版本 1.41

新 API

浏览器版本

  • Chromium 121.0.6167.57
  • Mozilla Firefox 121.0
  • WebKit 17.4

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

  • Google Chrome 120
  • Microsoft Edge 120

版本 1.40

测试生成器更新

Playwright Test Generator

生成断言的新工具

这是一个带有断言的生成测试示例

from playwright.sync_api import Page, expect

def test_example(page: Page) -> None:
page.goto("https://playwright.net.cn/")
page.get_by_role("link", name="Get started").click()
expect(page.get_by_label("Breadcrumbs").get_by_role("list")).to_contain_text("Installation")
expect(page.get_by_label("Search")).to_be_visible()
page.get_by_label("Search").click()
page.get_by_placeholder("Search docs").fill("locator")
expect(page.get_by_placeholder("Search docs")).to_have_value("locator");

新 API

其他更改

浏览器版本

  • Chromium 120.0.6099.28
  • Mozilla Firefox 119.0
  • WebKit 17.4

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

  • Google Chrome 119
  • Microsoft Edge 119

版本 1.39

常青浏览器更新。

浏览器版本

  • Chromium 119.0.6045.9
  • Mozilla Firefox 118.0.1
  • WebKit 17.4

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

  • Google Chrome 118
  • Microsoft Edge 118

版本 1.38

Trace Viewer 更新

Playwright Trace Viewer

  1. 放大到时间范围。
  2. 网络面板重新设计。

新 API

弃用

浏览器版本

  • Chromium 117.0.5938.62
  • Mozilla Firefox 117.0
  • WebKit 17.0

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

  • Google Chrome 116
  • Microsoft Edge 116

版本 1.37

亮点

📚 Debian 12 Bookworm 支持

Playwright 现在在 x86_64 和 arm64 上都支持 Debian 12 Bookworm,用于 Chromium、Firefox 和 WebKit。如果您遇到任何问题,请告知我们!

Linux 支持如下所示

Ubuntu 20.04Ubuntu 22.04Debian 11Debian 12
Chromium
WebKit
Firefox

浏览器版本

  • Chromium 116.0.5845.82
  • Mozilla Firefox 115.0
  • WebKit 17.0

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

  • Google Chrome 115
  • Microsoft Edge 115

版本 1.36

🏝️ 夏季维护版本。

浏览器版本

  • Chromium 115.0.5790.75
  • Mozilla Firefox 115.0
  • WebKit 17.0

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

  • Google Chrome 114
  • Microsoft Edge 114

版本 1.35

亮点

  • 方法 page.screenshot()locator.screenshot() 的新选项 mask_color,用于更改默认遮罩颜色。

  • 新的 uninstall CLI 命令用于卸载浏览器二进制文件

    $ playwright uninstall # remove browsers installed by this installation
    $ playwright uninstall --all # remove all ever-install Playwright browsers

浏览器版本

  • Chromium 115.0.5790.13
  • Mozilla Firefox 113.0
  • WebKit 16.4

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

  • Google Chrome 114
  • Microsoft Edge 114

版本 1.34

亮点

浏览器版本

  • Chromium 114.0.5735.26
  • Mozilla Firefox 113.0
  • WebKit 16.4

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

  • Google Chrome 113
  • Microsoft Edge 113

版本 1.33

定位器更新

  • 使用 locator.or_() 创建一个与两个定位器之一匹配的定位器。考虑这样一种情况:您想单击“新邮件”按钮,但有时会弹出安全设置对话框。在这种情况下,您可以等待“新邮件”按钮或对话框,并采取相应的措施

    new_email = page.get_by_role("button", name="New email")
    dialog = page.get_by_text("Confirm security settings")
    expect(new_email.or_(dialog)).is_visible()
    if (dialog.is_visible()):
    page.get_by_role("button", name="Dismiss").click()
    new_email.click()
  • locator.filter() 中使用新的选项 has_nothas_not_text 来查找不符合某些条件的元素。

    row_locator = page.locator("tr")
    row_locator.filter(has_not_text="text in column 1").filter(
    has_not=page.get_by_role("button", name="column 2 button")
    ).screenshot()
  • 使用新的 web-first 断言 expect(locator).to_be_attached() 来确保元素存在于页面的 DOM 中。不要与 expect(locator).to_be_visible() 混淆,后者确保元素既已附加又可见。

新 API

⚠️ 重大变更

  • mcr.microsoft.com/playwright/python:v1.33.0 现在提供基于 Ubuntu Jammy 的 Playwright 镜像。要使用基于 focal 的镜像,请改用 mcr.microsoft.com/playwright/python:v1.33.0-focal

浏览器版本

  • Chromium 113.0.5672.53
  • Mozilla Firefox 112.0
  • WebKit 16.4

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

  • Google Chrome 112
  • Microsoft Edge 112

版本 1.32

新 API

浏览器版本

  • Chromium 112.0.5615.29
  • Mozilla Firefox 111.0
  • WebKit 16.4

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

  • Google Chrome 111
  • Microsoft Edge 111

版本 1.31

新 API

  • 新的断言 expect(locator).to_be_in_viewport() 确保定位器指向与视口相交的元素,根据 intersection observer API

    from playwright.sync_api import expect

    locator = page.get_by_role("button")

    # Make sure at least some part of element intersects viewport.
    expect(locator).to_be_in_viewport()

    # Make sure element is fully outside of viewport.
    expect(locator).not_to_be_in_viewport()

    # Make sure that at least half of the element intersects viewport.
    expect(locator).to_be_in_viewport(ratio=0.5)

其他

  • 现在可以在单独的窗口中打开跟踪查看器中的 DOM 快照。
  • 方法 route.fetch() 的新选项 max_redirects
  • Playwright 现在支持 Debian 11 arm64。
  • 官方 docker 镜像 现在包含 Node 18 而不是 Node 16。

浏览器版本

  • Chromium 111.0.5563.19
  • Mozilla Firefox 109.0
  • WebKit 16.4

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

  • Google Chrome 110
  • Microsoft Edge 110

版本 1.30

浏览器版本

  • Chromium 110.0.5481.38
  • Mozilla Firefox 108.0.2
  • WebKit 16.4

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

  • Google Chrome 109
  • Microsoft Edge 109

版本 1.29

新 API

  • 新方法 route.fetch()route.fulfill() 的新选项 json

    def handle_route(route: Route):
    # Fetch original settings.
    response = route.fetch()

    # Force settings theme to a predefined value.
    json = response.json()
    json["theme"] = "Solorized"

    # Fulfill with modified data.
    route.fulfill(json=json)


    page.route("**/api/settings", handle_route)
  • 新方法 locator.all() 用于迭代所有匹配的元素

    # Check all checkboxes!
    checkboxes = page.get_by_role("checkbox")
    for checkbox in checkboxes.all():
    checkbox.check()
  • locator.select_option() 现在通过值或标签进行匹配

    <select multiple>
    <option value="red">Red</div>
    <option value="green">Green</div>
    <option value="blue">Blue</div>
    </select>
    element.select_option("Red")

其他

浏览器版本

  • Chromium 109.0.5414.46
  • Mozilla Firefox 107.0
  • WebKit 16.4

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

  • Google Chrome 108
  • Microsoft Edge 108

版本 1.28

Playwright 工具

  • CodeGen 中的实时定位器。 使用“Explore”工具为页面上的任何元素生成定位器。

Locator Explorer

新 API

浏览器版本

  • Chromium 108.0.5359.29
  • Mozilla Firefox 106.0
  • WebKit 16.4

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

  • Google Chrome 107
  • Microsoft Edge 107

版本 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 中宣布的那样,自 2022 年 12 月起将不再支持 Ubuntu 18。除此之外,从下一个 Playwright 版本开始,Ubuntu 18 上将不再有 WebKit 更新。

行为变更

  • expect(locator).to_have_attribute() 使用空值不再匹配丢失的属性。例如,当 button 具有 disabled 属性时,以下代码段将成功。

    expect(page.get_by_role("button")).to_have_attribute("disabled", "")

浏览器版本

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

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

  • Google Chrome 106
  • Microsoft Edge 106

版本 1.26

断言

其他亮点

  • api_request_context.get() 和其他方法的新选项 max_redirects,用于限制重定向计数。
  • 现在支持 Python 3.11。

行为变更

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

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

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

为了与 Web 规范对齐,'domcontentloaded' 值仅等待目标 frame 触发 '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.34.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 现在支持 Debian 11 Bullseye on x86_64,用于 Chromium、Firefox 和 WebKit。如果您遇到任何问题,请告知我们!

Linux 支持如下所示

| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 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()

使用新方法 page.route_from_har()browser_context.route_from_har()HAR 文件中提供匹配的响应

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

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

高级路由

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

考虑以下示例

# 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)

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

Web-First 断言更新

其他

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

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

    context = 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")
  • Playwright 现在可以在 Ubuntu 22 amd64 和 Ubuntu 22 arm64 上运行。

版本 1.22

亮点

  • 角色选择器,允许通过元素的 ARIA 角色ARIA 属性可访问名称 来选择元素。

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

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

  • 新的 locator.filter() API 用于过滤现有的定位器

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

    Graphics

版本 1.21

亮点

  • 新的角色选择器,允许通过元素的 ARIA 角色ARIA 属性可访问名称 来选择元素。

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

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

  • page.screenshot() 中用于缩小截图尺寸的新 scale 选项。

  • page.screenshot() 中用于控制文本光标的新 caret 选项。默认为 "hide"

行为变更

  • mcr.microsoft.com/playwright docker 镜像不再包含 Python。请使用 mcr.microsoft.com/playwright/python 作为预装 Python 的 Playwright 就绪 docker 镜像。
  • Playwright 现在支持通过 locator.set_input_files() 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 选项,以确保它在内部包含另一个定位器

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

    locator 文档中阅读更多内容

  • 新的 locator.page

  • page.screenshot()locator.screenshot() 现在自动隐藏闪烁的光标

  • Playwright Codegen 现在生成定位器和 frame locator

浏览器版本

  • 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.request API

# Do a GET request on behalf of page
res = 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")

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

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

定位器改进

  • locator.drag_to()

  • 现在每个定位器都可以选择性地按其包含的文本进行过滤

    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 定位器

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

Graphics

可以使用 page.frame_locator()locator.frame_locator() 方法创建 Frame 定位器。

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

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

跟踪查看器更新

Playwright 跟踪查看器现在在线可用,网址为 https://trace.playwright.dev!只需拖放您的 trace.zip 文件即可检查其内容。

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

  • Playwright Test 跟踪现在默认包含源代码(可以使用跟踪选项关闭这些源代码)
  • 跟踪查看器现在显示测试名称
  • 包含浏览器详细信息的新跟踪元数据选项卡
  • 快照现在具有 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

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

版本 1.16

🎭 Playwright 库

locator.wait_for

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

在处理列表时尤其方便

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

阅读有关 locator.wait_for() 的更多信息。

Arm64 的 Docker 支持

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

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

🎭 Playwright 跟踪查看器

  • 使用 npx playwright show-trace 运行跟踪查看器,并将跟踪文件拖放到跟踪查看器 PWA
  • 更好地可视化操作目标的归属

阅读有关 跟踪查看器的更多信息。

浏览器版本

  • Chromium 97.0.4666.0
  • Mozilla Firefox 93.0
  • WebKit 15.4

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

  • Google Chrome 94
  • Microsoft Edge 94

版本 1.15

🖱️ 鼠标滚轮

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

📜 新的 Headers API

以前无法获取响应的多个标头值。现在可以了,并且提供了其他辅助函数

🌈 Forced-Colors 模拟

现在可以通过在 browser.new_context() 中传递或调用 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 捕获如何检索该元素的逻辑。

此外,locator 默认是“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

  • browser.new_context()browser.new_page() 中的新 baseURL 选项
  • response.security_details()response.server_addr()
  • page.drag_and_drop()frame.drag_and_drop()
  • download.cancel()
  • page.input_value(), frame.input_value()element_handle.input_value()
  • page.fill(), frame.fill()element_handle.fill() 中的新 force 选项
  • page.select_option(), frame.select_option()element_handle.select_option() 中的新 force 选项

版本 1.12

🧟‍♂️ 隆重推出 Playwright Trace Viewer

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

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

跟踪是使用新的 browser_context.tracing API 记录的

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.net.cn")

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

稍后使用 Playwright CLI 检查跟踪

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

  • 支持异步谓词,在 API 中的方法中,例如 page.expect_request()
  • 新的模拟设备:Galaxy S8、Galaxy S9+、Galaxy Tab S4、Pixel 3、Pixel 4
  • 新方法
  • 新选项
    • browser.new_context() 方法中的 screen 选项,用于模拟 window.screen 尺寸
    • page.check()page.uncheck() 方法中的 position 选项
    • page.check(), page.uncheck(), page.click(), page.dblclick(), page.hover()page.tap() 中的 trial 选项,用于试运行操作

版本 1.10

捆绑的浏览器版本

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

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

  • Google Chrome 89
  • Microsoft Edge 89

新 API

  • browser_type.launch() 现在接受新的 'channel' 选项。在我们的文档中阅读更多内容。

版本 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 绑定 并驾齐驱。
  • 浏览器存储 API:新的便捷 API,用于保存和加载浏览器存储状态(cookies、本地存储),以简化需要身份验证的自动化场景。
  • 新的 CSS 选择器:我们听取了您关于更灵活选择器的反馈,并改进了选择器实现。Playwright 1.7 引入了 新的 CSS 扩展,并且即将推出更多。
  • 新网站playwright.dev 上的文档网站已更新,现在使用 Docusaurus 构建。
  • 支持 Apple Silicon:WebKit 和 Chromium 的 Playwright 浏览器二进制文件现在为 Apple Silicon 构建。

新 API

  • browser_context.storage_state() 获取当前状态以供以后重用。
  • browser.new_context()browser.new_page() 中的 storageState 选项,用于设置浏览器上下文状态。

浏览器版本

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1