我需要等待文本出现在我的应用程序的文本框中。问题是,文本加载通常需要 1 到 5 秒,有时甚至更长,并且某些文本框不包含文本,这使得无法使用 cypress-wait-until,因为它只是等待文本出现并导致测试失败60秒后未加载。这是我当前的实现:
cy.get(elementSelector)
.if()
.find(this.helpTextArea)
.then(($helptextBox) => {
let helptext = $helptextBox.text();
helptext = helptext.trim() ? helptext : null;
if (additionalHelptext) {
questionModel.additionalHelptext = helptext;
} else {
questionModel.helptext = helptext;
}
});
我认为最有效的解决方案是一些软断言,它不会在没有文本的文本框上测试失败,但据我所知,Cypress 不支持任何类型的软断言。
尝试过:cypress-wait-until(找不到文本时失败)、cy.wait()(增加了测试执行时间,不可靠)。
您的测试应尽可能具有确定性,因此不建议使用 waitUntil 等片状函数。
相反,增加查询的超时时间,因为你说“超过 5 秒”,我猜测 10 秒是合适的上限。
您可以使用字符串插值构建选择器。
要获取文本,请调用
text()
,它将返回文本或空字符串。
cy.get(`${elementSelector} ${this.helpTextArea}`)
.invoke('text')
.then(helptext => {
if (helptext) {
// process helptext here
} else {
// use additional text here
}
})