Playwright for Python:基础用法

写在前面

Playwright for Python:安装及初步使用

自动化交流

Playwright可以与HTML输入元素进行交互,例如文本输入框、复选框、单选按钮、下拉选项等。它可以模拟鼠标点击、输入字符、按键和快捷键,还可以上传文件并将焦点设置到元素上。

注意:本文只讲解同步方式,不讲解异步方式。
from playwright.sync_api import sync_playwright

一、文本输入 Text input

使用locator.fill()是填写表单字段最简单的方法。它会将焦点定位到元素,并触发一个带有输入文本的输入事件。它适用于<input><textarea>[contenteditable]元素。

# 文本输入框
page.get_by_role("textbox").fill("Peter")# 日期输入框
page.get_by_label("Birth date").fill("2020-02-02")# 时间输入框
page.get_by_label("Appointment time").fill("13:15")# 当地时间输入框
page.get_by_label("Local time").fill("2020-03-02T05:15")

二、复选框和单选框 Checkboxes and radio buttons

使用locator.set_checked()是选中或取消选择复选框或单选按钮最简单的方法。该方法可用于input[type=checkbox]input[type=radio][role=checkbox]元素。

# 勾选checkbox
page.get_by_label('I agree to the terms above').check()# 断言checkbox被选中了
assert page.get_by_label('Subscribe to newsletter').is_checked() is True# 选中单选框
page.get_by_label('XL').check()

三、下拉选择框 Select options

使用locator.select_option()<select>元素中选择一个或多个选项。你可以通过指定选项的值或标签来进行选择。可以同时选择多个选项。

# 单选,选中value
page.get_by_label('Choose a color').select_option('blue')# 单选,选中label
page.get_by_label('Choose a color').select_option(label='Blue')# 多选
page.get_by_label('Choose multiple colors').select_option(['red', 'green', 'blue'])

四、鼠标点击 Mouse click

# 通用点击
page.get_by_role("button").click()# 双击
page.get_by_text("Item").dblclick()# 右击
page.get_by_text("Item").click(button="right")# Shift + click
page.get_by_text("Item").click(modifiers=["Shift"])# 鼠标悬浮在元素上
page.get_by_text("Item").hover()# 点击左上角
page.get_by_text("Item").click(position={ "x": 0, "y": 0})# 强制点击
page.get_by_role("button").click(force=True)# Programmatic click
page.get_by_role("button").dispatch_event('click')

五、 输入字符 Type characters

在大多数情况下,你应该使用locator.fill()方法来输入文本。请参考上面的文本输入部分。只有在页面上存在特殊的键盘处理时,才需要手动输入字符。

# 通过class定位,输入Hello World!
page.locator('#area').type('Hello World!')

七、 按键和快捷操作 Keys and shortcuts

# 点击 Enter
page.get_by_text("Submit").press("Enter")# 发送 Control+Right组合键
page.get_by_role("textbox").press("Control+ArrowRight")# 键盘按 “$”符号
page.get_by_role("textbox").press("$")

locator.press()方法将焦点放在所选元素上并产生一个单一的按键输入。它接受键盘事件的keyboardEvent.key属性中发出的逻辑按键名称:

Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape,
ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight,
ArrowUp, F1 - F12, Digit0 - Digit9, KeyA - KeyZ, etc.
  • 你还可以指定一个单个字符,比如"a"或"#"来产生相应的按键输入。
  • 同时也支持以下修改键的快捷方式:Shift、Control、Alt、Meta。
  • 小写的"a"和大写的"A"是不一样的操作。
# <input id=name>
page.locator('#name').press('Shift+A')# <input id=name>
page.locator('#name').press('Shift+ArrowLeft')
  • 还支持“Control+o”或“Control+Shift+T”等快捷方式。当使用修改键时,修改键会被按下并保持,同时在按下后继键时也发挥作用。

  • 请注意,如果需要大写字母A,你仍然需要指定Shift-A。Shift-a会产生一个小写的字符,就好像你已经打开了CapsLock键一样。

