版本说明
版本 1.52
亮点
-
新方法 expect(locator).to_contain_class(),用于方便地断言元素的单个类名。
expect(page.get_by_role('listitem', name='Ship v1.52')).to_contain_class('done')
-
Aria 快照增加了两个新属性:
/children
用于严格匹配,/url
用于链接。expect(locator).to_match_aria_snapshot("""
- list
- /children: equal
- listitem: Feature A
- listitem:
- link "Feature B":
- /url: "https://playwright.net.cn"
""")
杂项
- 新选项 max_redirects,在 api_request.new_context() 中控制最大重定向次数。
- 新选项 ref,在 locator.aria_snapshot() 中为快照中的每个元素生成引用,该引用以后可用于定位元素。
- HTML 报告器现在支持通过
!@my-tag
或!my-file.spec.ts
或!p:my-project
进行排除过滤。
重大变更
- page.frame() 中不再支持 Base URL 匹配。我们建议迁移到 page.frame_locator() 以获得更便捷的 API。
- page.route() 等方法中的 Glob URL 模式不再支持
?
和[]
。我们建议改用正则表达式。 - 方法 route.continue_() 不再允许覆盖
Cookie
头部。如果提供了Cookie
头部,它将被忽略,并且 cookie 将从浏览器的 cookie 存储中加载。要设置自定义 cookie,请使用 browser_context.add_cookies()。 - macOS 13 现已弃用,将不再接收 WebKit 更新。请升级到更新的 macOS 版本,以继续受益于最新的 WebKit 改进。
浏览器版本
- Chromium 136.0.7103.25
- Mozilla Firefox 137.0
- WebKit 18.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 135
- Microsoft Edge 135
版本 1.51
亮点
-
新选项 indexed_db 用于 browser_context.storage_state(),允许保存和恢复 IndexedDB 内容。当您的应用程序使用 IndexedDB API 存储身份验证令牌(例如 Firebase Authentication)时非常有用。
这里有一个遵循身份验证指南的示例
# Save storage state into the file. Make sure to include IndexedDB.
storage = await context.storage_state(path="state.json", indexed_db=True)
# Create a new context with the saved storage state.
context = await browser.new_context(storage_state="state.json") -
新选项 visible 用于 locator.filter(),允许仅匹配可见元素。
# Ignore invisible todo items.
todo_items = page.get_by_test_id("todo-item").filter(visible=True)
# Check there are exactly 3 visible ones.
await expect(todo_items).to_have_count(3) -
新选项
contrast
用于方法 page.emulate_media() 和 browser.new_context(),允许模拟prefers-contrast
媒体特性。 -
新选项 fail_on_status_code 使通过 APIRequestContext 发出的所有 fetch 请求在响应码不是 2xx 和 3xx 时抛出错误。
浏览器版本
- Chromium 134.0.6998.35
- Mozilla Firefox 135.0
- WebKit 18.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 133
- Microsoft Edge 133
版本 1.50
异步 Pytest 插件
杂项
- 添加方法 expect(locator).to_have_accessible_error_message(),用于断言 Locator 指向的元素具有给定的aria errormessage。
UI 更新
- Codegen 中新增用于选择元素以生成 aria 快照的按钮。
- 跟踪中现在会在操作 API 调用旁显示附加详细信息(例如按下的键)。
- 跟踪中显示
canvas
内容容易出错。现在默认禁用显示,可以通过Display canvas content
UI 设置启用。 Call
和Network
面板现在显示附加的时间信息。
重大变更
- expect(locator).to_be_editable() 和 locator.is_editable() 现在,如果目标元素不是
<input>
、<select>
或其他一些可编辑元素,则会抛出错误。
浏览器版本
- Chromium 133.0.6943.16
- Mozilla Firefox 134.0
- WebKit 18.2
此版本也针对以下稳定通道进行了测试
- Google Chrome 132
- Microsoft Edge 132
版本 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.group() 允许您在跟踪查看器中对操作进行可视化分组。
# 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()
重大变更:chrome
和 msedge
通道切换到新的无头模式
如果您在 playwright.config.ts
中使用以下通道之一,此变更会影响您:
chrome
,chrome-dev
,chrome-beta
, 或chrome-canary
msedge
,msedge-dev
,msedge-beta
, 或msedge-canary
更新到 Playwright v1.49 后,运行您的测试套件。如果它仍然通过,您就可以正常使用了。否则,您可能需要更新您的快照,并调整一些与 PDF 查看器和扩展程序相关的测试代码。有关更多详细信息,请参阅问题 #33566。
尝试新的 Chromium 无头模式
您可以通过使用 'chromium'
通道来选择启用新的无头模式。正如官方 Chrome 文档所述
另一方面,新无头模式是真实的 Chrome 浏览器,因此更真实、更可靠,并提供更多功能。这使其更适合高精度的端到端 Web 应用测试或浏览器扩展测试。
有关您可能遇到的潜在重大变更列表和 Chromium 无头模式的更多详细信息,请参阅问题 #33566。如果您选择启用后发现任何问题,请提交问题。
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() 等路由方法调用不再在报告和跟踪查看器中显示。您可以在网络选项卡中查看哪些网络请求已被路由。
- 网络选项卡中新增用于请求的“复制为 cURL”和“复制为 fetch”按钮。
杂项
- 新方法 page.request_gc() 可能有助于检测内存泄漏。
- 由 APIRequestContext 发出的请求现在在 HAR 中记录详细的时间和安全信息。
浏览器版本
- Chromium 130.0.6723.19
- Mozilla Firefox 130.0
- WebKit 18.0
此版本也针对以下稳定通道进行了测试
- Google Chrome 129
- Microsoft Edge 129
版本 1.47
网络选项卡改进
跟踪查看器中的网络选项卡有几项不错的改进
- 按资产类型和 URL 过滤
- 更好地显示查询字符串参数
- 字体资产预览
杂项
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
标签不再发布。请固定到特定版本以获得更好的稳定性和可重现性。 - 通过将 client_certificates.cert 和 client_certificates.key 作为字节而不是文件路径传递,TLS 客户端证书现在可以从内存中传递。
- no_wait_after 在 locator.select_option() 中已弃用。
- 我们收到关于 Webkit 中 WebGL 在 GitHub Actions
macos-13
上行为异常的报告。我们建议将 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",
}
],
)
跟踪查看器更新
- 文本附件的内容现在在附件面板中内联渲染。
- 新增用于显示/隐藏 route.continue_() 等路由操作的设置。
- 网络详细信息选项卡中显示请求方法和状态。
- 新增将源文件位置复制到剪贴板的按钮。
- 元数据面板现在显示
base_url
。
杂项
- 新选项
maxRetries
在 api_request_context.fetch() 中,在遇到ECONNRESET
网络错误时进行重试。
浏览器版本
- 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("http://localhost: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") -
新属性
httpCredentials.send
在 api_request.new_context() 中,允许始终发送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
无障碍断言
-
expect(locator).to_have_accessible_name() 检查元素是否具有指定的无障碍名称
locator = page.get_by_role("button")
expect(locator).to_have_accessible_name("Submit") -
expect(locator).to_have_accessible_description() 检查元素是否具有指定的无障碍描述
locator = page.get_by_role("button")
expect(locator).to_have_accessible_description("Upload a photo") -
expect(locator).to_have_role() 检查元素是否具有指定的 ARIA 角色
locator = page.get_by_test_id("save-button")
expect(locator).to_have_role("button")
定位器处理程序
- 执行通过 page.add_locator_handler() 添加的处理程序后,Playwright 现在将等待触发处理程序的覆盖层不再可见。您可以使用新的
no_wait_after
选项来选择停用此行为。 - 您可以在 page.add_locator_handler() 中使用新的
times
选项来指定处理程序应该运行的最大次数。 - page.add_locator_handler() 中的处理程序现在接受定位器作为参数。
- 新增 page.remove_locator_handler() 方法,用于移除之前添加的定位器处理程序。
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)
杂项选项
- expect(page).to_have_url() 现在支持
ignore_case
选项。
浏览器版本
- 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_frame 将 Locator 对象转换为 FrameLocator。当您在某处获得了 Locator 对象,并且之后想与框架内的内容交互时,此方法会很有用。
locator = page.locator("iframe[name='embedded']")
# ...
frame_locator = locator.content_frame
frame_locator.getByRole("button").click() -
新方法 frame_locator.owner 将 FrameLocator 对象转换为 Locator。当您在某处获得了 FrameLocator 对象,并且之后想与
iframe
元素交互时,此方法会很有用。frame_locator = page.frame_locator("iframe[name='embedded']")
# ...
locator = frame_locator.owner
expect(locator).to_be_visible() -
现在为 macOS-arm64 和 Linux-arm64 发布 Conda 构建。
浏览器版本
- 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
- page.pdf() 接受两个新选项 tagged 和 outline。
公告
- ⚠️ 不再支持 Ubuntu 18。
浏览器版本
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 122
- Microsoft Edge 123
版本 1.41
新 API
- 新方法 page.unroute_all() 移除由 page.route() 和 page.route_from_har() 注册的所有路由。可以选择等待正在进行的路由完成,或忽略它们的任何错误。
- 新方法 browser_context.unroute_all() 移除由 browser_context.route() 和 browser_context.route_from_har() 注册的所有路由。可以选择等待正在进行的路由完成,或忽略它们的任何错误。
- 新选项 style 在 page.screenshot() 中,以及 style 在 locator.screenshot() 中,用于在截图前为页面添加自定义 CSS。
浏览器版本
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 120
- Microsoft Edge 120
版本 1.40
测试生成器更新
生成断言的新工具
- “断言可见性”工具生成 expect(locator).to_be_visible()。
- “断言值”工具生成 expect(locator).to_have_value()。
- “断言文本”工具生成 expect(locator).to_contain_text()。
这是一个包含断言的生成测试示例
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
- 选项 reason 在 page.close() 中,reason 在 browser_context.close() 中,以及 reason 在 browser.close() 中。关闭原因会报告给所有因关闭而中断的操作。
- 选项 firefox_user_prefs 在 browser_type.launch_persistent_context() 中。
其他变更
- 方法 download.path() 对失败和取消的下载抛出错误。
浏览器版本
- 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
跟踪查看器更新
- 缩放时间范围。
- 网络面板重新设计。
新 API
弃用
- 以下方法已弃用:page.type()、frame.type()、locator.type() 和 element_handle.type()。请改用 locator.fill(),它要快得多。仅当页面上有特殊的键盘处理,并且需要逐个按键时才使用 locator.press_sequentially()。
浏览器版本
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
此版本也针对以下稳定通道进行了测试
- Google Chrome 116
- Microsoft Edge 116
版本 1.37
亮点
- 新的 --full-page-screenshot 命令行标志允许在失败时截取整页截图。
- 现在可以使用 browser_context_args 标记为单个测试覆盖上下文选项。
pytest-playwright
现在也在Anaconda 上发布。
📚 Debian 12 Bookworm 支持
Playwright 现在支持 Debian 12 Bookworm 的 x86_64 和 arm64 架构上的 Chromium、Firefox 和 WebKit。如果您遇到任何问题,请告诉我们!
Linux 支持情况如下
Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 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
亮点
-
新选项
mask_color
用于方法 page.screenshot() 和 locator.screenshot(),用于更改默认遮罩颜色。 -
新
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
亮点
-
新增 locator.and_(),用于创建一个匹配两个定位器的定位器。
button = page.get_by_role("button").and_(page.get_by_title("Subscribe"))
-
新增事件 browser_context.on("console") 和 browser_context.on("dialog"),用于订阅给定浏览器上下文任何页面中的任何对话框和控制台消息。使用新方法 console_message.page 和 dialog.page 来精确定位事件源。
浏览器版本
- 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() -
使用 has_not 和 has_not_text 新选项在 locator.filter() 中查找不匹配特定条件的元素。
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 优先断言 expect(locator).to_be_attached() 来确保元素存在于页面的 DOM 中。不要与 expect(locator).to_be_visible() 混淆,后者确保元素既已附加且可见。
新 API
- locator.or_()
- 新选项 has_not 在 locator.filter() 中
- 新选项 has_not_text 在 locator.filter() 中
- expect(locator).to_be_attached()
- 新选项 timeout 在 route.fetch() 中
⚠️ 重大变更
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
- 自定义 expect 消息,请参阅测试断言文档。
update_mode
和update_content
的新选项位于 page.route_from_har() 和 browser_context.route_from_har() 中。- 链接现有 locator 对象,详情请参阅locator 文档。
- 方法 tracing.start_chunk() 中的新选项
name
。
浏览器版本
- 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() 确保 locator 指向的元素根据交叉观察器 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)
杂项
- trace viewer 中的 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</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>element.select_option("Red")
杂项
- 方法 route.continue_() 中的选项
postData
现在支持可序列化的值。
浏览器版本
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 108
- Microsoft Edge 108
版本 1.28
Playwright 工具
- CodeGen 中的实时 Locators。 使用“Explore”工具为页面上的任何元素生成一个 locator。
新 API
浏览器版本
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
此版本也针对以下稳定通道进行了测试
- Google Chrome 107
- Microsoft Edge 107
版本 1.27
Locators
使用这些新 API,编写 locators 变得愉快
- page.get_by_text() 按文本内容定位。
- page.get_by_role() 按 ARIA role、ARIA attributes 和 accessible name 定位。
- page.get_by_label() 按关联标签的文本定位表单控件。
- page.get_by_test_id() 根据元素的
data-testid
属性(可配置其他属性)定位元素。 - page.get_by_placeholder() 按占位符定位输入框。
- page.get_by_alt_text() 按其文本替代内容定位元素,通常是图片。
- page.get_by_title() 按其标题定位元素。
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()
所有相同的方法也适用于 Locator、FrameLocator 和 Frame 类。
其他亮点
- 如 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
断言
- expect(locator).to_be_enabled() 的新选项
enabled
。 - expect(locator).to_have_text() 现在可以穿透开放的 shadow roots。
- expect(locator).to_be_editable() 的新选项
editable
。 - expect(locator).to_be_visible() 的新选项
visible
。
其他亮点
- 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
事件。
为了与网络规范保持一致,'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 现在支持 x86_64 上的 Debian 11 Bullseye,支持 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()
context = await browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
await context.close()
使用新方法 page.route_from_har() 或 browser_context.route_from_har() 从 HAR 文件中提供匹配的响应
- 同步
- 异步
context.route_from_har("github.har.zip")
await 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)
# 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() 和 browser_context.route_from_har() 也参与路由并且可以延迟到。
Web-First 断言更新
- 新方法 expect(locator).to_have_values() 断言
<select multiple>
元素的所有选中值。 - 方法 expect(locator).to_contain_text() 和 expect(locator).to_have_text() 现在接受
ignore_case
选项。
杂项
-
如果 service worker 妨碍了您,现在可以使用新的 context 选项
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
context 选项使用.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 选择器允许根据元素的 ARIA role、ARIA attributes 和 accessible name 选择元素。
# Click a button with accessible name "log in"
page.locator("role=button[name='log in']").click()在我们的文档中阅读更多信息。
-
新的 locator.filter() API 用于过滤现有 locator
buttons = page.locator("role=button")
# ...
submit_button = buttons.filter(has_text="Submit")
submit_button.click() -
Codegen 现在支持生成 Pytest 测试
版本 1.21
亮点
-
新的 role 选择器允许根据元素的 ARIA role、ARIA attributes 和 accessible name 选择元素。
- 同步
- 异步
# Click a button with accessible name "log in"
page.locator("role=button[name='log in']").click()# Click a button with accessible name "log in"
await 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
亮点
- 方法 page.screenshot()、locator.screenshot() 和 element_handle.screenshot() 的新选项
- 选项
animations: "disabled"
将所有 CSS 动画和过渡重置到一致状态 - 选项
mask: Locator[]
遮罩给定元素,并用粉色#FF00FF
方框覆盖它们。
- 选项
- Trace Viewer 现在显示 API testing 请求。
- locator.highlight() 视觉上高亮显示元素以便更轻松地调试。
公告
- 我们现在发布一个专门的 Python docker 镜像
mcr.microsoft.com/playwright/python
。如果您使用 Python,请切换到它。这是最后一个在我们的 javascriptmcr.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() 和 locator.screenshot() 现在自动隐藏闪烁的插入符
-
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 现在都可以选择性地按其包含的文本进行过滤
- 同步
- 异步
page.locator("li", has_text="my item").locator("button").click()
await page.locator("li", has_text="my item").locator("button").click()
在locator 文档中阅读更多信息
新 API 和变更
accept_downloads
选项现在默认为True
。sources
选项将源文件嵌入到 traces 中。
浏览器版本
- 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 的 locator。Frame locators 捕获了足够的逻辑来检索 iframe
,然后在该 iframe 中定位元素。Frame locators 默认是严格的,将等待 iframe
出现,并且可以在 Web-First 断言中使用。
可以使用 page.frame_locator() 或 locator.frame_locator() 方法创建 Frame locators。
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 是一个在本地处理 traces 的渐进式 Web 应用程序。
- Playwright 测试 traces 现在默认包含源文件(可以通过 tracing 选项关闭)
- Trace Viewer 现在显示测试名称
- 新的 trace 元数据选项卡,包含浏览器详细信息
- 快照现在有 URL 栏
HTML 报告更新
- HTML 报告现在支持动态过滤
- 报告现在是单个静态 HTML 文件,可以通过电子邮件或作为 slack 附件发送。
支持 Ubuntu ARM64 + 更多
-
Playwright 现在支持 Ubuntu 20.04 ARM64。现在可以在 Apple M1 和 Raspberry Pi 上的 Docker 中运行 Playwright 测试。
-
现在可以使用 Playwright 在 Linux 上安装稳定版本的 Edge
npx playwright install msedge
新 API
版本 1.16
🎭 Playwright 库
locator.wait_for
等待 locator 解析为具有给定状态的单个元素。默认为 state: 'visible'
。
在处理列表时特别方便
order_sent = page.locator("#order-sent")
order_sent.wait_for()
阅读更多关于 locator.wait_for() 的信息。
支持 Arm64 的 Docker
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
🖱️ 鼠标滚轮
通过使用 mouse.wheel(),您现在可以垂直或水平滚动。
📜 新的 Headers API
以前无法获取响应的多个 header 值。现在可以了,并且提供了额外的辅助函数
- request.all_headers()
- request.headers_array()
- request.header_value()
- response.all_headers()
- response.headers_array()
- response.header_value()
- response.header_values()
🌈 Forced-Colors 模拟
现在可以通过在 browser.new_context() 中传递或调用 page.emulate_media() 来模拟 forced-colors
CSS media 特性。
新 API
- page.route() 接受新的
times
选项来指定此路由应该匹配的次数。 - 引入了 page.set_checked() 和 locator.set_checked() 来设置复选框的选中状态。
- request.sizes() 返回给定 http 请求的资源大小信息。
- tracing.start_chunk() - 开始新的 trace chunk。
- tracing.stop_chunk() - 停止新的 trace chunk。
浏览器版本
- 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 表示页面上元素(或多个元素)的视图。它捕获了在任何给定时刻检索元素的足够逻辑。
Locator 和 ElementHandle 的区别在于后者指向一个特定的元素,而 Locator 捕获了如何检索该元素的逻辑。
此外,locators 默认是“strict”的!
locator = page.locator("button")
locator.click()
在文档中了解更多信息。
🧩 实验性的 React 和 Vue 选择器引擎
React 和 Vue 选择器允许根据元素的组件名称和/或属性值选择元素。语法与属性选择器非常相似,并支持所有属性选择器运算符。
page.locator("_react=SubmitButton[enabled=true]").click()
page.locator("_vue=submit-button[enabled=true]").click()
在react 选择器文档和vue 选择器文档中了解更多信息。
✨ 新的 nth
和 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
WebKit 14.2
版本 1.13
- Playwright
- 🖖 程序化拖放支持通过 page.drag_and_drop() API 实现。
🔎 增强的 HAR 包含请求和响应的主体大小。通过在 browser.new_context() 中使用 recordHar
选项来实现。
- 工具
Playwright Trace Viewer 现在显示参数、返回值和 console.log()
调用。
Chrome 扩展
- 浏览器版本
- 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 = 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")
跟踪使用新的 browser_context.tracing API 记录
playwright show-trace trace.zip
跟踪稍后使用 Playwright CLI 进行检查
这将打开以下 GUI
👉 在跟踪查看器文档中阅读更多内容。
- 浏览器版本
- Chromium 93.0.4530.0
- Mozilla Firefox 90.0
此版本的 Playwright 也已针对以下稳定通道进行了测试
- Mozilla Firefox 89.0
- Google Chrome 91
Microsoft Edge 91
- 新的 API
- 在 page.emulate_media()、browser_type.launch_persistent_context()、browser.new_context() 和 browser.new_page() 中新增
reducedMotion
选项 - browser_context.on("request")
- browser_context.on("requestfailed")
- browser_context.on("requestfinished")
- browser_context.on("response")
- 在 browser_type.launch() 和 browser_type.launch_persistent_context() 中新增
tracesDir
选项 - 新增 browser_context.tracing API 命名空间
新增 download.page 方法
版本 1.11
- 🎥 新视频:Playwright: A New Test Automation Framework for the Modern Web (幻灯片)
- 我们讨论了 Playwright
- 展示了幕后的工程工作
- 进行了新功能的现场演示 ✨
特别感谢 applitools 主办活动并邀请我们!
- 浏览器版本
- Chromium 92.0.4498.0
- Mozilla Firefox 90.0
Mozilla Firefox 89.0b6
- 新的 API
- 在 page.expect_request() 等方法中支持跨 API 的异步谓词
- 新增模拟设备:Galaxy S8, Galaxy S9+, Galaxy Tab S4, Pixel 3, Pixel 4
- 新增方法
- page.wait_for_url() 等待导航到 URL
- video.delete() 和 video.save_as() 管理屏幕录制
- 新增选项
- 在 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
- Playwright for Java v1.10 现已稳定!
- 使用新的 channels API 运行 Playwright 针对 Google Chrome 和 Microsoft Edge 稳定频道进行测试。
Chromium 截图在 Mac & Windows 上速度更快。
- 捆绑的浏览器版本
- Chromium 90.0.4430.0
- Mozilla Firefox 90.0
此版本的 Playwright 也已针对以下稳定通道进行了测试
- Mozilla Firefox 87.0b10
- Google Chrome 89
Microsoft Edge 89
- 新的 API
browser_type.launch() 现在接受新的 'channel'
选项。在我们的文档中阅读更多内容。
- 版本 1.9
- Playwright Inspector 是一个新的 GUI 工具,用于编写和调试你的测试。
- 对你的 Playwright 脚本进行逐行调试,支持播放、暂停和单步执行。
- 通过录制用户操作来编写新脚本。
- 通过悬停元素来为你的脚本生成元素选择器。
- 设置环境变量
PWDEBUG=1
启动 Inspector - 在 headed 模式下使用 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
page.pause()
-
版本 1.8
-
使用
:left-of()
、:right-of()
、:above()
和:below()
基于布局选择元素。playwright --help
-
Playwright 现在包含命令行界面,即之前的 playwright-cli。
-
page.select_option() 现在会等待选项出现。
新增方法来断言元素状态,例如 page.is_editable()。
- 新的 API.
- element_handle.is_checked().
- element_handle.is_disabled().
- element_handle.is_editable().
- element_handle.is_enabled().
- element_handle.is_hidden().
- element_handle.is_visible().
- page.is_checked().
- page.is_disabled().
- page.is_editable().
- page.is_enabled().
- page.is_hidden().
- page.is_visible()
在 element_handle.wait_for_element_state() 中新增选项 'editable'
。
- 浏览器版本
- Chromium 90.0.4392.0
- Mozilla Firefox 86.0b10
Mozilla Firefox 85.0b5
- 版本 1.7
- 新的 Java SDK:Playwright for Java 现在与 JavaScript、Python 和 .NET 绑定同步。
- 浏览器存储 API:新增方便的 API 来保存和加载浏览器存储状态(cookies、本地存储),以简化需要认证的自动化场景。
- 新的 CSS 选择器:我们听取了关于更灵活选择器的反馈,并改进了选择器实现。Playwright 1.7 引入了新的 CSS 扩展,更多内容即将推出。
- 新的网站:playwright.dev 上的文档网站已更新,现在使用 Docusaurus 构建。
支持 Apple Silicon:Playwright 浏览器二进制文件(WebKit 和 Chromium)现在针对 Apple Silicon 构建。
- 新的 API
- browser_context.storage_state() 获取当前状态以便后续重用。
在 browser.new_context() 和 browser.new_page() 中新增 storageState
选项,用于设置浏览器上下文状态。
- 浏览器版本
- Chromium 89.0.4344.0
- Mozilla Firefox 86.0b10