元素定位与选择器

元素定位与选择器

做元素定位时,你是否曾遇到过以下难题
  • 元素 ID 或 class 是动态生成的
  • 你使用了 CSS选择器去定位,但开发把元素CSS样式改掉了

这种情况下通常会测试失败

Cypress 如何解决上述难题

提供了 data-* 属性,包含了下面三个定位器

  • data-cy

  • data-test

  • data-testid

注意
  • 它们都是 Cypress 专有的定位器,仅用来测试
  • data-* 属性和元素的行为或样式无关,意味着即使 CSS 样式或 JS 行为改变,也不会导致测试失败
  • 在实际项目中,需要自己将 data-* 属性加到元素中,意味着你得有权限修改代码
常规选择器
#id 选择器
cy.get("#main1").click()
.class 选择器
cy.get(".btn").click()
属性选择器
cy.get("button[id='main2']").click()
:nth-child(n) 选择器
cy.get("ul>li:nth-child(3)").click()
Cypress.$定位器

针对难以用普通方式定位的元素,Cypress 还提供了 JQuery选择器

Cypress.$('#main2')
// 等价于cy.get('#main2')

查找页面元素的基本方法

cy.get(selector)

该用法用来在 DOM 树中查找 selector 对应的 DOM 元素,如果可以匹配多个元素,则返回多个元素

it('test get',()=>{
        cy.get('#main1').click();
    })
.find(selector)

该定位方法用来在 DOM 树中搜索已被定位到的元素的后代,并将匹配到的元素返回为一个新的 jQuery 对象【注意,不是返回元素对象

it('test find',()=>{
        cy.get('ul').find('[data-test="li3"]')
    })
.contains()

该方法可用来获取包含指定文本的 DOM 元素

cy.contains('submit');//从整个dom中查找
cy.get('.btn').contains('submit');//从.btn元素中查找
cy.contains('.btn','submit');//从.btn元素中查找
  • contains支持正则表达式匹配

  • 只会返回第一个匹配到的元素

查找页面元素的辅助方法

.children()

用来获取 DOM 元素的子元素

 it('test childen',()=>{
        cy.get('ul').children();
        cy.get('ul').children('#li1');
    })

在这里插入图片描述

在这里插入图片描述

.parents()

用来获取 DOM 元素的所有父元素,包括了爷爷级别、祖父级别…

在这里插入图片描述

.parent()

用来获取 DOM 元素的第一层父元素

在这里插入图片描述

.siblings()

用来获取 DOM 元素的所有同级元素

it('test siblings',()=>{
     cy.get('#li1').siblings()
})

在这里插入图片描述

.first()
  • 匹配给定的 DOM 元素列表中的第一个元素
  • 重点:如果是单个 DOM 元素调用此方法,则返回自己
.last()
  • 匹配给定的 DOM 元素列表中的最后一个元素

  • 重点:如果是单个 DOM 元素调用此方法,则返回自己

    it('test first and last',()=>{
            cy.get('ul > li').first();
            cy.get('ul > li').last();
        })
    

    在这里插入图片描述

next家族
.next()

获取给定的 DOM 元素后面紧跟的下一个同级元素

在这里插入图片描述

.nextAll()

获取给定的 DOM 元素后面紧跟的所有同级元素

在这里插入图片描述

.nextUntil(selector)

获取给定的 DOM 元素后面紧跟的所有同级元素,直到遇到 Until 里定义的元素为止

在这里插入图片描述

prev家族
.prev()

获取给定的 DOM 元素前面紧跟的上一个同级元素

.prevAll()

获取给定的 DOM 元素前面紧跟的所有同级元素

.prevUntil()

获取给定的 DOM 元素前面紧跟的所有同级元素,直到遇到 Until 里定义的元素为止

.each()

用来遍历数据或者及其类似的结构(对象有 length 属性即可)

语法

.each(callbackFn)
it('each test',()=>{
        cy.get('ul > li').each($li=>{
            cy.log($li.text())
        })
    })

在这里插入图片描述

  • $li是一个变量名,每次循均代表一个jQuery对象
.eq()
  • 在元素或者数组中的特点索引处获取 DOM 元素
  • 作用跟 :nth-child() 选择器一样,只不过下标从0开始

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

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

相关文章

Android Serializable / Parcelable

Serializable 序列化,将对象转为二进制序列 Parcelable 不是序列化,属于进程间通信,不需要IO/操作,没有拷贝内存的操作, Object -> ShareMemory -> Object 不需要IO,使用内存共享等方式 Kotlin inline fun 内联函数 TCP协议将数据包拆分,进行发送,保证网络数据的可…

2024测试工程师必学系列之Jmeter(36):jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…

基于Android个人理财家庭收支系统uniAPP+vue -hbuiderx-微信小程序vj9n8

摘 要 个人理财APP设计的目的是为用户提供对活动信息和提醒信息管理等方面的平台。 与PC端应用程序相比,个人理财的设计旨在为用户提供一个个人理财信息的管理。用户可以通过APP及时收入信息和支出信息,并对提醒消息进行查看等。 个人理财APP是在Androi…

echarts折线图修改特定点的颜色

