【发布时间】:2020-09-20 03:35:46
【问题描述】:
好的,这是我的情况:
在我正在测试的网站上,我的部分测试包括一个表格,用户可以在其中添加或删除行。我无法控制表格是否为空,因此我需要有条件(IF)来探索两种情况:1.表格为空; 2. 表不为空。
我想出的只是检查表的第一行是否存在。如果是,做一些测试然后继续,如果它没有跳过表格并继续下一个文本。
当然,我不能只尝试在第一行做一个 cy.get,因为如果它没有找到元素,它将无法通过测试,所以我尝试了这个:
cy.get('body').then(($body) => {
if ($body.find('firstRowElement').length > 0, {timeout: 60000}) {
cy.log("Im Inside")
cy.get('firstRowElement').then(($grid) => {
//Do all the tests I need if the first row exists..
)}
}
)}
但它不起作用。即使表是空的,它仍然会进入 IF(我可以看到日志“我在里面”)。然后,当然,在下一行(已经在 IF 内)测试失败,因为它试图对不存在的元素(空表的第一行)执行 cy.get。因此,似乎 IF 语句不起作用。
我做错了什么?
PS:我需要超时,因为加载表格需要几秒钟。我尝试将超时移动到.find (like this - if ($body.find('firstRowElement', {timeout: 60000}).length > 0) 内部,但情况更糟。当它是这样的时候,它根本不会等待并跳过所有内容,因为表还没有加载。我也不想用cy.wait
有人可以帮帮我吗?
我倾向于认为.find 和超时之间存在某种冲突。
【问题讨论】:
-
这能回答你的问题吗? Cypress - if then functions
-
它没有。第一个回复确切地表明了我在做什么(在我的情况下它不起作用),第二个回复提到那个人正在点击标签而不是复选框。
-
你可以使用cypress-wait-until
-
if ($body.find('firstRowElement').length > 0, {timeout: 60000})很奇怪 - 超时选项通常应用于赛普拉斯命令,但这里它是一个普通的 JSif()表达式。您是否尝试将其应用于 jQuery 表达式? -
我认为这就是您进入
if()的原因,而不管$body.find('firstRowElement').length的值如何。包含超时的对象总是真实的。
标签: if-statement find element cypress exists