在赛普拉斯如何计算项目的选择并获得长度?
In Cypress how to count a selection of items and get the length?
我开始学习 Cypress。我有 4 行 table(有 class 数据 table)。我可以这样验证行数:
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
来自cypress API docs .should() section, using an arrow function:
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 notation 并在您的元素列表中断言多个事物。
您还可以获得所选项目的长度through its property,例如:
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)
我使用 Cypress 版本 3.1.0 和 3.2.0 进行了测试。
一种选择是使用 "have.length" ...
cy.get('.datatable tr').should('have.length', 4)
...另一种选择是使用 should
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);
});
.children(选择器(byId,class,自定义属性)产生DOM
元素并重试直到 defaultCommandTimeout 超过。
赛普拉斯配置 defaultCommandTimeout
一旦 DOM 元素 存在并产生 添加 length
断言。
<ul data-qa="qa-navbar">
<li>Home</li>
<li>About</li>
<li>Services</li>
<li>Our Team</li>
<li>Contact Us</li>
</ul>
cy
.get('[data-qa="qa-navbar"]') // selector
.children() // get direct decendents
.should('have.length', 5); // add assertion to have lenght of 5
西
.get('ul[data-qa="qa-navbar"] li') // 选择器
.should('have.length', 5) // 断言
我的用例是比较那个,说不。页面上的“i”图标应与编号匹配。 table 行。所以,这个解决方案适用于它,即当我想比较编号时。一个选择器与另一个选择器的元素
cy.get('first element').its('length').then((val)=>{
cy.get('second element).its('length').should('eq',val)
})
在 its
捕获请求的 属性(在本例中为长度)之后写入 then
并在第一个 then
块内,我们通过获取第二个元素的长度
获取使用 cypress 命令所需的长度:
cy.get('[ng-repeat="item in catalog"]').then(($el) => {
const itemCount = Cypress.$($el).length;
cy.log(itemCount)
})
- In the element locator "aria-setsize" property to find the "number of items in the current set of listitems or treeitems" can be used.
- Within ".then" function, for the previously yielded element. Use ".length" jquery as below.
- To find the list of: Best Sellers in Computers & Accessories, in "Amazon.in" home screen.
it('test', () => {
cy.visit('https://www.amazon.in/ref=nav_logo')
cy.wait(3000)
cy.get('#desktop-5 li[aria-setsize]')
.then(($el) => {
const count= $el.length
cy.log(count)
})
})
它将尝试直到找到 4 个匹配的 .datatable > tr
cy.get('.datatable').find('tr')
.should('have.length', 4)
当你在承诺的 .then() 部分时,正文变量已经解析:
cy.get("body").then($body => {
cy.log($body.find(".datatable tr").length);
});`
我开始学习 Cypress。我有 4 行 table(有 class 数据 table)。我可以这样验证行数:
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
来自cypress API docs .should() section, using an arrow function:
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 notation 并在您的元素列表中断言多个事物。
您还可以获得所选项目的长度through its property,例如:
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)
一种选择是使用 "have.length" ...
cy.get('.datatable tr').should('have.length', 4)
...另一种选择是使用 should
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);
});
.children(选择器(byId,class,自定义属性)产生DOM 元素并重试直到 defaultCommandTimeout 超过。
赛普拉斯配置 defaultCommandTimeout
一旦 DOM 元素 存在并产生 添加
length
断言。
<ul data-qa="qa-navbar">
<li>Home</li>
<li>About</li>
<li>Services</li>
<li>Our Team</li>
<li>Contact Us</li>
</ul>
cy
.get('[data-qa="qa-navbar"]') // selector
.children() // get direct decendents
.should('have.length', 5); // add assertion to have lenght of 5
西 .get('ul[data-qa="qa-navbar"] li') // 选择器 .should('have.length', 5) // 断言
我的用例是比较那个,说不。页面上的“i”图标应与编号匹配。 table 行。所以,这个解决方案适用于它,即当我想比较编号时。一个选择器与另一个选择器的元素
cy.get('first element').its('length').then((val)=>{
cy.get('second element).its('length').should('eq',val)
})
在 its
捕获请求的 属性(在本例中为长度)之后写入 then
并在第一个 then
块内,我们通过获取第二个元素的长度
获取使用 cypress 命令所需的长度:
cy.get('[ng-repeat="item in catalog"]').then(($el) => {
const itemCount = Cypress.$($el).length;
cy.log(itemCount)
})
- In the element locator "aria-setsize" property to find the "number of items in the current set of listitems or treeitems" can be used.
- Within ".then" function, for the previously yielded element. Use ".length" jquery as below.
- To find the list of: Best Sellers in Computers & Accessories, in "Amazon.in" home screen.
it('test', () => {
cy.visit('https://www.amazon.in/ref=nav_logo')
cy.wait(3000)
cy.get('#desktop-5 li[aria-setsize]')
.then(($el) => {
const count= $el.length
cy.log(count)
})
})
它将尝试直到找到 4 个匹配的 .datatable > tr
cy.get('.datatable').find('tr')
.should('have.length', 4)
当你在承诺的 .then() 部分时,正文变量已经解析:
cy.get("body").then($body => {
cy.log($body.find(".datatable tr").length);
});`