下面的代码预期是
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
如果你在 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")
}
})
我不得不说,这不是一个很好的测试方法——如果找不到元素怎么办?您将跳过部分测试代码,想必每次运行测试时都运行它很重要。
我建议看一下如何编写测试,它解释了安排-行动-断言模式。