【python自动化】Playwright基础教程(五)事件操作②悬停输入清除精讲

【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲

本章目录

文章目录

  • 【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲
    • 鼠标悬停 - hover
      • 鼠标悬停实战
    • 输入内容 - fill
      • 输入内容实战
      • 清空内容实战
    • 输入内容 - type
      • 模拟按键输入内容实战
    • 清除 - clear
      • 清除内容实战
    • playwright系列回顾

鼠标悬停 - hover

有些元素,只有你鼠标移动到它那个位置上,他才会展开或者显示一些内容,这时候就要用到hover操作了。

使用方法

page.get_by_role("link").hover()

参数

参数类型释义
forcebool是否绕过可操作性检查。默认值为 false
modifiersList[“Alt”, “Control”, “Meta”, “Shift”]要按下的键,有四个可供选择。
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
positionDict{x: float, y: float}
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。
trialbool设置后,此方法仅执行可操作性检查并跳过操作。默认值为 false 。等到元素可以执行操作时再执行。

可操作性检查表:https://playwright.dev/python/docs/actionability

此方法详细执行步骤

  • 等待元素的可操作性检查,除非force设置为true
  • 如果需要的话,将元素滚动到视图中。
  • 使用page.mouse将鼠标悬停在元素的中心位置,或者是position所指定的位置。
  • 等待启动的导航成功或四百,除非no_wait_after设置为true

鼠标悬停实战

**案列:**打开百度首页,鼠标放置在左上角的更多位置(悬浮),会显示出百度的其他产品。

需实现效果展示:

image-20230913155504225

代码流程

1、首先我们看一下更多这个元素如何定位

<a href="http://www.baidu.com/more/" name="tj_briicon" class="s-bri c-font-normal c-color-t" target="_blank">更多</a>

2、可以通过文本定位(但页面上有三个更多),这里这个更多是第一个,我们可以使用nth(0)或者first进行定位

  • self.page.get_by_text("更多").nth(0).hover()
    
  • self.page.get_by_text("更多").first.hover()
    

3、可以通过class定位,唯一

  • self.page.locator("[class='s-bri c-font-normal c-color-t']").hover()
    

4、可以通过name定位,唯一

  • self.page.locator("[name='tj_briicon']").hover()
    

在这里,class和name我均是使用的xpath定位,这个不熟悉的小伙伴可以单独学习一下。

Xpath我常用的:

使用元素的属性来定位元素,可以通过 [@属性名='属性值'] 的方式。
示例://input[@id='username'] 选取 id 属性为 “username” 的 input 元素。

xpath文本定位

完全匹配文本 //*[text()=“登录”]

包含某个文本 //*[contains(text(),“登录”)]

完整代码

def hover_operate(self):
    # 通过文本定位
    # self.page.get_by_text("更多").nth(0).hover()
    # self.page.get_by_text("更多").first.hover()
    # 通过class定位
    # self.page.locator("[class='s-bri c-font-normal c-color-t']").hover()
    # 通过name定位
    self.page.locator("[name='tj_briicon']").hover()

输入内容 - fill

在输入框中输入一个值。类似于selenium中的send_keys()

使用方法

# 在textbox中填入 梦无矶
page.get_by_role("textbox").fill("梦无矶")

参数

参数类型释义
valuestr可输入文本的元素中需要输入的内容
forcebool是否绕过可操作性检查。默认值为 false
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

此方法详细执行步骤

  • 此方法会先进行可操作性检查(force为默认值时),聚焦元素,对目标元素进行input输入。
  • 如果你想清空此元素的内容,你可以传入空字符串,value = ""
  • 如果目标元素无法输入文本,将会引发错误。
  • 想要更加细致的输入操作,如模仿人为输入(每个字符之间有输入时间间隔),可以使用locator.type()

输入内容实战

**案例:**在搜素框输入梦无矶的测试开发之路

搜索框网页源码:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

定位

1、根据ID定位

self.page.locator("#kw")

2、class定位

self.page.locator(".s_ipt")

3、xpath定位

self.page.locator("//input[@name='wd']")
# 或
self.page.locator("//input[@id='kw']")
# 或
self.page.locator("[class='s_ipt']")

想不到吧,小小的一个搜索框竟然有如此多的定位方式。

完整代码

def fill_operate(self):
    # id定位
    self.page.locator("#kw").fill("梦无矶的测试开发之路")
    # 也可以这样写
    self.page.fill("#kw","梦无矶的测试开发之路")
    
    # class定位
    # self.page.locator("[class='s_ipt']").fill("梦无矶的测试开发之路")
    # self.page.locator(".s_ipt").fill("梦无矶的测试开发之路")
    
    # xpath定位
    # self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # self.page.locator("//input[@id='kw']").fill("梦无矶的测试开发之路")

