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

元素的名称。


看到这里的朋友不妨点个赞,码字不易,谢谢大家。

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

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

相关文章

C++中tuple数据结构使用

目录 1 基础知识2 模板3 工程化 1 基础知识 tuple是元组&#xff0c;一旦定义则不可修改&#xff0c;它可以存储一组不同类型的数据。它定义在头文件#include <tuple>中。 &#xff08;一&#xff09; tuple变量的定义。 tuple<int, float, string> a {1, 2.0,…

vue3 实现pdf预览

需要下载pdfjs-dist <template><a-modal class"fill-modal" v-model:open"state.visible" :title"state.modalTitle" width"50%" cancel"handleCancel"><div class"preview-btns-posi"><a-…

Ubuntu上安装Nginx

1、下载Nginx&#xff0c;下载地址 2、解压Nginx的压缩文件&#xff0c;tar -xvf nginx-1.24.0 3、进入文件内部&#xff0c; cd nginx-1.24.0 4、配置环境&#xff0c;./configure --prefix/usr/local/nginx --with-http_gzip_static_module&#xff0c;prefix为安装的路径。…

Web3 分布式存储 IPFS(Web3项目一实战之四)

IPFS是一种分布式文件存储协议,它允许世界各地的计算机存储和服务文件作为一个巨大的对等网络的一部分来存储和服务文件。 世界上任何地方的任何计算机都可以下载IPFS软件并开始托管和提供文件。 如果有人在自己的计算机上运行IPFS,并将文件上传到IPFS网络,那么世界上其他任…

OpenVPN Connect使用连接公网VPN服务器实现内网穿透

安装并运行OpenVPN Connect 点击AGREE 添加配置.OVPN文件 点击连接 连接成功 两个内网主机通过公网VPN穿透

Python subprocess设置超时不生效问题

使用Python脚本写了个测试程序&#xff0c;测试程序中会执行SHELL脚本&#xff0c;并且设置了超时时间&#xff0c;大概是这样的&#xff1a; subprocess.run("do something", shellTrue, stdoutsubprocess.PIPE, timeout30.0)但是却发现运行的时候&#xff0c;测试…

java学习part06数组

62-数组-数组的概述_哔哩哔哩_bilibili 这篇 Java 基础&#xff0c;我吹不动了 - 掘金 (juejin.cn) 1.数组概念 重点 2.数组声明和初始化 new的时候要么给出静态初始化的数据{a,b,c}&#xff0c;要么给出动态初始化指定长度 [4]。 否则报错&#xff0c;初始化必须确定长度…

java拼图小游戏

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

二维偏序问题

偏序 偏序(Partial Order)的概念: 设 A 是一个非空集,P 是 A 上的一个关系,若 P 满足下列条件: Ⅰ 对任意的 a ∈ A,(a, a) ∈ P;(自反性 reflexlve)Ⅱ 若 (a, b) ∈ P,且 (b, a) ∈ P,则 a = b;(反对称性,anti-symmentric)Ⅲ 若 (a, b) ∈ P,(b, c) ∈ P,则 (a,…

快速排序知识总结

快速排序思维导图&#xff1a; 快速排序算法模版&#xff1a; #include <iostream>using namespace std;const int N 1e5 10;int n; int q[N];void quick_sort(int q[], int l, int r) {if (l > r) return;int x q[(l r) / 2], i l - 1, j r 1;while (i < …

VS2022 配置 OpenCV并开始第一个程序

VS2022安装 首先下载 VisualStudioSetup.exe 下载连接&#xff1a;Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 点击上面的链接即可进入到下载页面。进入到下载页面&#xff0c;可看到有几个版本可选&#xff0c;如下&#xff1a; 我选择的是企业版&#xff1a;E…

c++并发编程/多线程 thread 库

系列文章目录 文章目录 系列文章目录-进程-前言base类线程执行函数结果分析小结&#xff0c;行为总结 -c11线程对象创建后既不join()也不detach()的后果-附注代码 -进程 进程是运行着的程序 进程内存空间分配&#xff1a;略 如果主进程结束而子进程未结束&#xff0c;则Linu…

YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

实际项目应用&#xff1a;智能交通管理、城市安防监控、公共安全救援等领域数据集说明&#xff1a;无人机航拍行人检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;…

流量主接入广告:实现盈利与用户体验的平衡

在互联网时代&#xff0c;网站和应用程序的盈利模式之一就是通过接入广告来获取流量变现。作为关键一环的流量主&#xff0c;如何巧妙地接入广告&#xff0c;既保证了盈利&#xff0c;又不损害用户体验&#xff0c;成为了一个备受关注的话题。 admaoyan猫眼聚合 广告形式的选择…

python运算符重载之构造函数和迭代器

1 python运算符重载之构造函数和迭代器 python运算符重载是在类方法中拦截内置操作-当类的实例使用内置操作时&#xff0c;pytho自动调用对应方法&#xff0c;并且返回操作结果。 NO#描述1拦截运算运算符重载拦截内置操作&#xff0c;比如打印、函数调用、点号运算、表达式运…

ubuntu20编译安装pkg-config

从下载到安装的步骤如下: wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.tar.gztar -zxvf pkg-config-0.29.tar.gzcd pkg-config-0.29/./configure --with-internal-glibsudo makesudo make checksudo make install make过程中可能会遇到的问题&#x…

2023年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;通信安全员ABC证证模拟考试题库是根据通信安全员ABC证最新版教材&#xff0c;通信安全员ABC证大纲整理…

DBS note3:B+ Trees

目录 1、介绍 2、B树特征 3、插入 4、删除 5、存储记录 1&#xff09;方法1&#xff1a;按值存储 2&#xff09;方法2&#xff1a;按引用存储 3&#xff09;方法3&#xff1a;按引用列表存储 6、聚类&#xff08;Clustering&#xff09; 1&#xff09;非聚类&#xff…

调整Windows键盘上只能看到拼音而无法看到实际的文本以及关闭输入法悬浮窗方法

一、输入法设置 如果您在键盘上只能看到拼音而无法看到实际的文本&#xff0c;这可能是因为您的输入法设置为中文拼音输入法或其他仅显示拼音的输入法。 要解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 切换输入法&#xff1a;按下 Shift Alt 组合键或 Wind…

python -opencv 边缘检测

python -opencv 边缘检测 边缘检测步骤: 第一步&#xff1a;读取图像为灰度图 第二步&#xff1a;进行二值化处理 第三步&#xff1a;使用cv2.findContours对二值化图像提取轮廓 第三步&#xff1a;将轮廓绘制到图中 代码如下&#xff1a; from ctypes.wintypes import SIZ…