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

Tes*_*ter 5 javascript cypress

使用 cypressIO 断言元素按字母顺序排序时的最佳实践是什么?我想基本上检查element[0].text()之前是否正确排序,element[1].text()但对于以下代码段中的所有元素:

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

    });
  });
Run Code Online (Sandbox Code Playgroud)

Tes*_*ick 6

布伦丹的回答中有一些问题

  • $elements.map()它的回调中有两个参数。第一个是jQuery对象中元素的索引,而不是元素

  • 第二个参数是 DOM 元素,所以.text()不起作用,innertText需要

  • strings不能像数组一样测试结果,因为它是另一个jQuery对象,需要在断言之前将其转换为数组

  • cy.wrap(strings).should("equal", strings.sort())jQuery 包装器对象与其自身进行比较,给出误报结果

这是应该发布的测试版本

cy.get('main#1 div')
  .should($elements => {
    const strings = $elements.map((index, el) => el.innerText).get()
    return strings
  })
  .should('deep.eq', ['a', 'b', 'c'])
Run Code Online (Sandbox Code Playgroud)

测试 HTML:

<main id="1">
  <div>a</div>
  <div>b</div>
  <div>c</div>
</main>

<main id="2">
  <div>c</div>
  <div>b</div>
  <div>a</div>
</main>

<main id="3">
  <div>b</div>
  <div>c</div>
  <div>a</div>
</main>
Run Code Online (Sandbox Code Playgroud)

请参阅jQuery .map()

回调
类型:Function( 整数索引, Element domElement ) => Object


Bre*_*dan 3

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

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
});
Run Code Online (Sandbox Code Playgroud)

  • 啊,为什么我没有想出这个:)不过你的代码对我不起作用。还得到了 `.TypeError: $el.text is not a function` 我这样做了并且它起作用了: `var account =[]; cy.get('#main div').each(elements =&gt; { strings.push(elements.text()); }); cy.wrap(accounts).should("等于",accounts.sort());` (4认同)