私はサイプレスを学び始めています。 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}
が返されます。ここからどこに行くかわかりません。これは非常に一般的な対処方法のようです。
解決策が見つかりました。これはアイテムの数を確認するために機能します。
cy.get('.datatable').find('tr').should('have.length', 4)
これは、Cypress.$()
表記法では機能しません。
リファレンス: https://docs.cypress.io/guides/references/assertions.html#Length
選択したアイテムの長さを取得することもできます そのプロパティを介して 、例えば:
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)
に加えて
サイプレス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表記法 を使用して、要素のリストに複数のことをアサートできます。
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)
})
より柔軟で動的な結果が必要な場合は、これを使用してください。
cy.get('.listings-grid')
.find('.listing')
.then(listing => {
const listingCount = Cypress.$(listing).length;
expect(listing).to.have.length(listingCount);
});