Playwright——快速入门(初章)

Playwright:引领自动化测试的未来

在数字化时代,Web应用的复杂性和用户期望的提高对软件测试提出了更高的要求。微软开发的Playwright,作为一个创新的自动化测试框架,正以其卓越的性能和全面的浏览器支持,重新定义Web自动化测试的标准。

什么是Playwright?

Playwright是一个跨浏览器、跨平台、跨语言的自动化测试工具,它支持Chromium、WebKit和Firefox等主流浏览器,能够在Windows、Linux和macOS上运行。Playwright以其简洁的API和强大的功能,允许开发者在不同的浏览器和平台上进行一致的自动化测试。

Playwright的核心优势

  • 跨浏览器测试:Playwright支持所有现代渲染引擎,这意味着开发者可以在一个统一的框架下,对不同浏览器进行测试,无需为每个浏览器编写特定的测试代码。
  • 高性能与异步执行:与传统的Selenium相比,Playwright基于异步实现,提供了更快的测试执行速度和更流畅的用户体验。
  • 无需浏览器驱动:Playwright内置了对浏览器的支持,无需额外下载和配置浏览器驱动,简化了测试环境的搭建过程。
  • 自动等待机制:Playwright智能地等待元素可操作后再执行操作,减少了因元素未加载完成而导致的测试失败。
  • 丰富的API和调试工具:Playwright提供了全面的API支持,包括页面导航、元素交互、表单提交和网络请求等,同时配备了强大的调试工具,如代码生成器、Playwright
    Inspector和跟踪查看器,帮助开发者高效地编写和调试测试脚本。
  • 完全隔离的测试环境:每个测试都在独立的浏览器上下文中运行,确保了测试之间的完全隔离,同时支持保存和重用身份验证状态,提高了测试的效率和准确性。

Playwright的应用场景

Playwright的应用场景非常广泛,包括但不限于:

  • 跨浏览器测试:确保应用在不同浏览器上的一致性。
  • 自动化测试:与测试框架如Jest、Mocha集成,实现持续集成和自动化测试。
  • 端到端测试:验证关键用户流程,确保系统的整体质量。
  • 性能测试:分析网页在不同浏览器下的性能,查找性能瓶颈。
  • 移动端测试:在真实移动设备上运行测试,支持Android和iOS设备。

安装 playwright 客户端库

输入以下代码:

pip install playwright

显示以下安装过程:

