playwright学习记录1

playwright

  • 简介:Playwright 是由微软推出的一款用于 Web 应用自动化测试的开源框架,它支持多浏览器、多平台,具有强大的 API 和现代化的自动化功能,适用于跨浏览器的 UI 测试。
  • Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行本地或 CI 测试,无头测试或使用适用于 Android 和 Mobile Safari 的 Google Chrome 的原生移动模拟进行测试。

1. 安装 Playwright

安装版本 python3.8及以上

pip install pytest-playwright

安装所需的浏览器:
playwright install
Playwrigth 会安装 Chromium, Firefox 和WebKit 浏览器并配置一些驱动。等待安装就好~
安装完之后就可以进行自动化操作了。。。

2. Playwright 基本流程

Playwright 的基本工作流程:

  1. 启动浏览器
  2. 创建浏览器上下文
  3. 打开新页面
  4. 在页面上执行操作
  5. 关闭浏览器

同步模式:

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://www.baidu.com")print(page.title())browser.close()

异步模式:

import asyncio
from playwright.async_api import async_playwrightasync def main():async with async_playwright() as p:browser = await p.chromium.launch()page = await browser.new_page()await page.goto("https://www.baidu.com")print(await page.title())await browser.close()asyncio.run(main())

3. 浏览器上下文

Playwright 中的 “浏览器上下文” 是一种类似“浏览器标签页”的概念。每个上下文相当于一个独立的浏览器窗口,拥有自己的 cookies、缓存和存储,这使得在多会话测试中避免相互影响变得更容易。

# 创建一个新的上下文
context = browser.new_context()# 每个上下文独立运行
page1 = context.new_page()
page2 = context.new_page()page1.goto("https://example.com")
page2.goto("https://example.com/other-page")

4. 元素选择器与操作

Playwright 支持多种元素选择器,如 CSS、XPath 等,还支持文本选择器、角色选择器等。可以使用 page.locator 方法进行元素的定位和交互。

# 查找并点击一个按钮
page.locator("text=Submit").click()# 输入文本
page.locator("#username").fill("my_username")# 获取元素文本
text = page.locator(".info").text_content()
print("Info Text:", text)

5. 自动化测试断言

Playwright 提供了一些常用的断言方法,可以快速验证页面状态。例如:

# 验证页面 URL
assert page.url == "https://www.baidu.com"# 验证元素是否可见
assert page.locator("text=新闻").is_visible()

还可以使用 expect 模块提供更丰富的断言语法:


from playwright.sync_api import expect# 期望元素包含特定文本
expect(page.locator("link")).to_have_text("新闻")

6. 脚本录制与生成

Playwright CLI 提供了录制功能,可以录制用户在浏览器中的操作并生成代码,大大提高了使用效率。

使用 codegen 命令运行测试生成器,后跟要为其生成测试的网站的 URL。URL 是可选的,你始终可以在没有它的情况下运行命令,然后将 URL 直接添加到浏览器窗口中。

playwright codegen

执行完上述命令,会打开2个页面,可以记录所有操作,生成对应的代码。
在这里插入图片描述
代码生成页面:在这里插入图片描述
有多种功能,可以录制,也可以定位元素

查看帮助文档 playwright codegen --help


Usage: playwright codegen [options] [url]open page and generate code for user actionsOptions:-o, --output <file name>             saves the generated script to a file--target <language>                  language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit (default: "python")--save-trace <filename>              record a trace for the session and save it to a file--test-id-attribute <attributeName>  use the specified attribute to generate data test ID selectors-b, --browser <browserType>          browser to use, one of cr, chromium, ff, firefox, wk, webkit (default: "chromium")--block-service-workers              block service workers--channel <channel>                  Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc--color-scheme <scheme>              emulate preferred color scheme, "light" or "dark"--device <deviceName>                emulate device, for example  "iPhone 11"--geolocation <coordinates>          specify geolocation coordinates, for example "37.819722,-122.478611"--ignore-https-errors                ignore https errors--load-storage <filename>            load context storage state from the file, previously saved with --save-storage--lang <language>                    specify language / locale, for example "en-GB"--proxy-server <proxy>               specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"--proxy-bypass <bypass>              comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"--save-har <filename>                save HAR file with all network activity at the end--save-har-glob <glob pattern>       filter entries in the HAR by matching url against this glob pattern--save-storage <filename>            save context storage state at the end, for later use with --load-storage--timezone <time zone>               time zone to emulate, for example "Europe/Rome"--timeout <timeout>                  timeout for Playwright actions in milliseconds, no timeout by default--user-agent <ua string>             specify user agent string--viewport-size <size>               specify browser viewport size in pixels, for example "1280, 720"-h, --help                           display help for commandExamples:$ codegen$ codegen --target=python$ codegen -b webkit https://example.com

可以看到我们可以通过-b 指定打开的浏览器,默认是chromium,-o 可以在操作结束后保存一个文件,直接执行,还可用 --device指定手机浏览器设备…

这就是本次学习的内容了,后续继续深入了解不同的操作方式,框架,截图等内容。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 【…

数据结构进阶——AVL树

一、AVL树基本概念 1.1定义 如果一颗二叉搜索树的左右子树的高度差的绝对值不超过1&#xff08;1&#xff0c;0&#xff0c;-1&#xff09;&#xff0c;那么这颗二叉搜索树就叫AVL树。 1.2AVL树的性质 AVL树的左右子树也是一颗AVL树&#xff0c;二叉搜索树是一颗高度平衡的二叉…

Easyconnect官网下载安装使用教程