执行效果展示

image-20230913165128967

清空内容实战

通过参数我们可以发现,text如果传入一个空值,那么就是进行内容清空。

这里我们先输入一段文本,再输入一个空字符。

执行后发现确实被清空了。教程代码,如果在学习的小伙伴,建议自己写一下运行一下,这些代码我都辛辛苦苦调试好了的,不学好浪费啊!

def fill_clear(self):
    # 先输入内容
    self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # 为了看清楚操作,这里加一个等待
    self.page.wait_for_timeout(2000)
    # 清空内容
    self.page.locator("//input[@name='wd']").fill("")

输入内容 - type

Tips

  • 官方建议使用locator.fill()进行输入,只有当页面上需要执行特殊的按键操作的时候,才使用locator.type()
  • 聚焦元素,输入文本时为文本中的每个字符执行 keydown, keypress/input, and keyup 事件。
  • 若需要执行其他的特殊按键,比如Control,ArrowDown,请使用locator.press()。在后续章节我们会讲到。

使用方法

element.type("hello") # 瞬间输入完毕
element.type("world", delay=100) # 像用户一样缓慢输入,每个字符间隔100毫秒

参数

参数类型释义
textstr在目标元素要输入的文本
delayfloat两次按键之间的等待时间(单位为毫秒),默认为0毫秒。
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

模拟按键输入内容实战

依旧是使用fill操作中的搜索框进行输入。

完整代码

def type_operate(self):
    # 效果和fill一样
    # self.page.locator("#kw").type("梦无矶的测试开发之路")
    # 每个字符之间会停顿300毫秒
    self.page.locator("#kw").type(text="梦无矶的测试开发之路", delay=300)

最终会在输入框中输入梦无矶的测试开发之路。这里就不截图了。

清除 - clear

清除输入字段

使用方法

# 清空textbox中的内容
page.get_by_role("textbox").clear()

参数

参数类型释义
textstr在目标元素要输入的文本
forcebool是否绕过可操作性检查。默认值为 false
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

清除内容实战

这个清除是不是很像我们的fill传入控制符?

这里我们依然是在搜索框中输入内容,再清空。

def clear_operate(self):
    # 先输入一段文本
    self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # 为了看清楚操作,这里加一个等待
    self.page.wait_for_timeout(2000)
    # 清除内容
    self.page.locator("//input[@name='wd']").clear()

playwright系列回顾

playwright连接已有浏览器操作

selenium&playwright获取网站Authorization鉴权实现伪装requests请求

【python自动化】playwright长截图&切换标签页&JS注入实战

【python自动化】Playwright基础教程(二)快速入门

【python自动化】Playwright基础教程(三)定位操作

【python自动化】Playwright基础教程(四)事件操作①元素高亮&元素匹配器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS省略号n行公式

记得改图中的n&#xff0c;这是你需要的几行省略号&#xff01;复制中间的5行就行了。 .text {overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: n; //n为你想省略的行数&#xff0c;需要改-webkit-box-orient: vertical; } 这是…

单链表(8)

单链表的特点 可以发现&#xff0c;在单链表的for循环里&#xff0c;初始化就总结为这两种情况 上图中 用第一条&#xff08;要改变链表的结构&#xff0c;增加&#xff0c;减少结点个数等&#xff09;的有&#xff1a;尾插&#xff0c;插入&#xff0c;删除pos位置值&#x…

应用开发平台集成表单设计器系列之2——深入了解与技术验证

背景 上一篇&#xff0c;对表单设计器进行了技术预研&#xff0c;在三款组件form-generator、FormMaking、form-create-designer中初步选择了form-create-designer&#xff0c;接下来的工作&#xff0c;是需要深入了解&#xff0c;进行技术验证&#xff0c;确保该组件功能基本…

安防视频监控EasyCVR平台使用海康ehome接入,配置信息不对是什么原因?该如何将解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

VMware ubuntu 新虚拟机的创建

根据自己指定的路径安装好vm后。 创建新的虚拟机。 记录一下&#xff0c;下次用到别再忘记了。 如需转载&#xff0c;注明出处&#xff01; 点赞收藏关注我 以资鼓励 打开vm 软件&#xff0c;点击创建新的虚拟机 选择典型&#xff0c;点击下一步 选择你的ubuntu镜像iso文件 …

【算法训练-链表 零】链表高频算法题看这一篇就够了

