Cypress:如何检查某个元素是否存在而不导致测试失败(如果不存在)?

Gab*_*kel 5 if-statement exists find cypress

我的测试的一部分包括一个表,用户可以在其中添加或删除行。

我无法控制表是否为空,因此我需要有条件if来确定表是否为空。

我尝试检查表的第一行是否存在。如果是,请进行一些测试并继续,或者如果不是,则跳过该表并继续。

当然,我不能只尝试在第一行执行 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..
                )}
             } 
         )}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

当表为空时,它仍然进入 if 语句。

然后,由于cy.get()元素不存在,下一行测试失败。看来if声明并没有发挥作用。

暂停

我需要超时,因为表需要几秒钟才能加载。

我尝试将超时移至内部,$body.find()但它根本不等待并跳过所有内容,因为表尚未加载。

我也不想用cy.wait()

我认为超时和超时之间存在某种冲突.find()

ang*_*tan 0

您可以尝试这种方法,非常简单,但它让您了解如何有条件地测试类似的东西。他们的关键要素是根据你所看到的进行工作。正如上面所建议的,您确实希望拥有像 waitUntil 这样的东西,以供将来在项目中参考。

cy.get('parent element of matrix or body').then($body => {
 cy.waitUntil(() => cy.get('parent element of first row')
 .then($selector => $selector.is(':visible') === true), { timeout: 60000 })
 if ($body.find('first Row Element').is(':visible')) {
  cy.log('A row exists')
 } else {
  cy.log('A row doesnt exists')
 }
})   
Run Code Online (Sandbox Code Playgroud)