You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:02:49