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

Cypress数组断言失败问题求助:比较数组时提示对象类型不匹配

Cypress数组断言失败问题求助:比较数组时提示对象类型不匹配

嘿,刚接触Cypress遇到这种问题太正常啦,我来帮你捋捋问题出在哪,以及怎么解决~

首先看你这段代码的核心问题:你误解了cy.get()的用法,它是用来查询DOM元素的,参数得是CSS选择器或者jQuery对象,不能直接传数组哦!你之前写的cy.get(desiredCEXs)和cy.get(expectedCEXnames)都是错误用法,这就导致你拿到的根本不是数组,而是Cypress的元素集合对象,自然会提示类型不匹配。

你的需求应该是:先定义好期望的交易所数组,再从页面上提取实际显示的交易所名称组成数组,最后断言两者的成员一致对吧?那正确的写法应该是这样的:

Then('I assert what exchanges KIRA Network is listed on', () => {
  // 预定义你期望的交易所数组(注意这里你写了两个Gate.io,确认页面确实显示两次哦)
  const desiredCEXs = ['Gate.io', 'AscendEX (BitMax)', 'Uniswap V2 (Ethereum)', 'Gate.io'];
  
  // 定位到页面上的交易所行,提取文本组成实际数组
  cy.get('tbody').eq(4).find('tr')
    .then($rows => {
      // 把jQuery对象转成原生数组,再提取每行的文本并去除空格
      const actualCEXnames = Array.from($rows).map(row => row.textContent.trim());
      
      // 断言实际数组包含所有期望的成员(顺序不影响)
      expect(actualCEXnames).to.have.all.members(desiredCEXs);
      
      // 如果要求顺序完全一致,就换成下面这句
      // expect(actualCEXnames).to.deep.equal(desiredCEXs);
    });
});

我再给你拆解下关键步骤:

  • 用cy.get('tbody').eq(4).find('tr')定位到所有交易所行,得到的是Cypress的元素集合(jQuery对象)
  • 通过Array.from($rows)把它转成原生JavaScript数组,这样就能用map方法提取每个元素的文本内容了
  • 最后用Chai断言库的have.all.members来判断两个数组的成员是否完全匹配(不关心顺序),如果需要严格顺序一致就用deep.equal

另外提醒下,你之前定义的expectedCEXnames数组没有被正确填充,而且也不需要用cy.get()去调用它,直接在断言里使用数组本身就行啦。

备注:内容来源于stack exchange,提问作者test automation learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:18:05