【发布时间】:2021-07-27 13:22:47
【问题描述】:
我想使用 cypress 测试日历,但无法选择我需要的日期或任何日期,理想的是动态代码,我可以在其中输入天数,它会选择正确的数字。
我正在使用此代码,但我收到一条错误消息,提示 “无法读取未定义的属性 'includes'”
let date = new Date()
date.setDate(date.getDate() + 5)
let futureDay = date.getDate()
console.log(futureDay)
let futureMonth = date.toLocaleString('default', { month: 'long' })
cy.get('.flatpickr-current-month')
.invoke('attr', 'flatpickr-monthDropdown-month')
.then(dateAttribute => {
if (!dateAttribute.includes(futureMonth)) {
cy.get('.flatpickr-next-month').click()
} else {
cy.get('.dayContainer')
.contains(futureDay)
.click()
}
})
如有必要,我可以在元素中添加独特的属性(我尝试过,但仍然没有用)。 我很好地尝试了一个更简单的代码:
cy.get('#inception_date').click()
cy.get('.flatpickr-days > .dayContainer',)
.contains('17')
.click({force: true})
cy.get('#inception_date')
.invoke('prop', 'value')
.should('contain', '2021-07-17')
在此代码中,我收到错误 Timed out retrying after 4000ms: expected '2021-07-27' to include '2021-07-17' 因为它没有选择任何日期,它仍然是今天的日期。
【问题讨论】:
-
元素
<div class="flatpickr-current-month">上没有 attrflatpickr-monthDropdown-month。 DOM 中的屏幕截图中的“七月”在哪里?这就是您要定位的元素。 -
@SteveZodiac 这里是七月。
<option class="flatpickr-monthDropdown-month" value="6" tabindex="-1">July</option> -
不,这只是您打开下拉菜单时显示的选项之一。
-
我只能在道具中看到选择日期,但在 DOM 中看不到。它显示的唯一不同之处是这里
<span class="flatpickr-day selected" aria-label="July 21, 2021" tabindex="-1">21</span>。如果您选择一天,则只有选择出现在类属性前面 -
是的,
select持有所选选项的value并显示其文本(全部在选择内部,在 DOM 中不可见)。