Web 自动化神器 TestCafe(二)—元素定位篇
今天主要给大家介绍一下testcafe这个框架元素定位的方法。
一、CSS 选择器定位
使用 testcafe 对元素进行操作的时候,我们可以直接通过 CSS 选择器指定要操作的元素,比如,点击元素,input 输入文本内容,如下:
- 点击 id 为 su 的元素
前段时间写了一篇关于web自动化测试框架TestCafe的安装和入门文档,有部分小伙伴表示对这个框架比较感兴趣,后续有时间会陆续写几篇关于TestCasfe使用的文章。今天主要给大家介绍一下testcafe这个框架元素定位的方法。
- 点类类属性为 btn 的元素
await t.click('.btn');
上面这种基于 CSS 的元素定位方式用起来虽然很便捷, 但是对于更复杂的元素定位,CSS 选择器会变得更长且难以编写和维护,另外 CSS 选择器无法定位父元素,在实际的应用种 CSS 选择器还是会有诸多不便。这边就不做过多的讲解了。
二、Selector 选择元素
由于 CSS 选择器定位元素不是特别方便,因此 testCafe 中提供了一个叫做 Selector 元素定位器函数,接下来就给大家介绍一下 Selector 的使用。
1、选择器基本使用
在使用 Selector 之前我们需要将它导入,然后使用 Selector 的构造函数创建出来一个选择器对象,对于一些简单的元素定位可以直接将 CSS 选择表达式在创建对象时当如参数传入,js 代码如下:
import { Selector } from 'testcafe';
// 定位id为su的元素
const su = Selector('#su');
// 定位class属性为kw的元素
const kw = Selector('.kw');
2、通过文本定位
上面传入css定位表达式这种方式不支持文本定位,对于文本定位元素,Selector对象提供了对应的方法:既可以通过文本内容匹配,也可以通过文本包含匹配。
- 1、文本内容匹配 :withExactText import { Selector } from 'testcafe'; // 定位 文本为百度的元素 const baidu = Selector().withExactText('百度')
- 2、文本包含匹配:withText import { Selector } from 'testcafe'; // 定位 文本包含百度的span标签 const baidu = Selector('span').withText('百度')
3、通过属性定位
关于通过元素属性匹配,Selector定位器,同样也提供了对应的方法(withAttribute),下面我们来演示withAttribute的使用案例。
| 参数 | 说明 |
| attrName | 属性名(可传字符串|正则表达式) |
| attrValue(非必填) | 属性值(可传字符串|正则表达式) |
// 定位包含myAttr属性的div元素
Selector('div').withAttribute('myAttr');// 定位herf属性为http://www.baidu,com的a标签
Selector('a').withAttribute('herf', 'http://www.baidu,com');
4、节点关系定位
- 1、nextSibling:下一个元素同级元素 // 定位a标签的下一个兄弟元素 Selector('a').nextSibling();
- 2、prevSibling:上一个元素同级元素 // 定位p标签的上一个兄弟元素 Selector('p').prevSibling()
- 3、parent:获取父级元素 // 定位id为u的标签的父元素 Selector('#u').parent()
- 4、sibling:所有的兄弟元素 // 定位li标签所有的兄弟元素 Selector('li').sibling()
- 5、child:获取所有的子元素。 // 定位ul标签所有的子标签 Selector('ul').child()
5、过滤方法
当我们通过选择器获取到某个元素或者元素集合的时候,需要过滤出我们想要的元素进行操作时,那么我们就可以通过Selector提供的相关方法来进行过滤操作定位。
- 1、nth:通过下标选择 // 选择第一个div元素 Selector('div').nth(0)
- 2、find: 查找匹配节点的后代节点 查找匹配集中所有节点的后代节点,并使用 CSS 选择器对其进行过滤。 Selector().find(cssSelector) // cssSelector:用于过滤子元素的CSS选择器字符串。
- 2、filter:过滤符合条件的元素。 Selector().filter(cssSelector) // cssSelector:用于过滤元素的CSS选择器字符串。
- 3、filterHidden:仅选择隐藏的元素 具有 display: none 或 visibility: hidden CSS 属性或宽度或高度为零的元素被视为隐藏。 // 定位隐藏的div元素 Selector('div').filterHidden()
- 4、filterVisibl:仅定位显示的元素 不具有 CSS 属性 display: none 或元素的 visibility: hidden 宽度和高度不为零的元素被视为可见。 // 定位处于显示状态class为box的元素 Selector('.box').filterVisible();
6、设置等待时间
在定位元素的时候,我们如果需要等到定位的元素出现,在使用Selector时,可以设置一个等待超时的时间,直到等待的元素超时为止,使用如下:
Selector('#elementId', { timeout: 500 })
三、Seletor 选择器的操作
上面我们讲了创建一个 seletor 对象选择元素,接下来咱们一起来看看 seletor 对象的操作。
1、常用的属性
- exists:判断元素是否存在 // 判断元素是否存在,返回值布尔值 const res = Selector('#submit-button').exists;
- count:获取匹配到的元素数量 // 获取匹配到的数量 const num = Selector('.column.col-2 label').count;
- textContent :获取元素中包含的文本(包含子元素的文本) const text = Selector('.column.col-2 label').textContent;
- visible :元素是否可见 const num = Selector('.column.col-2 label').count;
- tagName :元素名称 const num = Selector('.column.col-2 label').tagName;
2、更多的属性
除了上述常用属性,Selector 的其他属性参考如下:
| 属性 | 描述 |
| attributes | 元素的属性为 { name: value, ... }。您也可以使用该 getAttribute 方法访问属性值。 |
| boundingClientRect | 元素的大小及其相对于视口的位置。包含 left,right,bottom,top,width 和 height 属性。 |
| checked | 对于复选框和单选输入元素,其当前状态。对于其他元素,undefined。 |
| classNames | 元素类的列表。 |
| clientHeight | 元素的内部高度,包括填充,但不包括水平滚动条的高度,边框或边距。 |
| clientLeft | 元素左边框的宽度。 |
| clientTop | 元素顶部边框的宽度。 |
| clientWidth | 元素的内部宽度,包括填充,但不包括垂直滚动条的宽度,边框或边距。 |
| focused | true 如果该元素已聚焦。 |
| id | 元素的标识符。 |
| innerText | 元素的文本内容“呈现”。 |
| namespaceURI | 元素的名称空间 URI。如果元素没有命名空间,则此属性设置为 null |
| offsetHeight | 元素的高度,包括垂直填充和边框。 |
| offsetLeft | 元素左上角在 offsetParent 节点内向左偏移的像素数。 |
| offsetTop | 元素左上角在 offsetParent 节点内偏移到顶部的像素数。 |
| offsetWidth | 元素的宽度,包括垂直填充和边框。 |
| selected | 表示 `` 当前已选择元素。对于其他元素,undefined |
| scrollHeight | 元素内容的高度,包括由于溢出而在屏幕上不可见的内容。 |
| scrollLeft | 元素内容向左滚动的像素数。 |
| scrollTop | 元素内容向上滚动的像素数。 |
| scrollWidth | 元素内容的像素宽度或元素本身的宽度,以较大者为准。 |
| tagName | 元素的名称。 |
看到这里的朋友不妨点个赞,码字不易,谢谢大家。
相关文章:
Web 自动化神器 TestCafe(二)—元素定位篇
今天主要给大家介绍一下testcafe这个框架元素定位的方法。 一、CSS 选择器定位 使用 testcafe 对元素进行操作的时候,我们可以直接通过 CSS 选择器指定要操作的元素,比如,点击元素,input 输入文本内容,如下࿱…...
DRF-通用分页器(PageNumberPagination):ListModelMixin可以使用的通用分页器
一、ListModelMixin 和GenericAPIView源码 ListModelMixin 是一个单一功能类,必须配合GenericAPIView(或其子类)来一起使用,才能完成其视图的功能 class ListModelMixin:"""List a queryset."""d…...
移动机器人,开启智能柔性制造新篇章
智能制造是当今工业发展的必然趋势,而柔性制造则是智能制造的重要组成部分。在这个快速变革的时代,如何提高生产效率、降低成本、增强灵活性成为了制造业的关键挑战。富唯智能移动机器人应运而生,为柔性制造注入了新的活力。 基于富唯智能AI-…...
视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
【Web题】狼追兔问题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
4-Docker命令之docker info
后续为大家逐个讲解一下docker常用命令及其相关用法。docker常用命令查看如下: [root@centos79 ~]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec…...
QT 中的元对象系统
作为一名十几年的 C 程序员,最近一段时间使用 QT 开发程序,发现 QT 中还是有许多值得深入理解的技术。QT 不仅仅是一个应用程序开发框架,还有一些对标准 C 的扩充。本文和大家一起探讨 QT 中的元对象系统。 在分析 QT 中的元对象系统之前&…...
在两个java项目中实现Redis的发布订阅模式
如何在两个java项目中实现Redis的发布订阅模式? 1. Redis简介2. 发布订阅模式介绍3. 实现思路4. 代码实现及详细解释4.1. RedisUtil4.2. Publisher4.3. Subscriber4.4. 运行程序 目录: Redis简介发布订阅模式介绍实现思路代码实现及详细解释 1. Redis简…...
执行shell脚本提示syntax error: unexpected end of file
具体报错如下: ./test.sh: line 36: syntax error: unexpected end of file执行命令时需将test.sh替换为实际的脚本文件名称。 情形一: shell脚本在Windows下编写,上传到Linux上执行,由于 fileformat 类型不同,所以报…...
信也科技发布2023年Q3财报:数字金融服务业务增长稳健,持续拉动实体消费
11月21日,信也科技(NYSE:FINV)公布2023年第三季度未经审计的财务报告。财报显示,信也科技三季度在国内、国际市场延续稳健增长态势,实现季度营收31.98亿元(人民币,下同)&…...
Springcloud可视化物联网智慧工地云SaaS平台源码 支持二开和私有化部署
智慧工地平台围绕建筑施工人、物、事的安全管理为核心,对应研发了劳务实名制、视频监控、扬尘监测、起重机械安全监测、安全帽监测等功能一体化管理的解决方案。 智慧工地是聚焦工程施工现场,紧紧围绕人、机、料、法、环等关键要素,综合运用物…...
51单片机应用从零开始(七)·循环语句(if语句,swtich语句)
51单片机应用从零开始(一)-CSDN博客 51单片机应用从零开始(二)-CSDN博客 51单片机应用从零开始(三)-CSDN博客 51单片机应用从零开始(四)-CSDN博客 51单片机应用从零开始(…...
Web服务器(go net/http) 处理Get、Post请求
大家好 我是寸铁👊 总结了一篇Go Web服务器(go net/http) 处理Get、Post请求的文章✨ 喜欢的小伙伴可以点点关注 💝 前言 go http请求如何编写简单的函数去拿到前端的请求(Get和Post) 服务器(后端)接收到请求后,又是怎么处理请求,…...
Unity中颜色空间Gamma与Linear
文章目录 前言一、人眼对光照的自适应1、光照强度与人眼所见的关系2、巧合的是,早期的电子脉冲显示屏也符合这条曲线3、这两条曲线都巧合的符合 y x^2.2^(Gamma2.2空间) 二、Gamma矫正1、没矫正前,人眼看电子脉冲显示屏ÿ…...
Word/PPT/PDF怎么免费转为JPG图片?
1、打开金鸣表格文字识别网站。 2、点击导航条上的“软件下载” 3、安装并打开金鸣表格文字识别软件。 4、点击顶部导航栏的“文件转图片”。 5、选择需要转换成图片的文件(支持Word/PPT/PDF). 6、点“打开”程序将自动分页转换为图片。...
使用docker命令_进入容器_登录mysql服务_并执行sql语句---Docker工作笔记005
今天就用到了,不得不说用docker用到的还是少,记录一下,常用的也就这些吧. 首先执行: docker ps [root@localhost dataease-1.18.9]# docker ps CONTAINER ID IMAGE COMMAND CREATED …...
PMP 考试的含金量怎么样?
这里可以三个思考题和三个价值点帮你认识PMP考试。 三个思维题 1.工作环境 PMP证书含金量的一个很大因素,就是考证的人是否对PMP证书有比较强的实际需求。相反,如果只是听别人说,PMP证书很好,不管工作中是否有需要,…...
2023亚太杯数学建模A题思路代码分析
已经完成A题完整思路代码,文末名片查看获取 A题就是我们机器学习中的一个图像识别,他是水果图像识别,就是苹果识别的一个问题,我们用到的方法基本是使用深度学习中的卷积神经网络来进行识别和分类 问题一:基于附件1中…...
Qt实现自定义IP地址输入控件(百分百还原Windows 10网络地址输入框)
在开发网络相关的程序时,我们经常需要输入IP地址,例如源地址和目标地址。Qt提供了一些基础的控件,如QLineEdit,但是它们并不能满足我们对IP地址输入的要求,例如限制输入的格式、自动跳转到下一个输入框、处理回车和退格键等。因此,我们需要自己编写一个自定义的IP地址输入…...
Linux下的C++ socket编程实例
服务端: 服务器端先初始化socket,然后与端口绑定,对端口进行监听,调用accept阻塞,等待客户端连接。 socket() -> bind() -> listen() -> accept() 客户端: 客户端先初始化socket,然后…...
AI代码审查工具Continue:将AI检查像单元测试一样代码化
1. 项目概述:什么是 Continue?如果你和我一样,每天都要在 GitHub 的 Pull Request 海洋里游泳,那你肯定对“代码审查”这件事又爱又恨。爱的是它能帮你发现潜在问题,恨的是它耗时耗力,尤其是在面对海量、重…...
保姆级教程:在Ubuntu 20.04上用Geth 1.10.5部署你的第一个HelloWorld合约(含Remix编译与ABI处理)
从零到一:Ubuntu 20.04环境下Geth 1.10.5智能合约全流程实战 当清晨的第一缕阳光透过窗帘缝隙洒在Ubuntu终端窗口上时,你可能正在为人生中第一个智能合约的部署而兴奋不已。本文将带你完整走通从Solidity编码到合约交互的每个环节,特别针对Ge…...
LLM学术反驳技术:DRPG框架解析与应用实践
1. LLM在学术反驳场景中的技术实现路径大型语言模型在学术论文反驳场景的应用,本质上是一个多阶段的认知任务分解过程。DRPG(Decompose-Retrieve-Plan-Generate)框架的创新性在于将复杂的反驳撰写任务拆解为可管理的子任务链。这种设计源于对…...
高效智能的安卓系统瘦身方案:Universal Android Debloater完整实战指南
高效智能的安卓系统瘦身方案:Universal Android Debloater完整实战指南 【免费下载链接】universal-android-debloater Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery lif…...
在电脑上玩Switch游戏:Ryujinx模拟器完全指南
在电脑上玩Switch游戏:Ryujinx模拟器完全指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:王国之泪》的壮丽世界,或…...
nli-MiniLM2-L6-H768一文详解:蕴含/矛盾/中立三分类服务落地
nli-MiniLM2-L6-H768一文详解:蕴含/矛盾/中立三分类服务落地 1. 认识自然语言推理服务 自然语言推理(Natural Language Inference, NLI)是自然语言处理中的一项基础任务,它能够判断两段文本之间的逻辑关系。nli-MiniLM2-L6-H768是一个轻量级但功能强大…...
基于安卓的多式联运换乘规划系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在针对当前多式联运交通系统中存在的换乘路径规划效率低下、信息整合不足及用户体验欠佳等问题,设计并实现一个基于安卓平台的智能化多式联运…...
免费开源!Vin象棋智能连线工具完整使用教程
免费开源!Vin象棋智能连线工具完整使用教程 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi Vin象棋是一款基于深度学习技术(YOLOv5…...
Windows下实现Claude Code多账户隔离:环境变量与启动参数配置指南
1. 项目概述:告别手动切换,实现IDE内Claude账户的优雅隔离如果你是一名在Windows上使用Claude Code(Claude AI的IDE插件)的开发者,并且需要在个人和工作账户之间频繁切换,那么你大概率经历过这种烦恼&#…...
如何快速掌握Preact:从新手到专家的完整学习路线
如何快速掌握Preact:从新手到专家的完整学习路线 【免费下载链接】preact ⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM. 项目地址: https://gitcode.com/gh_mirrors/pr/preact Preact是一个仅4kB大小的轻量级R…...
