如何跳过 Cypress 测试脚本中的失败部分

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

下面的代码预期是

get_plz_ChooseGroup
如果元素在 5000 秒后不可见,将被跳过并且不会触发测试失败

Login_Page_POS.get_plz_ChooseGroup({ timeout: 5000 })
            .then(($element) => {
              if ($element.is(":visible")) {
                Login_Page_POS.chooseGroup(groupName)
              } else {
                cy.log("Element not visible after 5 seconds, skipping this part")
              }
            })
            .catch(() => {
              cy.log("Element not found after 5 seconds, skipping this part")
            })

和:

  this.plz_group_Label = "//span[contains(text(),'Please choose your group')]"
      get_plz_ChooseGroup() {
        return cy.xpath(this.plz_group_Label)
      }

在 .catch(() => {:

处失败
_Login_Page_POS.default.get_plz_ChooseGroup(...).then(...).catch is not a function
javascript testing automated-tests cypress
1个回答
0
投票

如果你在 Cypress 文档中搜索

.catch()
,你会发现没有这样的命令。

如果 DOM 中不存在此类元素,则

cy.xpath(this.plz_group_Label)
命令将失败。

执行此操作的方法是使用 jQuery 方法轮询元素 5 秒,该方法使用 CSS 选择器而不是 xpath 选择器。

要进行轮询,您将需要一个递归函数/方法,例如:

const selector = 'span:contains("Please choose your group")'  // CSS selector

get_plz_ChooseGroup(try = 0) {

  if (try = 50) return cy.wrap(null);  // indicate failure to find with null return

  const element = Cypress.$(selector)
  if (element.length === 0) {
    cy.wait(100)
      .then(() => {
        get_plz_ChooseGroup(++try)
      })
  }
  return cy.wrap(element)
}

调用将是

get_plz_ChooseGroup().then($element => {

  // catch the element failure
  if (!$element) {
    cy.log("Element not found after 5 seconds, skipping this part")
    return
  }

  if ($element.is(":visible")) {
    Login_Page_POS.chooseGroup(groupName)
  } else {
    cy.log("Element not visible after 5 seconds, skipping this part")
  }
}) 

我不得不说,这不是一个很好的测试方法——如果找不到元素怎么办?您将跳过部分测试代码,想必每次运行测试时都运行它很重要。

我建议看一下如何编写测试,它解释了安排-行动-断言模式

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