Cypress中校验输入框时间戳:忽略分秒及解决报错问题
问题解决方法
1. 先修正断言错误
你这段代码里用的.have.text是Cypress专门用来断言元素文本内容的方法,但你已经通过.invoke('val')拿到了输入框的字符串值,不能再用这个断言,得换成字符串相关的断言:
- 要是只需要检查输入框内容包含目标时间片段,用
.include() - 要是要检查输入框内容完全匹配到小时的时间格式(不管后面的分秒),用
.equal()
2. 实现忽略分秒的时间校验
考虑到校验耗时会导致分秒不准,我们只校验到小时级别,两种方法任选:
方法一:直接检查文本包含目标时间格式
const dayjs = require('dayjs') companionPage.countNameInputBox().invoke('val').then((text) => { const currentHourFormat = dayjs().format('YYMMDD HH') // 检查输入框内容里有这个小时级别的时间 expect(text.trim()).to.include(currentHourFormat) })
方法二:解析时间后统一对比小时
如果输入框里是完整的时间(比如YYMMDD HH:mm:ss),可以把它转成dayjs对象,再格式化到小时级别和当前时间对比:
const dayjs = require('dayjs') companionPage.countNameInputBox().invoke('val').then((text) => { // 这里的解析模板要和输入框的时间格式对应,比如输入是YYMMDD HH:mm:ss就用这个 const inputTime = dayjs(text.trim(), 'YYMMDD HH:mm:ss') const currentTime = dayjs() // 只对比到小时的格式 expect(inputTime.format('YYMMDD HH')).to.equal(currentTime.format('YYMMDD HH')) })
报错原因说明
你碰到的错误就是断言方法用错了:.have.text只能直接用在Cypress的元素对象上(比如cy.get('input').should('have.text', 'xxx')),但你这里已经用.then()把输入框的值拿成字符串了,必须用字符串对应的断言方法,比如include、equal这类。
内容的提问来源于stack exchange,提问作者Blim
相关产品推荐
相关产品推荐

