web-dev-qa-db-ja.com

サイプレスでは、アイテムの選択をカウントして長さを取得する方法は?

私はサイプレスを学び始めています。 4行のテーブル(クラスのデータテーブル)があります。この方法で行数を確認できます。

cy.get('.datatable').find('tr').each(function(row, i){
        expect(i).to.be.lessThan(4)
})

これは問題ありませんが、長さを数えたいだけで、行の内容に実際にアクセスする必要がないため、厄介なように見えます。

選択をログに記録する場合(他に何を呼び出すかわからない):

cy.log(cy.get('.datatable').find('tr'))

それは[object Object]として出てきますが、それをどのように分解するのかよくわかりません。これは、私がこのことを間違っていると考えていることを示唆しています。

私が試した場合:

expect(cy.get('.datatable').find('tr')).to.have.lengthOf(4)

AssertionError: expected { Object (chainerId, firstCall) } to have a property 'length'を取得します

私が試した場合:

    expect(Cypress.$('.datatable > tr')).to.have.lengthOf(4)

AssertionError: expected { Object (length, prevObject, ...) } to have a length of 4 but got 0を取得するので、少なくともここには長さがありますか?

その選択方法をログに記録すると、Object{4}が返されます。ここからどこに行くかわかりません。これは非常に一般的な対処方法のようです。

22

解決策が見つかりました。これはアイテムの数を確認するために機能します。

cy.get('.datatable').find('tr').should('have.length', 4)

これは、Cypress.$()表記法では機能しません。

リファレンス: https://docs.cypress.io/guides/references/assertions.html#Length

42

選択したアイテムの長さを取得することもできます そのプロパティを介して 、例えば:

cy.get('.datatable').find('tr').its('length').should('eq', 4)
cy.get('.datatable').find('tr').its('length').should('be.gte', 4)

should('have.length', 4)に加えて

enter image description here サイプレスバージョン3.1.0および3.2.0でテストしました。

16
Yuci

サイプレスAPIドキュメント.should()セクション から、 矢印関数 を使用して:

cy.get('.datatable').find('tr').should(($listOfElements) => {
   expect($listOfElements).to.have.length(4)
   // any other assertions, for example the below one
   // expect($listOfElements).to.have.any.keys('key1', 'key2')
})

このアプローチにより、 Chai BDD表記法 を使用して、要素のリストに複数のことをアサートできます。

4
lauri108

1つのオプションは、「have.length」を使用することです...

cy.get('.datatable tr').should('have.length', 4)

...別のオプションは

cy.get('.datatable tr').should(($tr) => {
    expect($tr).to.have.length(4)
})

...または(同期クエリ)

cy.get('.datatable').then(($table) => {
  // synchronously query to find length of elements
  expect($table.find('td').length).to.equal(4)
})
1
0x4a6f4672

より柔軟で動的な結果が必要な場合は、これを使用してください。

cy.get('.listings-grid')
  .find('.listing')
  .then(listing => {
    const listingCount = Cypress.$(listing).length;
    expect(listing).to.have.length(listingCount);
  });