我有变量: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
文档