我正在尝试计算select元素中的选项数量,以及DOM中某个类的元素数量。
我需要比较赛普拉斯断言的两个总数。
我可以选择我需要的选项,并使用each()迭代它们,并以这种方式递增计数器。但是,它是异步的,它也是一个笨拙的解决方案。我确定我的cy.get()产生的对象有一个长度属性,我似乎无法得到它。
这是我期望工作的一件事。它将 undefined 记录到控制台。
cy.get('div[data-cy-type="group-component"]:first').as('firstGroup');
cy.get('@firstGroup').find('[name=group_id]').as('groupSelect');
console.log(cy.get('@groupSelect').children('option').length);
我知道我的别名是好的,我的cy.get()正在产生正确的选择元素。
如果我这样做:
cy.get('@groupSelect').children('option').each(function(){
console.log(i++);
});
然后它将迭代每个选项。但它是异步的,所以在这个流程中没有多大帮助。
答案 0 :(得分:2)
也许你可以利用Cypress.$。但请注意,文档并未准确地将其作为测试工具进行宣传:
这是在调试时同步查询元素的好方法 来自开发人员工具。
无论如何,我相信这条线上的东西会产生你期望的价值:
selector = 'div[data-cy-type="group-component"]:first select[name=group_id] option'
count = Cypress.$(selector).length
答案 1 :(得分:0)
您可以简单地访问cypress选择器的length属性。
cy.get('.elements')
.its('length')
.then(lengthOfClassElements => cy
.get('select > option')
.its('length')
.then(lengthOfOptions => {
expect(lengthOfClassElements).to.be.moreThan(lengthOfOptions)
});
答案 2 :(得分:0)
我发现,无论出于何种原因,我都需要将get
链两次。第一个get
应该选择一个父元素,然后第二个应该选择所有要计算在该父元素下的元素。
const expectedCount = 5; // whatever count you expect
cy.get('.parentClass').get('.childClass').should('have.length', expectedCount);