01【python+playwright测试自动化】之定位方式

news2024/11/15 8:34:43

playwright系列文章目录

00Mac安装playwright
00Mac 安装配置Python3虚拟环境(VirtualEnv、virtualenvwrapper扩展包)


文章目录

  • playwright系列文章目录
  • 前言
  • 一、实现一个demo
  • 二、通过CSS、XPath定位
  • 三、通过文本定位
  • 四、通过角色定位
  • 五、通过标题定位
  • 六、通过占位符定位
  • 七、通过标签定位
  • 八、通过替代文本定位元素,通常是图像
  • 九、通过设置自定义测试 ID 属性
  • 十、网页类的操作
  • 十一、元素类操作
  • 十二、窗口类操作
  • 十三、鼠标类的操作


前言

本文主要介绍playwright的常见的定位方式,在介绍之前,简单介绍一下它的录制功能。下一篇通过一个简单的实战小demo来介绍一下实际应用。


一、实现一个demo

1.在Terminal终端输入: playwright codegen

在这里插入图片描述

2.会自动开始动作脚本录制

将about:blank清除,输入www.baidu.com
在这里插入图片描述
搜索关键字:测速,会将操作动作都记录下来,形成脚本,可复制到pycharm中直接使用
在这里插入图片描述

二、通过CSS、XPath定位

Playwright 支持 CSS 和 XPath 选择器, css= 或 xpath= 前缀可省略,会自动检测它们

# CSS方法
# page.locator("css=#kw").fill("米兰")
page.locator("#kw").fill("米兰")


# xpash方法
# page.locator('xpath=//*[@id="su"]').click()
page.locator('//*[@id="su"]').click()

三、通过文本定位

语法:get_by_test()

关键字:换一换

    #text文本的方法
    #text=xxxx,模糊匹配,大小写不敏感
    #text = 'xxxx', 精准匹配,大小写敏感
    page.locator('text=米兰的最新相关信息').click()
    #方式1
    page.locator('text=换一换').click()   #能定位到


    #方式2
    #可以通过元素包含的文本找到该元素
    page.get_by_text('换一换').click()    #能定位到
    # 输入部分文本,模糊匹配
    page.get_by_text(re.compile('换一')).click()   #能定位到
    #精准匹配
    page.get_by_text('换一',exact=True).click()     #定位不到   
  • 按文本匹配始终会规范化空格,即使完全匹配也是如此。例如,它将多个空格转换为一个空格,将换行符转换为空格,并忽略前导和尾随空格。
  • 建议使用文本定位器来查找非交互式元素,如 div、span、p 等。对于button、a、input等交互式元素,请使用角色定位器。

DOM结构
在这里插入图片描述

四、通过角色定位

语法:get_by_role()

page.get_by_role("button", name="百度一下").click()
  • 角色定位器包括按钮、复选框、标题、链接、列表、表格等,许多 html 元素都具有隐式定义的角色,该角色可由角色定位器识别。
  • 优先考虑角色定位器来定位元素,因为这是最接近用户和辅助技术感知页面的方式。

DOM结构
在这里插入图片描述

五、通过标题定位

语法:get_by_title()

page.get_by_title("清空").click()

DOM结构
在这里插入图片描述

六、通过占位符定位

语法:get_by_placeholder()

frame = page.frame_locator('//html//body//div[3]//div[3]//div[1]//div//div[3]//div[1]//div[2]//iframe')
frame.get_by_placeholder('邮箱账号或手机号码').fill('lijiajia@xx.com')
frame.get_by_placeholder("输入密码").fill('Aa123456')

DOM结构
在这里插入图片描述

七、通过标签定位

语法:get_by_lable()

注意:大多数表单控件通常都有专用标签,可以方便地用于与表单交互。在这种情况下,您可以使用page.get_by_label()通过其关联标签定位控件

1.frame.get_by_label('30天内免登录').click()
2.page.get_by_label("Password").fill("Aa123456")

DOM结构
在这里插入图片描述

八、通过替代文本定位元素,通常是图像

语法:get_by_alt_text

page.get_by_alt_text('公安').click()

DOM结构:alt=“公安”
在这里插入图片描述

九、通过设置自定义测试 ID 属性

