当前位置: 首页 > news >正文

自动化测试工具playwright中文文档-------18.模拟

简介

使用 Playwright,您可以在任何浏览器上测试您的应用程序,并模拟真实的设备,如手机或平板电脑。您只需配置想要模拟的设备,Playwright 就会模拟浏览器的行为,如“userAgent”(用户代理)、“screenSize”(屏幕尺寸)、“viewport”(视口)以及是否启用“hasTouch”(触摸功能)。此外,您还可以为所有测试或特定测试模拟“geolocation”(地理位置)、“locale”(区域设置)和“timezone”(时区),并设置“permissions”(权限)以显示通知或更改“colorScheme”(颜色方案)。

设备

Playwright 提供了一个设备参数注册表registry of device parameters,使用  playwright.devices来选择桌面、平板和移动设备。这可以用于模拟特定设备的浏览器行为,如用户代理(user agent)、屏幕尺寸(screen size)、视口(viewport)以及是否启用触摸功能(touch enabled)。所有测试都将使用指定的设备参数运行。

以下是一个使用 Playwright 同步 API 的示例代码,展示了如何模拟 iPhone 13 设备:

from playwright.sync_api import sync_playwright, Playwright  def run(playwright: Playwright):  # 从 Playwright 设备注册表中获取 iPhone 13 的参数  iphone_13 = playwright.devices['iPhone 13']  # 启动无头模式的 WebKit 浏览器(这里设置为非无头模式以便观察)  browser = playwright.webkit.launch(headless=False)  # 创建一个新的浏览器上下文,应用 iPhone 13 的设备参数  context = browser.new_context(**iphone_13)  # 使用 sync_playwright 上下文管理器启动 Playwright 并运行测试  
with sync_playwright() as playwright:  run(playwright)

首先导入了必要的 Playwright 同步 API 模块。然后,定义了一个 run 函数,该函数接受一个 Playwright 实例作为参数。在函数内部,我们从 playwright.devices 字典中获取了 iPhone 13 的设备参数,并使用这些参数启动了一个 WebKit 浏览器实例(这里设置为非无头模式以便我们可以观察到浏览器行为)。接着,我们基于这些设备参数创建了一个新的浏览器上下文。最后,我们使用 sync_playwright 上下文管理器来启动 Playwright 并调用 run 函数执行测试。

 视口(Viewport)

视口是设备参数的一部分,但您可以在某些测试中通过  page.set_viewport_size()方法来覆盖它。

测试文件中的使用

在测试文件中,您也可以进行相同的操作。

# 使用给定的视口大小创建上下文  
context = browser.new_context(  viewport={ 'width': 1280, 'height': 1024 }  
)  # 为单个页面调整视口大小  
page = context.new_page()  # 假设您已经创建了一个页面实例  
page.set_viewport_size({"width": 1600, "height": 1200})  # 模拟高分辨率DPI   
context_high_dpi = browser.new_context(  viewport={ 'width': 2560, 'height': 1440 },  device_scale_factor=2,  # 设备缩放因子用于模拟高分辨率屏幕  
)

isMobile

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

context = browser.new_context(isMobile=false
)

地区设置(Locale)与时区(Timezone)

模拟用户的地区设置和时区,这些设置可以在配置中全局地为所有测试设置,然后针对特定测试进行覆盖。

context = browser.new_context(  locale='de-DE',  timezone_id='Europe/Berlin',  
)
  • locale='de-DE':指定了地区设置为德语(德国)。地区设置影响日期、时间、货币、数字等的格式和显示方式,以确保它们符合特定地区的习惯和标准。

  • timezone_id='Europe/Berlin':指定了时区为欧洲/柏林。时区设置决定了时间的计算和显示方式,以匹配用户所在的地理位置。

权限(Permissions) 

允许应用显示系统通知。

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

特定域名允许通知

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

撤销所有权限

context.clear_permissions()

地理位置(Geolocation)

授予“地理位置”权限并将地理位置设置为特定区域

context = browser.new_context(  geolocation={"longitude": 41.890221, "latitude": 12.492348},  permissions=["geolocation"]  
)

