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

Cypress断言时报Cannot read properties of undefined (reading 'toLowerCase')错误如何解决?

问题根因及修复方案

1. 直接报错原因:cy.get()入参使用错误

你当前触发报错的核心问题是测试步骤中cy.get(elements.selection())的用法完全不符合Cypress的语法要求:

  • elements.selection()方法本身已经返回了cy.get('.__selection')的Cypress链式调用对象,并非CSS选择器字符串
  • cy.get()仅支持传入字符串类型的选择器、元素别名或DOM节点,传入Cypress调用对象会触发内部处理逻辑异常,你看到的Cannot read properties of undefined (reading 'toLowerCase')报错,就是Cypress内部尝试对非字符串的入参执行转小写操作失败导致的。

2. 修复代码

基础修复

直接去掉外层多余的cy.get()即可:

And ("The number of elements is {string}", (number) => {
  elements.selection().should('be.visible').should('have.length', number);
})

优化适配业务场景

针对你验证投注项添加的需求,建议调整断言顺序避免偶发超时:

And ("The number of elements is {string}", (number) => {
  elements.selection()
    // 先断言长度符合预期,确认所有投注项已插入DOM,可自定义超时时间覆盖默认4s限制
    .should('have.length', number, {timeout: 10000})
    // 逐一枚举校验所有投注项可见,避免容器可见但子项未渲染的假阳性情况
    .each(el => {
      cy.wrap(el).should('be.visible');
    })
})

调整断言顺序的逻辑:如果先校验可见性,在投注项还在插入DOM的过程中就会直接触发断言失败,先校验长度达标后再校验可见性,完全匹配「选中选项添加到投注单」的业务流程。

3. 异常排查补充

如果修复上述代码后仍有报错,可逐一排查以下两点:

  • 确认.__selection是单条投注项的选择器,若为投注单容器选择器,长度永远为1,无法和投注项数量匹配
  • 确认添加投注项操作后没有异步渲染、过渡动画,如果有可在添加操作后增加合理等待,或监听关联接口请求完成后再执行断言

内容的提问来源于stack exchange,提问作者BruceyBandit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:45:01