如何解决Cypress - 遍历元素数组
我有一小段代码可以返回 1 个或 2 个 Web 元素 (cy.get) 的数组。元素是复选框,或者更确切地说 - 在这个 Angular 应用程序中效果更好的复选框标签。
我正在尝试遍历数组并单击每个元素(选中复选框)。如果数组只包含一个元素,它工作正常。但是当有两个元素时,第二个元素被点击了两次,导致最后没有框被选中。
if (formal == Formal.KJOP) {
this.getFinansieringsmuligheterKjop().forEach( (element) => {
element.click({force:true});
});
}
private getFinansieringsmuligheterKjop(): Cypress.Chainable<JQuery<HTMLElement>>[] {
if (Helpers.randomBoolean()) {
return new Array(formalPage.grunnlanTilKjopLabel);
} else {
return new Array(formalPage.grunnlanTilKjopLabel,formalPage.tilskuddUtleieLabel);
}
}
既然它适用于被点击的元素,也适用于元素的数量,我想在循环中访问元素有什么问题吗?
解决方法
这很好地说明了为什么 页面对象 模式在 Cypress 和它的命令队列模式中不能很好地工作。
问题是混合了 Cypress 队列命令,这些命令异步运行到测试代码和页面对象代码。
方法 getFinansieringsmuligheterKjop()
不返回元素数组,它返回 Cypress.Chainable<JQuery<HTMLElement>>
数组,您可以将其视为未解析的查询数组。
为了解决问题,在返回之前先解决元素。
private getFinansieringsmuligheterKjop(): Cypress.Chainable<JQuery<HTMLElement>> {
return formalPage.grunnlanTilKjopLabel.then(label1 => { // evaluate the first label
formalPage.tilskuddUtleieLabel.then(label2 => { // evaluate the second label
const elements = Helpers.randomBoolean()
? new Array(label1)
: new Array(label1,label2);
return elements;
})
})
您还必须更改 Cypress .forEach()
命令的同步 .each()
if (formal == Formal.KJOP) {
this.getFinansieringsmuligheterKjop().each(label => {
cy.wrap(label).click();
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。