检查元素是否在cypressIO中按字母顺序排序

时间:2018-12-12 14:14:28

标签: javascript cypress

断言使用cypressIO将元素按字母顺序排序时的最佳实践是什么? 我想基本上检查一下element[0].text()之前是否正确排序了element[1].text(),但对于下面的摘录中的所有元素来说,都是如此:

cy.get('#main div').each((account) => {

    });
  });

2 个答案:

答案 0 :(得分:2)

适用于 Cypress 7.x 的解决方案

cy.get('#main div').then($elements => {
  const strings = [...$elements].map(el => el.innerText)
  expect(strings).to.deep.equal([...strings].sort())
})

推理:

  • jQuery .map 与普通 JS .map 的工作方式不同,因为它采用不同顺序的参数(index, el 而不是 el, index)并且不返回纯数组,这是未来排序所需要的。这就是为什么将 jQuery 元素列表扩展为纯数组的原因。
  • Array.sort() 就地工作,所以排序前需要克隆数组,否则会比较相同的数据。
  • 要比较数组的值,需要进行深度比较,因此需要使用带有 expectsdeep.equal 的 Chai 语法。

答案 1 :(得分:0)

我认为这或类似的方法将为您工作(没有尝试过)。它会获取与您提供的选择器匹配的所有元素的文本,并将其存储在数组中,然后断言该数组在排序之前和之后都匹配。

cy.get('#main div').then($elements => {
  var strings = $elements.map($el => $el.text());
  cy.wrap(strings).should("equal", strings.sort()); // you may need deep equal here instead
});