如何单击变量中按值选择的元素



我有变量:
const tommorow = DateTime.now().plus({days:1}).toFormat('dd')

我需要单击按其值选择的元素:cy.get('#dt_hidden > div > ul > li:nth-child(1) > div > div.datepicker-days > table > tbody').contains(tommorow).click()

元素:<td data-action="selectDay" data-day="12.01.2022" class="day">12</td>

我的问题是,它找到了2个元素,使用"last"或eq(1(不起作用。我该怎么办?

不管问题的细节如何,都应该在将要交互的元素中添加一些data-testid,以避免出现脆弱的选择器。根据你的应用程序,这可能会大大简化你的问题。

当文本中只有几个数字时,.contains(tommorow)似乎可以很容易地匹配多个单元格,contains((将部分匹配。

属性中有完整的日期,您可以选择

const tomorrow = DateTime.now().plus({days:1}).toFormat('dd.mm.yyyy')
cy.get('#dt_hidden > div > ul > li:nth-child(1) > div > div.datepicker-days > table > tbody')
.find(`td[data-day="${tomorrow}"]`)

你计算tomorrow的方式在我看来很奇怪,你可能需要调整一下。

我也会质疑eq(1)为什么不起作用。


您可以使测试始终从同一固定日期运行,然后测试不依赖于当前日期

const now = new Date(2017, 3, 14).getTime()
cy.clock(now)
cy.visit(appUrl)  // set clock before visit

文档

最新更新