如何检查元素是否存在然后做进一步的事情?

问题描述 投票:0回答:1

我知道有一些与我类似的问题,但我无法用解决方案解决我的问题。

我正在做一个将产品添加到购物车的测试,我想编写的逻辑是如果该商品没有缺货,然后单击“添加到购物车”按钮,

这是我的代码

describe('Add item to cart', () => {
  it('should be able to add all items into the cart', () => {
    caseData.forEach(item => {
      const url = baseURL + item.url;
      cy.visit(url);
      cy.get(`[data-test-id=${notifyButton}]`).then(element => {
        if (element.length === 0) { // check if the item is not out of stock
          cy.scrollAndClick(`data-test-id=${addToCartButton}`);
        }

      })
    })
  });
})

当 cypress 找不到元素时,我收到错误

Timed out retrying after 3000ms: Expected to find element: [data-test-id=notify-me-button], but never found it.

我也尝试过类似

element.is(':visible')
但也不起作用

有谁知道我哪里错了?非常感谢!

更新: 代码修改后即可工作

      cy.get(`[data-test-id=${notifyButton}]`).should('not.exist').then(() => {
        cy.scrollAndClick(`[data-test-id=${addToCartButton}]`);
        cy.getByDataID('no-thanks-button-upsell-modal').click();

      })

但是上面的情况,如果notifyButton存在,那么仍然会报错。仍然想知道是否有更好的方法来解决它

javascript cypress
1个回答
-1
投票

发生错误是因为 cy.get() 试图立即查找元素。要解决此问题,请使用 cy.get() 和 {timeout: 0} 以避免等待元素,然后检查其长度。如果不存在,则继续下一步操作。

© www.soinside.com 2019 - 2024. All rights reserved.