$.ajax({url:"/plc1672Ctrl/selectPage2.ctrl",dataType:"json",type:"POST",cache:false,data:{"serNo":$("#search").val().trim()},success:function(data){var list data.list;// x坐标var x new Array();// y坐标var…

Python的简单web框架flask快速实现详解

文章目录 简介web框架的重要组成部分快速上手flaskflask的第一个应用 flask中的路由不同的http方法静态文件使用模板 总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战…

Midjourney绘画提示词Prompt参考教程

Midjourney绘画提示词Prompt参考教程:无需魔法使用。 一、AI工具 SparkAi: SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常…

oepnpnp - 自己出图做开口扳手

文章目录 oepnpnp - 自己出图做开口扳手概述笔记做好的一套扳手实拍美图工程图END oepnpnp - 自己出图做开口扳手 概述 我的openpnp设备顶部相机安装支架, 由于结构限制, 螺柱的安装位置和机械挂壁的距离太近了. 导致拧紧(手工或者工具)很困难. 也不能重新做相机支架, 因为将…

【Linux】命令lsof使用详解

🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&#x1f…

物联网AI MicroPython学习之语法 ADC数模模块

学物联网,来万物简单IoT物联网!! ADC 介绍 模块功能: ADC数模转换模块 ADC功能在ESP32引脚32-39上可用,使用默认配置时,ADC引脚上的输入电压必须介于0.0v和1.0v之间(任何高于1.0v的值都将读为4095&#x…

「ResNet-18」70 个犬种的图片分类

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

Oracle实时同步技术

Oracle数据库的价值 Oracle数据库是一种高度可靠、安全和强大的关系型数据库管理系统,它具有以下几个方面的价值: 可靠性和稳定性:Oracle数据库以其高度可靠性、稳定性和数据完整性而闻名于世。 安全性:Oracle数据库提供了一系列…

解决uncompyle6反编译报错KeyError

报错内容:KeyError:3.11.0 (这个是我自己的Python版本号) 主要原因就是你的Python版本没在它库文件支持的版本里,我们需要进行手动添加即可。 首先找到文件:magics.py 我的是在这个路径下:D:\…

P9232 [蓝桥杯 2023 省 A] 更小的数(区间DP)

求大数字某连续部分反转后&#xff0c;比原数字小的个数 思路&#xff1a;自前向后遍历 ai是位于数字第i位的数字 aj是位于数字第j位的数字&#xff08;i<j&#xff09; ai>aj f[ai][aj]1; ai<aj f[ai][aj]0; aiaj f[ai][aj]f…

宏电股份荣膺国家知识产权优势企业称号,科技创新与研发实力获国家级认可

近日&#xff0c;国家知识产权局公布了2023年度国家知识产权优势企业的评审结果&#xff0c;宏电股份凭借强大的技术实力和创新能力&#xff0c;荣获“国家知识产权优势企业”荣誉称号。这一荣誉是对宏电股份在技术创新和知识产权创造、运用、保护及管理方面的高度认可&#xf…

通明智云宣布完成数千万元A+轮融资, 引领云原生与信创两翼齐飞的应用交付解决方案

近日&#xff0c;通明智云&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;通明智云&#xff09;宣布完成数千万元A轮融资&#xff0c;由全聚合与信公投资联合投资&#xff0c;明论资本担任本轮融资独家财务顾问。本轮融资资金将主要用于NJet云原生应用引…

华为云IoT与OpenHarmony深度协同,加速设备上鸿即上云【云驻共创】

本次专题论坛探讨了华为云IoT与Open Harmony的深度协同、边缘屏蔽硬件差异、实现智慧隧道全方位智能化管理&#xff0c;以及华为云与Open Harmony生态的合作。同时也介绍了华为云物联网卡平台、HTTP2协议以及华为物联网在交通领域的应用。 一&#xff0e;华为云IoT与Open Harm…

Jmeter 自动化性能测试常见问题汇总

一、request 请求超时设置 timeout 超时时间是可以手动设置的&#xff0c;新建一个 http 请求&#xff0c;在“高级”设置中找到“超时”设置&#xff0c;设置连接、响应时间为2000ms。 1. 请求连接超时&#xff0c;连不上服务器。 现象&#xff1a; Jmeter表现形式为&…

18章总结—Swing程序设计

例题1 package admi; import java.awt.*; import javax.swing.*; public class JFreamTest { public static void main(String[] args) { JFrame jfnew JFrame(); jf.setTitle("创建一个JFrame窗体"); Container containerjf.getC…

ubuntu安装nvm

需求 在 virtualbox 虚拟机上运行的 ubuntu &#xff08;22.04.3&#xff09;里安装 nvm &#xff08;Node Version Manager&#xff09; 简述 官网文档 &#xff08;github地址&#xff09;上有提到两种安装方式&#xff0c;一种是直接 curl | wget 命令安装&#xff0c;一…

Royal TSX v6.0.1(远程管理软件)

MacOS远程管理软件哪款好&#xff1f;Royal TSX mac是一款功能非常强大适用于 Mac 的远程连接管理工具。兼容多种连接类型&#xff0c;比如&#xff1a;RDP、VNC、基于SSH连接的终端&#xff0c;SFTP/FTP/SCP或基于Web的连接管理&#xff0c;Royal TSX 都可以满足您的要求&…