cypress - Cypress - 返回包含多个特定字符串的元素
问题描述
我正在尝试使用赛普拉斯进行自动化测试,其中涉及验证约会信息是否正确输入到我们的系统中。为了找到约会信息,我在显示用户的表格上定位日期和时间,并从那里验证其余数据。所以我的主要目标是找到与传递到脚本中的约会信息相匹配的日期/时间。
我的问题是,我们的网站根据小时槽包含的位数不同呈现日期/时间。为了保持间距,个位数小时(例如下午 3:40)在日期和时间之间包含两个空格。多位数小时(例如上午 11:23)仅包含一个空格。
我需要找到与我传递给函数的日期/时间相匹配的日期/时间,然后搜索相应的行以确保所有其他约会信息都是正确的。
我们尝试使用 .and(仅作为断言,因此它不会为我们返回元素)、正则表达式(使用 /s+ 表示任意数量的空格)和 for 循环,但这些都没有返回我们需要的元素。
var apptProvider = new Cypress.Promise(resolve => {
cy.get('.appointments > tbody > tr')
.contains(Cypress.moment(apptInv[2], 'dddd MMMM Do YYYY')
.format('ddd MM/DD/YY')
.toString()+" "+
Cypress.moment(apptInv[3], 'h:mm:ss a')
.format('h:mm A')
.toString(),
)
.parent()
.within(() => {
cy.get('td:nth-child(2)').then($providerText => {
resolve($providerText.get(0).innerText);
});
});
});
apptInv 是一个包含以下内容的数组:0) 提供者名称 1) 办公地址 2) 预约日期 3) 预约时间
解决方案
您不应该依赖文本表示来缩小此处的约会范围,因为它复杂、棘手且容易更改。相反,您可以生成不受任何 UI/UX 更改影响的更简单的唯一键。例如
<tr data-cy='${appointment.provider + appointment.date + appointmentTime}'>
....
</tr>
然后用cy.get('[data-cy=....]')选择一个约会
推荐阅读
- javascript - Content Security Policy
- python - 分发关键字参数的最佳方法?
- node.js - MEAN stack app not opens from instagram profile
- amazon-web-services - s3列表对象使用sdk返回null
- asp.net-core - Using yarn to add a package removes existing modules
- ios - iPhone XR 返回正确的 nativeBounds 但设备上的屏幕尺寸错误
- javascript - How to insert record to SharePoint List Multi Choice Field
- python - SQLAlchemy 多对多与多个表的单个链接
- python - ValueError: filedescriptor out of range in select()
- javascript - 根据端口号获取 tcp/udp 协议名称(字符串)?