语法:page.get_by_test_id()

// A code block
var foo = 'bar';

DOM结构
在这里插入图片描述

十、网页类的操作


    #访问网址
    page.goto('https://mail.163.com/')
    page.goto('https://www.baidu.com')
    page.go_back()       #后退
    page.go_forward()    #前进
    page.reload()        #刷新
    print(page.url)      #当前url
    print(page.title())
    print(page.content())  #页面源代码

十一、元素类操作

page.goto("https://www.baidu.com/")
page.locator("#kw").fill("米兰") #输入
time.sleep(2)
page.locator("#kw").clear()  #清空
time.sleep(2)
page.get_by_role('button').dblclick()  #双击
time.sleep(2)
print(page.locator("#kw").get_attribute('name')) #获取元素的属性

十二、窗口类操作

    page.goto("https://www.zhibo8.com/")
    #对于新tab窗口的处理
    with context.expect_page() as new_page_info:
        #click预期会产生一个新的窗口tab
        page.get_by_role('link',name='个人').click()

    new_page = new_page_info.value
    new_page.get_by_role('link',name='已购方案').click()

    with context.expect_page() as new_page_info1:
        page.get_by_role('link', name='数据').click()

    data_page=new_page_info1.value
    data_page.get_by_role('link',name='赛程').click()

十三、鼠标类的操作

鼠标的移动

    1.drag_to()
    拖拽鼠标从某个元素到另一个元素上
    page.goto("https://sahitest.com/demo/dragDropMooTools.htm")
    page.locator('#dragger').drag_to(page.locator("text=Item 1"))

    2.drag and drop()
    page.drag_and_drop('#dragger','text=Item 1')

鼠标移动到元素上停留

#hover()
    page.goto("https://www.baidu.com/")
    set_element=page.locator('#s-usersetting-top') 
    set_element.hover()
-------------------------------------------------------

dropdown = page.locator('.dropdown--hoverable')
    # 鼠标悬停
dropdown.hover()
    # 点选项
dropdown.locator('.dropdown__link >> text=python').click()




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

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

相关文章

【最新推荐】雨林木风Windows10系统:极速下载!

今日系统之家小编给大家分享2024年最新发布的雨林木风Windows10系统下载,该版本系统基于微软官方最新Windows10 22H2 19045.4842 64位专业版展开离线制作,确保安全无毒,全新升级的优化方案,显著提升了系统的性能,运作变…

新能源汽车的充电基础发展规划

公共充电基础设施建设进展 公共充电基础设施作为新能源汽车发展的关键支撑,其建设进展在近年来显著加快。各地和企业纷纷投入资源,建立了大量的充电站和充电桩。这些设施不仅覆盖了城市主要区域,也逐渐扩展到高速公路服务区和城际连接点。除…

机器学习 第10章 降维与度量学习

目录 k近邻学习低维嵌入主成分分析(PCA)核化线性降维(KPCA)流形学习等度量映射(Isomap)局部线性嵌入 度量学习 k近邻学习 k 近邻(KNN)学习是一种常用的监督学习方法,其工…

太炸裂!AI绘画赚钱机会,多到你无法想象!

家人们,AI绘画带来的变现方式真的太多了! 很多人会认为AI还没有落地,也有很多人认为这些宣扬AI红利的自媒体就是想割韭菜,那只能说可能认知太浅薄了。 新的事物出现,总会有善于捕捉信息和透过表层看清事物本质的人冲在…

格式化的硬盘能恢复数据吗?拯救数据的可能性

在信息技术高速发展的今天,硬盘作为计算机的核心存储部件,承载着大量的数据和文件。然而,有时因为误操作或其他原因,我们可能需要对硬盘进行格式化,这往往导致重要数据的丢失。 那么,格式化后的硬盘数据是否…

护网期间社区同好的一些问题总结

本文来自无问社区,更多网安知识分享可前往查看http://www.wwlib.cn/index.php/artread/artid/7560.html 一,SQL注入 分类: 从注入参数类型分:数字型注入、字符型注入 从注入效果分:报错注入、布尔注入、延时注入、联合注入、堆…

固态硬盘和机械硬盘区别?固态硬盘和机械硬盘哪个好?

