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

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

Redis中的过期删除与内存淘汰

1.Redis中的过期删除策略 在 Redis 中,过期删除策略是为了管理存储在 Redis 中的带有过期时间的数据。每当数据存储时,可能会为其设定一个过期时间。当到达这个时间点后,该数据就被标记为“过期”。为了确保不再需要的过期数据不会占用系统资…

Kubernetes 中的 GPU 管理与 Device Plugin 机制深度解析

Kubernetes 中的 GPU 管理与 Device Plugin 机制深度解析 在现代计算领域,GPU(图形处理器)的强大计算能力越来越受到重视。Kubernetes 作为一种流行的容器编排平台,也提供了对 GPU 资源的管理和使用支持。本节课将深入剖析 Kubernetes 中的 GPU 管理与 Device Plugin 机制…

机器学习——贝叶斯

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

Leetcode 3352. Count K-Reducible Numbers Less Than N

Leetcode 3352. Count K-Reducible Numbers Less Than N 1. 解题思路2. 代码实现 题目链接:3352. Count K-Reducible Numbers Less Than N 1. 解题思路 这一题的话思路上我是拆成了两步来做的,首先,我们要认识到,这里的变化本质…

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 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

@ComponentScan注解引发外部请求无法处理的解决办法

ComponentScan注解引发外部请求无法处理的解决办法 问题起因 最近通过maven从项目中拆分出模块module-db和模块module-seckill 模块module-db主要通过mybatisplus实现数据库的操作,并封装业务接口; 模块module-seckill引入module-db依赖,…

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

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

Chrome DevTools Protocol 入门:相关概念

前言 在上篇文章中&#xff0c;我们快速地使用了 Chrome DevTools Protocol&#xff08;CDP&#xff09;发送指令&#xff0c;成功实现了一些浏览器自动化操作。然而&#xff0c;要想深入使用 CDP&#xff0c;还需要对其中的 协议概念 有更深入的理解。这些概念不仅是我们与浏…

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再进行解密操作。…

前端常用时间操作汇总

&#xff08;1&#xff09;获取中国标准时间&#xff1a; let now new Date(); ​ // Thu Nov 14 2024 17:13:49 GMT0800 (中国标准时间) &#xff08;2&#xff09;获取年份&#xff1a; let year now.getFullYear(); ​ // 2024 &#xff08;3&#xff09;获取月份&…

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

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

《线性代数》学习笔记

列向量无关 上个星期继续学线性代数&#xff0c;一个矩阵&#xff0c;如何判断它是的列向量有几个是线性无关呢&#xff1f;其实有好几个方法。第一个就是一个一个判断。 先选定一个&#xff0c;然后看下这两个&#xff0c;怎么看呢&#xff1f;如果两个列向量线性相关&#…

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

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

Rust学习(二):rust基础语法Ⅰ

Rust学习&#xff08;二&#xff09;——rust基础语法Ⅰ&#xff1a; 1、关键字&#xff1a; 了解编程语言的同学都清楚&#xff0c;关键字在一门编程语言中的意义&#xff0c;所谓关键字就是语言的创造者及后续开发者们&#xff0c;以及定义好的具有特殊含义和作用的单词&am…

AI变现,做数字游民

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