在调试Cypress测试时,jquery无法找到元素

时间:2020-08-18 16:54:45

标签: javascript jquery synchronization cypress

这是情况。我正在使用赛普拉斯来测试用户在输入字段中键入文本的情况。用户开始输入时,将显示一个下拉列表,其中包含选择选项列表。然后,赛普拉斯会找到正确的选项,并能够自动填充该字段。

问题在于,当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());
        }
    }```

0 个答案:

没有答案