跳到主要内容

模拟

介绍

使用 Playwright,您可以在任何浏览器上测试您的应用程序,也可以模拟真实设备(如手机或平板电脑)。只需配置您想要模拟的设备,Playwright 就会模拟浏览器行为,例如 "userAgent"、"screenSize"、"viewport" 以及是否启用 "hasTouch"。您还可以为所有测试或特定测试模拟 "geolocation"、"locale" 和 "timezone",以及设置显示通知的 "permissions" 或更改 "colorScheme"。

设备

Playwright 提供了一个设备参数注册表,通过 playwright.devices 为选定的桌面设备、平板电脑和移动设备提供支持。它可以用来模拟特定设备的浏览器行为,如用户代理、屏幕尺寸、视口以及是否启用触摸功能。所有测试都将使用指定的设备参数运行。

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
iphone_13 = playwright.devices['iPhone 13']
browser = playwright.webkit.launch(headless=False)
context = browser.new_context(
**iphone_13,
)

with sync_playwright() as playwright:
run(playwright)
在 iPhone 13 上模拟 playwright.dev 网站

视口

视口包含在设备中,但您可以使用 page.set_viewport_size() 为某些测试进行覆盖。

测试文件:

同样的方法也适用于测试文件中。

# 创建具有给定视口的上下文
context = browser.new_context(
viewport={ 'width': 1280, 'height': 1024 }
)

# 调整单个页面的视口大小
page.set_viewport_size({"width": 1600, "height": 1200})

# 模拟高 DPI
context = browser.new_context(
viewport={ 'width': 2560, 'height': 1440 },
device_scale_factor=2,
)

isMobile

是否考虑 meta viewport 标签并启用触摸事件。

context = browser.new_context(
isMobile=false
)

语言环境 & 时区

模拟浏览器的语言环境和时区,可以在配置中为所有测试设置,然后为特定测试进行覆盖。

context = browser.new_context(
locale='de-DE',
timezone_id='Europe/Berlin',
)
Bing 使用德语语言和时区

权限

允许应用显示系统通知。

context = browser.new_context(
permissions=['notifications'],
)

允许特定域的通知。

context.grant_permissions(['notifications'], origin='https://skype.com')

使用 browser_context.clear_permissions() 撤销所有权限。

context.clear_permissions()

地理位置

授予 "geolocation" 权限并将地理位置设置为特定区域。

context = browser.new_context(
geolocation={"longitude": 41.890221, "latitude": 12.492348},
permissions=["geolocation"]
)
在 Bing 地图上查看意大利的地理位置

之后更改位置:

context.set_geolocation({"longitude": 48.858455, "latitude": 2.294474})

注意 您只能为上下文中的所有页面更改地理位置。

颜色方案和媒体

模拟用户的 "colorScheme"。支持的值为 'light' 和 'dark'。您还可以使用 page.emulate_media() 模拟媒体类型。

# 创建带有暗色模式的上下文
context = browser.new_context(
color_scheme='dark' # or 'light'
)

# 创建带有暗色模式的页面
page = browser.new_page(
color_scheme='dark' # or 'light'
)

# 更改页面的颜色方案
page.emulate_media(color_scheme='dark')

# 更改页面的媒体类型
page.emulate_media(media='print')
以暗色模式查看 playwright 网站

用户代理

用户代理包含在设备中,因此您很少需要更改它。但是如果您需要测试不同的用户代理,可以使用 user_agent 属性进行覆盖。

context = browser.new_context(
user_agent='My user agent'
)

离线

模拟网络离线状态。

context = browser.new_context(
offline=True
)

JavaScript 已禁用

模拟用户场景,其中 JavaScript 被禁用。

context = browser.new_context(
java_script_enabled=False
)