我正在尝试将赛普拉斯用于自动测试,该测试涉及验证约会的信息是否正确输入到我们的系统中。为了找到约会信息,我将在显示用户的表上找到日期和时间,并从那里验证其余数据。因此,我的主要目标是找到与传递到脚本中的约会信息匹配的日期/时间。
我的问题是,我们的网站根据小时槽包含的位数来不同地呈现日期/时间。为了保持间隔,单位小时(例如3:40 pm)在日期和时间之间包含两个空格。多位数的小时数(例如上午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)预约时间
答案 0 :(得分:0)
您不应该依赖文本表示来缩小约会范围,因为它既复杂,棘手又易于更改。相反,您可以生成一个更简单的唯一键,不受任何UI / UX更改的影响。例如
<tr data-cy='${appointment.provider + appointment.date + appointmentTime}'>
....
</tr>
然后使用 cy.get('[data-cy = ....]')
选择一个约会