Collecting playwrightDownloading playwright-1.39.0-py3-none-win_amd64.whl (29.2 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 29.2/29.2 MB 238.5 kB/s eta 0:00:00
Collecting greenlet==3.0.0 (from playwright)Downloading greenlet-3.0.0-cp311-cp311-win_amd64.whl (288 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 288.2/288.2 kB 378.1 kB/s eta 0:00:00
Collecting pyee==11.0.1 (from playwright)Downloading pyee-11.0.1-py3-none-any.whl (15 kB)
Collecting typing-extensions (from pyee==11.0.1->playwright)Downloading typing_extensions-4.8.0-py3-none-any.whl (31 kB)
Installing collected packages: typing-extensions, greenlet, pyee, playwrightSuccessfully installed greenlet-3.0.0 playwright-1.39.0 pyee-11.0.1 typing-extensions-4.8.0

安装playwright浏览器

playwright 项目默认使用自己编译好的几种浏览器,比如 chromium, firefox, webkit,这些浏览器是通过开源项目编译的。
安装代码如下:

playwright install

简单示例

from playwright.sync_api import sync_playwrightinput('1....')
# 启动 playwright driver 进程
p = sync_playwright().start()input('2....')
# 启动浏览器,返回 Browser 类型对象
browser = p.chromium.launch(headless=False)# 创建新页面,返回 Page 类型对象
page = browser.new_page()
page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")
print(page.title()) # 打印网页标题栏# 输入通讯,点击查询。这是定位与操作,是自动化重点,后文详细讲解
page.locator('#kw').fill('通讯')  # 输入通讯
page.locator('#go').click()      # 点击查询# 打印所有搜索内容
lcs = page.locator(".result-item").all()
for lc in lcs:print(lc.inner_text())input('3....')
# 关闭浏览器
browser.close()
input('4....')
# 关闭 playwright driver 进程
p.stop()

可以选择其它浏览器:

# 启动firefox浏览器
browser = p.firefox.launch(headless=False)# 启动webkit浏览器
browser = p.webkit.launch(headless=False)

可以使用 with语句,不需要调用 start() 和 stop(),见以下代码:

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")print(page.title())page.locator('#kw').fill('通讯\n')page.locator('#go').click()# 打印所有搜索内容lcs = page.locator(".result-item").all()for lc in lcs:print(lc.inner_text())browser.close()

界面等待

上面的代码,大家发现不能打印出股票搜索的结果。
原因是:点击查询后,立即就去检查搜索结果了,这时,界面上还没有呈现结果,所以返回的是空结果,需要等待一段时间,比如2秒。

但是目前,我们不能在Playwright中使用 time.sleep 进行等待,因为Playwright底层使用的是异步的python库进行各种事件处理,time.sleep 会破坏异步框架的处理逻辑,可以使用 Page 对象的 wait_for_timeout 方法达到等待效果,单位是毫秒 。

page.wait_for_timeout(1000)

自动化代码助手

Playwright 内置了 代码助手 的功能,可以帮我们产生“自动化代码”输入如下命令,即可启动代码助手:

playwright codegen

注意:这个只能作为助手,它主要是记录人对页面的输入,并不能取代人自己写代码,特别是那些获取页面上信息的代码。
比如,打印标题栏,就没法自动化生成。

print(page.title())

还有这些,获取所有搜索内容的代码,也无法自动化生成。

# 打印所有搜索内容
lcs = page.locator(".result-item").all()
for lc in lcs:print(lc.inner_text())

跟踪功能

Playwright 有个特色功能: 跟踪(tracing)

启用跟踪功能后, 可以在执行自动化后,通过记录的跟踪数据文件, 回看自动化过程中的每个细节,下面的的代码进行了自动化搜索股票,并打开跟踪功能,保存跟踪数据文件为 trace.zip。

from playwright.sync_api import sync_playwrightp = sync_playwright().start()
browser = p.chromium.launch(headless=False)# 创建 BrowserContext对象
context = browser.new_context()
# 启动跟踪功能
context.tracing.start(snapshots=True, sources=True, screenshots=True)page = context.new_page()
page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")# 搜索名称中包含 通讯 的股票
page.locator('#kw').fill('通讯') 
page.locator('#go').click()page.wait_for_timeout(1000) # 等待1秒lcs = page.locator(".result-item").all()
for lc in lcs:print(lc.inner_text())# 搜索名称中包含 软件 的股票
page.locator('#kw').fill('软件')  
page.locator('#go').click()    page.wait_for_timeout(1000) # 等待1秒lcs = page.locator(".result-item").all()
for lc in lcs:print(lc.inner_text())# 结束跟踪
context.tracing.stop(path="trace.zip")browser.close()
p.stop()

执行完以后,我们发现,当前工作目录下面多了 trace.zip 这个跟踪数据文件。怎么查看这个跟踪文件呢?有2种方法:

  • 直接访问 trace.playwright.dev 这个网站,上传跟踪文件。

  • 执行命令 playwright show-trace trace.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469372.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试题之---解释一下原型和原型链

实例化对象 和普调函数一样,只不过调用的时候要和new连用(实例化),不然就是一个普通函数调用 function Person () {} const o1 new Person() //能得到一个空对象 const o2 Person() //什么也得不到,这就是普通的…

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况(拓展)1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…

飞凌嵌入式FET527N-C核心板现已适配Android 13

飞凌嵌入式FET527N-C核心板现已成功适配Android13,新系统的支持能够为用户提供更优质的使用体验。那么,运行Android13系统的FET527N-C核心板具有哪些突出的优势呢? 1、性能与兼容性提升 飞凌嵌入式FET527N-C核心板搭载了全志T527系列高性能处…

Java static静态变量 C语言文件读写

1. (1) public class test1 {public static void main(String[] args) {javabean1.teachername"jianjun";//直接在类调用,方便一点点javabean1 s1 new javabean1();s1.setName("liujiawei");s1.setAge(18);s1.setGend…

Linux驱动开发(4):Linux的设备模型

在前面写的驱动中,我们发现编写驱动有个固定的模式只有往里面套代码就可以了,它们之间的大致流程可以总结如下: 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号 register_chrdev_region() 初始化字符设备,cdev_init函数…

MYSQL隔离性原理——MVCC

表的隐藏字段 表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段,不理解也没有关系,理解后面的undo log就懂了: DB_TRX_ID :6 byte,最近修改( 修改/插入 )事务ID,记录创建这条记…

鸿蒙next打包流程

目录 下载团结引擎 添加开源鸿蒙打包支持 打包报错 路径问题 安装DevEcoStudio 可以在DevEcoStudio进行打包hap和app 包结构 没法直接用previewer运行 真机运行和测试需要配置签名,DevEcoStudio可以自动配置, 模拟器安装hap提示报错 安装成功,但无法打开 团结1.3版本新增工具…

计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【Vue】Vue3.0(二十)Vue 3.0 中mitt的使用示例

上篇文章 【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年11月11日12点23分 文章目录 一、mitt 在…

显示器接口种类 | 附图片

显示器接口类型主要包括VGA、DVI、HDMI、DP和USB Type-C等。 VGA、DVI、HDMI、DP和USB Type-C 1. 观察 VGA接口:15针 DP接口:在DP接口旁,都有一个“D”型的标志。 电脑主机:DP(D) 显示器:VGA(15针) Ref https://cloud.tenc…

什么是数据平台?10 个值得了解的大数据平台示例

目前尚不清楚普通的 “数据” 是何时变成了 “大数据”。后一个术语可能起源于 20 世纪 90 年代的硅谷推介会和午餐室。更容易确定的是数据在 21 世纪是如何爆炸式增长的(据估计,到 2025 年,人类每天将产生 463 EB的数据)&#xf…

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工欲善…

Local Dimming和Mini LED简介

文章目录 Local Dimming和Mini LED的介绍区别和联系联系区别总结 Local Dimming和Mini LED的介绍 电视显示技术中的Local Dimming和Mini LED都是用于提升画面质量的背光技术,主要目的是增强对比度和改善黑色表现。以下是对它们的详细介绍: Local Dimmin…

VSCode中python插件安装后无法调试

问题 VSCode中python插件安装后无法调试,如下,点击调试,VScode中不报错,也没有调试 解决方法 1、查看配置 打开所在路径 2、拷贝 将整个文件夹拷贝到vscode默认路径下 3、问题解决 再次调试,可以正常使用了…

前端知识点---选择输入框confirm(Javascript)

文章目录 1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②简单交互:主要用于简单的确认操作,不支持自定义样式或多种交互。③ 示例 3 注意事项4 常见用途 1. 基本用法 let result confi…

android studio 配置过程

Android studio版本:Android Studio Ladybug | 2024.2.1 windows 10 x64 关键问题解决方法: 1.设置代理: 退出首次配置,进入ide(必要时新建工程)然后: 然后重启ide 等待下载完成。 代理地…

[Docker#4] 镜像仓库 | 部分常用命令

目录 什么是 Docker Registry 镜像仓库生活案例 镜像仓库分类 镜像仓库工作机制 常用的镜像仓库 私有仓库 镜像仓库命令 镜像命令[部分] 容器命令[部分] 什么是 Docker Registry 定义:Docker Registry 负责存储、管理和分发镜像,并提供了登录认…

【数据结构】线性表——链表

写在前面 本篇笔记记录线性表——链表的主要形式,虽然链表有8种形式,但是只要精通笔记中编写的两种,即可触类旁通。 文章目录 写在前面一、链表的概念及结构二、链表的分类三、无头单向非循环链表3.1、链表的实现3.1.1、链表的结构体定义3.1…

android studio导入OpenCv并改造成.kts版本

1.下载opencv Android版本 2.解压导入android studio,我这里是先导入低版本的,还是gradle,直接导入module,我这里是4.2.0的版本 我的as版本是Android Studio Electric Eel 2022.1.1 Patch 2,我导入直接就能用 //load OpenCV engine and init OpenCV library //这里放在oncreat…

大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析

一、大模型开发整体流程 1. 何为大模型开发 定义核心点核心能力 2. 大模型开发的整体流程 1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析 步骤一:项目规划与需求分析 1.项目目标2.核心功能3.确定技术架构和工具 步骤二&#…