软件下载 打开官网https://www.sangfor.com/downloads&#xff1b; 选择自己熟悉的语言 windows选择支持与服务—软件下载 mac 找售后智能在线&#xff08;见下面MAC&#xff09; 在所有产品与服务中选择&#xff1a;SSL VPN 左侧选择SSL VPN工具&#xff0c;然后根据自…

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron )&#xff0c;又名感知机( Perceptron )&#xff0c;在模型结构上与 逻辑回归 一致&#xff0c;这里以一个二维输入量的例子对其进行进一步 的解释&#xff1a; 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

人工智能(AI)和机器学习(ML)技术学习流程

目录 人工智能(AI)和机器学习(ML)技术 自然语言处理(NLP): Word2Vec: Seq2Seq(Sequence-to-Sequence): Transformer: 范式、架构和自注意力: 多头注意力: 预训练、微调、提示工程和模型压缩: 上下文学习、思维链、全量微调、量化、剪枝: 思维树、思维…

Odoo:免费开源的医药流通行业信息化解决方案

文 / 开源智造Odoo亚太金牌服务 方案概述 开源智造Odoo免费开源ERP提供面向医药批发采、供、销业财一体化&#xff0c;及直接面向消费者的门店终端、全渠道管理、营销管理以及GSP合规管理解决方案&#xff0c;提升企业运营效率和全业务链条的数字化管控、追溯能力。 行业的最新…

牛客sql题目总结(1)

1.第N高的薪水 AC: create function getnthhighestsalary(n int) returns int begindeclare m int; set m n - 1; return (select distinct salaryfrom employeeorder by salary desclimit m, 1); end 2.平均播放进度大于60%的视频类别 AC&#xff1a; select tb_video_info…

数量少的连锁店要不要用智能巡检?

无论是在新闻报道中&#xff0c;还是企业定制目标客户时&#xff0c;人们都更喜欢聚焦原本就已经站在各行业金字塔尖的那 1%&#xff0c;剩下的 99% 却常常被忽略。 比如此刻我正在搜索中小型连锁企业智能巡检相关的资讯&#xff0c;但网页展示的结果基本围绕着「中大型、1000门…

windows 进程降权和提权代码示例(2)

强制完整性控制 - Win32 应用程序 |Microsoft 学习 一、强制完整性控制 品03/26/20217 个参与者 反馈 本文内容 诚信标签进程创建强制性政策 强制完整性控制 &#xff08;MIC&#xff09; 提供了一种用于控制对安全对象的访问的机制。此机制是对自主访问控制的补充&#xff…

Redis - Set 集合

一、基本了解 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中1&#xff09;元素之间是⽆序 的2&#xff09;元素不允许重复&#xff0c;如图2-24所⽰。⼀个集合中最多可以存储 32 2 − 1 个元素。Redis除了⽀持 集合内的增删查改…

Java教学辅助:SpringBoot平台实战技巧

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Codeforces Round 970(Div. 3) (预处理后缀, 一道适合py的题)

F. Sakurakos Box 传送门&#xff1a;Problem - 2008F - Codeforces Sakurako has a box with nn balls. Each ball has its value. She wants to bet with her friend that if the friend randomly picks two balls from the box (it could be two distinct balls, but they…

OpenDroneMap Webodm

OpenDroneMap & Webodm OpenDroneMap Webodm 开源无人机航拍系列图像及其它系列图像三维重建软件。很棒的开源无人机测绘软件OpenDroneMap,从航拍图像生成精确的地图、高程模型、3D 模型和点云。 应用领域 Mapping & Surveying 测绘和测量 从图像测量获得高精度的可…

Github 2024-11-02 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Genera…

前端八股文(四)计网 持续更新中。。。

计网相关面试题 1.http缓存的方式 缓存是为了重复使用而被存储的&#xff0c;可以减少浏览器和服务器之间通信的次数、降低网络延迟、加速页面加载、提高用户体验性等。不但能使网页打开速度更快&#xff0c;还能减少服务器的压力。 浏览器缓存策略&#xff1a; 强缓存&…

项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋

一&#xff1a;系统展示: 二&#xff1a;约定前后端接口 2.1 登陆 登陆请求&#xff1a; GET /login HTTP/1.1 Content-Type: application/x-www-form-urlencodedusernamezhangsan&password123登陆响应&#xff1a; 正常对象&#xff1a;正常对象会在数据库中存储&…

vue 插槽

参考文档 插槽 Slots | Vue.js 1. 基本概念 Vue的插槽&#xff08;slot&#xff09;&#xff0c;简单来说&#xff0c;就是一种 定义在组件中的 “占位符”。用于实现现组件的内容分发和复用。如下&#xff0c;是一个简单的默认插槽&#xff1a; <!-- Parent.vue --> &…

信息流不同行业账户流量池有区别吗?

在投放过程中&#xff0c;我们经常遇到这么一个问题&#xff0c;不同行业账户投放&#xff0c;流量池会有区别嘛&#xff1f;我认为是有的&#xff0c;那么对于我们而言&#xff0c;怎么样才能利用好媒体对于流量池的划分效果&#xff0c;可以从以下几个方面来进行考虑&#xf…

[Tex] Ubuntu 搭建 TexWork

更新软件库 打开终端&#xff1a; sudo apt --update sudo apt --upgrade 安装 texlive 完整版与 TexWorks 界面 sudo apt install texlive-full sudo apt install texworks

从0开始深度学习(26)——汇聚层/池化层

池化层通过减少特征图的尺寸来降低计算量和参数数量&#xff0c;同时增加模型的平移不变性和鲁棒性。汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。 1 最大汇聚层、平均汇聚层 汇聚层和卷积核一样&#xff0c;是在输入图片上进行滑动计算&#xff0c;但是不同于卷积层的…