这是情况。我正在使用赛普拉斯来测试用户在输入字段中键入文本的情况。用户开始输入时,将显示一个下拉列表,其中包含选择选项列表。然后,赛普拉斯会找到正确的选项,并能够自动填充该字段。
问题在于,当Cypress在输入字段中键入内容时,DOM甚至没有将事件侦听器加载到输入元素上。因此,不会创建下拉列表。这是赛普拉斯的一种已知种族状况,已有充分的文献记录和讨论。
我一直试图实现的解决方案没有运行cy.wait(),而是使用了for循环并多次在字段中键入内容,直到应用程序有机会附加事件监听器为止。因为Cypress是同步的,所以使用cy.get检查下拉列表是否存在将导致测试失败。因此,我正在使用Jquery检查选择选项的列表,如果找不到该列表,请再次循环。
这似乎是一个很好的解决方案。但是,当我调试规范时,即使我暂停赛普拉斯测试并看到列表在那里,JQuery也永远找不到选择选项的列表!
这是for循环:
for (let attemptCnt =0; attemptCnt<5; attemptCnt++) {
//Cypress steps for clearing the input field and typing in the value. This works fine.
cy.get(attrName).clear().type(` {backspace}${value}`);
//JQuery for searching for the list of select options
if (Cypress.$(document).find('.mat-option-text').length > 0) {
cy.log("mat-option-text now exists.. break from loop at try number " + attemptCnt.toString());
break;
}
else {
cy.log("Number of failed attempts to generate the mat-option-text element: " + attemptCnt.toString());
}
}```