一轮的算法训练完成后&#xff0c;对相关的题目有了一个初步理解了&#xff0c;接下来进行专题训练&#xff0c;以下这些题目就是汇总的高频题目 题目题干直接给出对应博客链接&#xff0c;这里只给出简单思路、代码实现、复杂度分析 反转链表 依据难度等级分别为反转链表、…

Window安装MongoDB

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

Python 如何实现访问者设计模式?什么是访问者(Visitor)模式?实际案例中有什么作用?

什么是访问者设计模式&#xff1f;访问者&#xff08;Visitor&#xff09;设计模式介绍&#xff1a; 访问者&#xff08;Visitor&#xff09;设计模式是一种行为设计模式&#xff0c;用于在不修改被访问对象的前提下定义新的操作。它通过将操作封装到独立的访问者类中&#xf…

JumpServer管理虚拟机

环境准备 1.虚拟机192.168.1.111在线安装JumpServer https://blog.csdn.net/tongxin_tongmeng/article/details/1340166222.虚拟机192.168.1.112创建用户changwq、wangwj useradd changwq && passwd changwq、useradd wangwj && passwd wangwj3.虚拟机192.168.…

springboot容器

1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…

本地化工具:Soluling Localization Crack

Soluling 是一个本地化工具&#xff0c;包含本地化项目所需的所有功能。Solling 使本地化变得非常容易。Soluling 是桌面应用程序和命令行工具的组合 。Solling支持100多种文件格式。通过 Soluling&#xff0c;您可以本地化桌面应用程序、移动应用程序、Web 应用程序、文档和在…

如何在thingsboard的规则链中对一个遥测属性进行求平均值

背景 有这样一个需求,一个温度传感器每5秒,上传一次数据。要求算出该设备2分钟内的平均温度,如果超过某个值,则发送告警邮件。 具体操作实现 下面在规则链中实现求平均值。 使用的节点是 配置如下 必填 Timeseries keys,是要求的平均值的属性名。 我这里求的是四个…

【教学类-17-03】20231105《世界杯随机参考图七巧板 3份一页》(大班)

效果展示&#xff1a; 单页效果 多页效果 预设样式&#xff1a; 背景需求&#xff1a; 2022年11月24日&#xff0c;大1班随机抽取的9位幼儿制作了9张拼图&#xff0c;发现以下三个问题&#xff1a; 1、粉红色辅助纸选择量多——9份作业有4位幼儿的七巧板人物是粉红色的 2、…

嵌入式杂记 -- MCU的大小端模式

MCU的大小端模式 大端模式小端模式大小端模式测试联合体概念MCU大小端模式测试大端模式测试小端模式测试 大小端模式转换 在进行MCU开发的时候&#xff0c;我们需要注意MCU的数据存储模式&#xff0c;在嵌入式中有两种不同的存储模式&#xff0c;分别是 大端模式和小端模式。 …

dameng数据库数据id decimal类型,精度丢失

问题处理 这一次也是精度丢失&#xff0c;但是问题呢还是不一样&#xff0c;这一次所有的id都被加一了&#xff0c;只有id字段被加一&#xff0c;还有的查询查出来封装成对象之后对象的id字段被减一了&#xff0c;数据库id字段使用的decimal&#xff08;20,6&#xff09;&…

Apache Airflow (六) :DAG catchup 参数设置

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

软件测试 —— 常见的自动化测试架构!

一个自动化测试架构就是一个集成体系&#xff0c;其中定义了一个特殊软件产品的自动化测试规则。这一体系中包含测试功能函数库、测试数据源、测试对象识别标准&#xff0c;以及各种可重用的模块。这些组件作为小的构建模块&#xff0c;被组合起来代表某种商业流程。自动化测试…

求最大公约数math.gcd()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 求最大公约数 math.gcd() [太阳]选择题 下列代码执行输出的结果是&#xff1f; import math print("【执行】print(math.gcd(6, 8))") print(math.gcd(6, 8)) print(&quo…

【汇编】汇编语言的介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、汇编是什么&#xff1f;二、为什么要学习汇编语言&#xff1f;三、学习汇编语言的好处四、安装汇编环境4.1 下载虚拟环境4.2 配置虚拟环境 总结 前言 计算…

我的创作纪念日-我在csdn的三周年

文章目录 机缘收获日常成就憧憬 机缘 2020 年 11 月 09 日&#xff0c;撰写了第 1 篇技术博客&#xff0c;到现在不知不觉三周年了。 慢慢的也会将自己的感受和知识梳理成专栏&#xff0c;记录日常的学习以及通过文章进行技术交流&#xff0c;和大家分享一个我认为比较好的成…