八、 上传文件 Upload files

你可以使用locator.set_input_files()方法选择要上传的输入文件。它的第一个参数应该指向一个具有"type"属性为"file"的输入元素。可以在数组中传递多个文件。如果某些文件路径是相对路径,它们将相对于当前工作目录进行解析。如果传入一个空数组,则会清除已选择的文件。

# 上传单个文件
page.get_by_label("Upload file").set_input_files('myfile.pdf')# 上传多个文件
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])# 移除所有的文件
page.get_by_label("Upload file").set_input_files([])# 从内存上传缓存区
page.get_by_label("Upload file").set_input_files(files=[{"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}],
)

如果你没有手动获取输入元素(因为它是动态创建的),你可以通过处理page.on(“filechooser”)事件或使用相应的等待方法来进行操作:

with page.expect_file_chooser() as fc_info:page.get_by_label("Upload file").click()
file_chooser = fc_info.value
file_chooser.set_files("myfile.pdf")

九、 聚焦元素 Focus element

对于处理焦点事件的动态页面,你可以使用locator.focus()函数将指定元素聚焦。

page.get_by_label('password').focus()

十、拖拽 Drag and Drop

你可以使用locator.drag_to()方法执行拖放操作。该方法将会:

  • 悬停在要拖动的元素上。
  • 按下鼠标左键。
  • 移动鼠标到接收拖放的元素上。
  • 松开鼠标左键。
page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at"))

如果你想对拖动操作进行精确控制,可以使用较低级别的方法,比如locator.hover()mouse.down()mouse.move()mouse.up()

page.locator("#item-to-be-dragged").hover()
page.mouse.down()
page.locator("#item-to-drop-at").hover()
page.mouse.up()

注意:如果你的页面依赖于dragover事件的触发,你需要至少进行两次鼠标移动才能在所有浏览器中触发该事件。为了可靠地执行第二次鼠标移动,你需要重复执行mouse.move()或locator.hover()两次。操作顺序如下:悬停在拖动元素上,按下鼠标,悬停在放置元素上,再次悬停在放置元素上,松开鼠标。

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

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

相关文章

AndroidTV端:酒店扫码认证投屏DLNA

被老板叼了几次了&#xff0c;最近实在忍不了&#xff0c;准备离职&#xff1b; 但是担心离职后长时间没有办法找到工作 就想贡献一套平时琢磨出来的程序&#xff0c;请各位有能力的话带我熬过这凛冽的寒冬。 目前写出来的&#xff0c;有三个端&#xff1a;安卓TV端&#xf…

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前&#xff0c;需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

uni-app 之 scroll-view和swiper

uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--> <template><view><navigator url"/pages/home/home"><button style"background: #ff00f…

【Selenium2+python】自动化unittest生成测试报告

前言 批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导…

leetcode1288. 删除被覆盖区间(java)

删除被覆盖区间 题目描述贪心法代码演示 题目描述 难度 - 中等 leetcode1288. 删除被覆盖区间 给你一个区间列表&#xff0c;请你删除列表中被其他区间所覆盖的区间。 只有当 c < a 且 b < d 时&#xff0c;我们才认为区间 [a,b) 被区间 [c,d) 覆盖。 在完成所有删除操作…

MySql学习笔记05——DML

DML 插入数据insert insert into 表名(字段名1&#xff0c;字段名2&#xff0c;字段名3...)values(值1&#xff0c;值2&#xff0c;值3)&#xff1b;字段名和值要一一对应&#xff08;顺序对应&#xff0c;数据类型对应&#xff09; insert into t_student(no,name,sex,age,…

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中&#xff0c;挂载&#xff08;Mounting&#xff09;和数据卷&#xff08;Data Volumes&#xff09;是用于在容器和宿主机之间共享数据的机制。 挂载&#xff1a;将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

收入下降,亏损扩大,利润率急剧恶化,蔚来仍充满风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 蔚来第二季度财报分析 猛兽财经从蔚来&#xff08;NIO&#xff09;2023年第二季度财报中&#xff0c;获得的最大收获并不是该公司的收入下降或亏损扩大&#xff0c;而是由于价格竞争加剧&#xff0c;中国电动汽车行业整体上…

什么是安全运营中心(SOC),应该了解什么

安全运营中心&#xff08;SOC&#xff09; 是一种企业监视和警报设施&#xff0c;可帮助组织检测安全威胁、监视安全事件和分析性能数据以改进公司运营。 什么是安全运营中心&#xff08;SOC&#xff09; 安全运营中心&#xff08;SOC&#xff09;是一个中央监视和监视中心&a…

第二次作业

1.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 编写脚本for1.sh 执行脚本&#xff1a;bash for.sh 2&#xff0c;编写脚本for2.sh,使用for循环,通…

springboot 集成 lucene

简介 数据每分钟产生200条&#xff0c;使用mysql储存。目前有数据超过700M。按照日期查询&#xff0c;按月查询包含每次超过20w条以上&#xff0c;时间比较长。计划使用lucene优化查询&#xff0c;不适用es是因为项目较小&#xff0c;没有更富裕的资源。 基本步骤 引入依赖。…

工业级大模型应用长啥样

我们可以通过开源工具&#xff0c;搭建大模型应用的“原型系统”&#xff0c;但是我要来“泼冷水”&#xff0c;因为这距离工业级大模型应用&#xff0c;还是有很大的差距。 这篇文章主要讨论这种”原型系统“可能带来的认知误区以及工业级大模型应用需要考量的因素。 “原型…

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中&#xff0c;监视器扮演着关键角色&#xff0c;它们能够捕获异常情况、错误响应、资源利用等&#xff0c;为测试人员提供有价值的信息&#xff0c;有助于发现潜在漏洞和问…

ceph Monitor原理和代码流程介绍

Monitor介绍 Monitor在Ceph集群中扮演管理者的角色&#xff0c;维护了整个集群的状态&#xff0c;集群的状态被抽象成几个Map对象&#xff0c;包括monmap、osdmap、mdsmap、authmap、logmap等&#xff0c;保证集群的相关组件在同一时刻能够达成一致&#xff0c;相当于领导层。…

删除maven中出现.lastUpdate结尾的文件

出现 .lastupdate 结尾的文件的原因:由于网络原因没有将maven的依赖下载完整. 解决方案: 1) 删除所有以 .lastupdate 结尾的文件 A) 1.切换到maven本地仓库 B)2.在当前目录打开cmd命令行(shift右键-->在此处打开命令窗口 或 直接在当前文件路径上敲cmd 或 右键-->…

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

thinkphp:数据库查询,嵌套别的表的查询(别的表做子查询)

例子 从 vendors 表中选择记录。在 vendors 表中&#xff0c;筛选出具有满足以下条件的 vendor_code 值&#xff1a; 对应的采购订单&#xff08;在 po_headers_all 表中&#xff09;存在未完全接收的采购行&#xff08;在 po_lines_all 表中&#xff09;。相应的采购订单状态…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…

嵌入式学习笔记(12)汇编写启动代码之设置栈和调用C语言

C语言运行时需求和栈的意义 “C语言运行时&#xff08;runtime&#xff09;”需要一定的条件&#xff0c;这些条件由汇编来提供。C语言运行时主要是需要栈。 C语言和栈的关系&#xff1a;C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给C部分预先设置合理合法的栈…

代码随想录训练营 dp

代码随想录训练营 dp 416. &#x1f338;分割等和子集&#x1f338;code 416. &#x1f338;分割等和子集&#x1f338; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 code //看起来风轻云淡的…