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.mzph.cn/diannao/60245.shtml

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

相关文章

ssm094学生宿舍管理+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:学生宿舍管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本学生宿舍管理系统…

机器学习——贝叶斯

🌺历史文章列表🌺 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理&#x…

232转485模块测试

概述 常用的PLC一般会有两个左右的232口,以及两个左右的485口,CAN口等,但是PLC一般控制的设备可能会有很多,会超出通讯口的数量,此时我们一般会采用一个口接多个设备,这种情况下要注意干扰等因素&#xff0…

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟(CSA)宣布推出最新的 Matter 1.4 版本,引入了一系列新的设备类型和功能增强,有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

SpringBoot实现文件上传并返回url链接

检查依赖 确保pom.xml包含了Spring Boot Web的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>创建Controller 创建公用上传文件控制器 package…

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

苍穹外卖05-Redis相关知识点

目录 什么是Redis&#xff1f; redis中的一些常用指令 value的5种常用数据类型 各种数据类型的特点 Redis中数据操作的常用命令 字符串类型常用命令&#xff1a; 哈希类型常用命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在java中操作Redis 环境…

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得,如下图所示: 这个AES加密是通用的加密方式,使用同一套算法,前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作,将加密之后的字符串再传递到后端,PHP再进行解密操作。…

【Windows erver】配置高性能电源管理

操作场景 在 Windows Server 操作系统上&#xff0c;需要配置高性能电源管理&#xff0c;才能支持实例软关机&#xff0c;否则云服务器控制台只能通过硬关机的方式关闭实例。本文档以 Windows Server 2012 操作系统为例&#xff0c;介绍配置电源管理的方法。 操作说明 修改电…

【JAVA基础】MAVEN的安装及idea的引用说明

本篇文章主要讲解&#xff0c;maven的安装及集成在idea中进行构建项目的详细操作教程。 日期&#xff1a;2024年11月11日 作者&#xff1a;任聪聪 所需材料&#xff1a; 1、idea 2024版本及以上 2、maven 3.9.9安装包 3、一个空java springBoot项目&#xff0c;可以使用阿里云…

AI变现,做数字游民

在数字化时代&#xff0c;AI技术的迅猛发展不仅改变了各行各业的生产方式&#xff0c;还为普通人提供了前所未有的变现机会。本文将探讨如何利用AI技术实现变现&#xff0c;成为一名数字游民&#xff0c;享受自由职业带来的便利与乐趣。 一、AI技术的变现潜力 AI技术以其强大…

解非线性方程

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握解非线性方程的二分法算法、牛顿迭代法&#xff0c;提高编程能力和解算非线性方程问题的实践技能。 实验内容&#xff1a;用二分法算法(取[a,b][1,2])、牛顿迭代法解算非线性…

详细分析Guava库中的注解@VisibleForTesting,用于标记提醒私有(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 从实战中学习&#xff1a; 源码如下&…

Hadoop(YARN)

文章目录 YARN基础架构YARN工作原理YARN调度器和调度算法先进先出调度器容量调度器公平调度器 YARN常用命令 YARN基础架构 YARN是Hadoop集群的资源管理和调度系统&#xff0c;它负责为各种分布式计算任务分配和管理资源,包含以下组件&#xff1a;ResourceManager&#xff0c;N…

【GoWeb示例】通过示例学习 Go 的 Web 编程

文章目录 你好世界HTTP 服务器路由&#xff08;使用 gorilla/mux&#xff09;连接到 MySQL 数据库MySQL 数据库简单操作模板静态资源和文件操作表单处理中间件&#xff08;基础&#xff09;中间件&#xff08;高级&#xff09;会话JSONWebsockets密码哈希 你好世界 Go语言创建…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union&#xff0c;“联合体、共用体”&#xff0c;在某种程度上类似结构体struct的一种数据结构&#xff0c;共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

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面板输出 工欲善…

大数据学习12之HBase

1.基本概念 1.1简介 Apache HBase&#xff08;Hadoop DataBase&#xff09;是一个开源的、高可靠性、高性能、面向列&#xff08;这里指列族&#xff0c;非列式存储&#xff09;、可伸缩、实时读写的分布式数据库&#xff0c;其设计思想来源于 Google 的 BigTable 论文。利用 …

(Go基础)Go的运行流程步骤与包的概念

1. 快速入门 所有的go开发&#xff0c;都必须存在并包含在某一个包内 .go 是go语言程序的后缀名 1.1 编译 通过使用 go build 命令对该go文件进行编译&#xff0c;生成.exe文件 1.2 运行 运行刚刚生成出来的test.exe文件既可&#xff0c;不过并不不是双击&#xff0c;而是在…