这行代码创建了一个新的浏览器上下文(context),并同时设置了两个关键参数:

  1. 地理位置(Geolocation):通过 geolocation 参数,您指定了一个具体的地理位置,这里使用了经纬度坐标(经度:41.890221,纬度:12.492348)。这意味着在此上下文中加载的网页或应用将能够访问这个预设的地理位置信息,而不是用户的实际位置。这对于测试那些依赖于地理位置信息的功能非常有用。

  2. 权限(Permissions):通过 permissions 参数,您指定了一个权限列表,其中包含了 "geolocation"。这表示您请求为当前上下文中的网页或应用授予地理位置权限。这样,即使网页或应用请求访问用户的地理位置信息,它也会接收到预设的位置信息,而不是触发浏览器的权限请求对话框。

稍后更改位置: 

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

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

这行代码表示在已经创建的浏览器上下文(context)中,您可以通过调用 set_geolocation() 方法来更改当前设置的地理位置。

颜色方案和媒体类型

模拟用户的“颜色方案”。支持的值有 'light'(浅色模式)、'dark'(深色模式)和 'no-preference'(无偏好)。您还可以使用  page.emulate_media()方法来模拟媒体类型。

#创建深色模式的上下文
context = browser.new_context(  color_scheme='dark'  # 或者 'light'  
)# 创建深色模式的页面
page = browser.new_page(  color_scheme='dark'  # 或者 'light'  
)#更改页面的颜色方案
page.emulate_media(color_scheme='dark')#更改页面的媒体类型
page.emulate_media(media='print')

用户代理(User Agent) 

用户代理是设备的一部分,因此您很少需要更改它。但是,如果您确实需要测试不同的用户代理,您可以使用 userAgent 属性来覆盖它。

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

代码创建了一个新的浏览器上下文,并通过 user_agent 参数设置了一个自定义的用户代理字符串 'My user agent'。这样,在该上下文中加载的所有页面都将使用这个自定义的用户代理字符串来向服务器标识它们自己。

离线模式

模拟网络连接处于离线状态。

context = browser.new_context(  offline=True  
)

代码创建了一个新的浏览器上下文,并通过设置 offline=True 参数来模拟网络连接处于离线状态。在这个上下文中加载的任何页面或应用都将无法访问网络资源,因为它们会被视为处于离线状态。这对于测试网站或应用在离线时的行为非常有用,比如检查缓存策略、本地存储的使用情况或离线页面的展示效果。

禁用JavaScript

模拟用户场景中禁用JavaScript的情况。

context = browser.new_context(  java_script_enabled=False  
)

代码创建了一个新的浏览器上下文,并通过设置 javascript_enabled=False 参数来禁用JavaScript。在这个上下文中加载的任何页面或应用都将无法执行JavaScript代码,这模拟了用户禁用JavaScript的场景。这对于测试网站或应用在JavaScript被禁用时的行为非常有用,比如检查网站是否仍然提供基本功能或是否优雅地降级。

相关文章:

  • 解决el-cascader组件下拉选项过长,数据回显无法换行显示的问题
  • 【计算机网络】第3章:传输层—TCP 拥塞控制
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 容器(Container)语法知识点及案例代码详解(4)
  • matlab模糊控制实现路径规划
  • haribote原型系统改进方向
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
  • 通光散基因组-文献精读139
  • Mask篇 (含引导层、不规则遮罩)
  • 2025 Vscode插件离线下载方式
  • sql入门语句-案例
  • 【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)
  • 网络编程之网络基础
  • C++ 新特性详解:Lambda 表达式全解析(含实战案例)
  • 概念全解析:结构化数据,半结构化数据,非结构化数据分别是什么意思?
  • 软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
  • http协议,get,post两种请求方式
  • STM32学习之看门狗(理论篇)
  • 使用ArcPy进行栅格数据分析
  • Linux——TCP和UDP
  • 郑州网站建设多少钱/网上推广培训
  • 彩票做网站犯法吗/网站一年了百度不收录
  • 徐州好点的做网站的公司有哪些/一键seo提交收录
  • 做电商网站用什么语言/深圳龙岗区优化防控措施
  • 上海沪港建设咨询有限公司网站/惠州优化怎么做seo
  • 客服电话/网店seo名词解释