在当今数据时代,硬盘作为电脑里的存储设备在我们的生活和工作中扮演着十分重要的角色。随着存储技术的进步,市场上出现了两种主流硬盘:固态硬盘和机械硬盘。它们各有优劣,那么二者究竟有什么区别?我们又该如何选择呢&a…

Linux驱动(六):Linux2.6驱动编写之平台设备总线

目录 前言一、平台设备总线1.是个啥?2.API函数 二、设备端驱动端1. 匹配机制2. 实现代码 三、设备树驱动端1.匹配机制2.代码实现 前言 本文主要介绍了一下两种驱动编写方法: 1.比较原始的设备端驱动端编写方法。 2.效率较高的设备树驱动端编写方法。 最…

echarts 5.3.2 折线图 tooltip设置trigger为axis无效

在使用echarts5.3.2过程中,发生一个不应该发生的bug,希望效果如下 现实中如下 代码中设置了tooltip: {trigger: ‘axis’}不生效啊。查阅文档,应该是这样设置的啊,可是为什么无效呢。改成tooltip: {trigger: ‘item’}虽能显示弹…

合宙低功耗4G模组Air724UG ——产品规格书

Air724UG 是合宙通信推出的超小封装 LTE Cat.1 bis 模块;采用紫光展锐的UIS8910平台,支持 LTE 3GPP Rel.13 技术。是4G全网通模块,可适应不同的运营商和产品,确保产品设计的最大灵活性。 模块主要特点: 超小封装&…

‘“node“‘ �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���

错误信息 使用vscode提交前端代码到git时,报下面的错,一直不知道啥原因,后来找到了个临时解决方案。。。 vscode解决方案 package.json文件中,去掉hooks的配置。 Idea解决方案 网上有说idea的解决方案的:就是提…

【Qt网络编程基础】Tcp服务器和客户端(只支持一对一)

目录 一、编写思路 1、服务器 总体思路 详细思路 1. 构造函数 (Widget::Widget) 2. 启动监听 (Widget::on_btn_start_clicked) 3. 停止监听 (Widget::on_btn_cease_clicked) 4. 发送消息 (Widget::on_btn_info_clicked) 5. 接收消息 (Widget::receive_message) 6. 处…

顶象图标点选模型识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 (水文一篇)使用resnet分类模型配合yolo训练的图标点选验证码,用于顶象图标点选,案例如下图:

类型参数传值问题

一、基本数据类型传参问题 public static void main(String[] args) throws Exception {Integer number null;method01(number);}private static void method01(int number){System.out.println("number " number);}Ps: 基于int基本数据类型传参的时候&#xff0c…

常用的Adobe XD插件就看这10款!

Adobe XD是为 UI/UX 设计量身定制的协作工具,它与 Adobe 其他产品的无缝集成使得设计工作更加高效。与专注于 MacOS 的 Sketch不同,Adobe XD支持多平台操作,这种灵活性让它在原型设计领域备受瞩目。为了更高效地使用 Adobe XD,插件…

【大模型专栏—入门篇】机器学习与深度学习基础测试

大模型专栏介绍 😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。 &#x1f4…

开源项目低代码表单FormCreate中ElementPlus表单使用校验规则示例

在开源项目低代码表单FormCreate 中,可以通过 validate 配置项为表单组件设置验证规则。无论是内置的表单组件还是自定义的表单组件,都支持表单校验。本文将详细介绍验证规则的使用方法,并提供一些示例来帮助您更好地理解和应用这些功能。 源…

2024年最新微短剧系统重构版,短剧小程序源码开源源码搭建部署

技术栈 前端&#xff1a;vueuniapp 后端&#xff1a;php 数据库&#xff1a;MySQL <?php class Drama {private $title;private $description;private $cast;private $genre;public function __construct($title, $description, $cast, $genre) {$this->title $tit…

iPhone手机备忘录转移到Windows电脑上的方法

备忘录作为我们日常生活中常用的软件&#xff0c;帮助我们记录下重要事项、待办任务、灵感创意等&#xff0c;已成为许多人不可或缺的工具。然而&#xff0c;当我们需要在不同设备间转移备忘录内容时&#xff0c;常常会遇到一些困难。特别是从iPhone手机转移到Windows电脑上&am…