Cypress自动化测试:如何实现元素条件点击且避免测试失败?
实现Cypress条件点击逻辑(避免元素不存在时测试失败)
要实现“存在则点击#react-select-2-option-0-1,否则点击默认选项”的逻辑,核心是避免直接用cy.get()查找可能不存在的元素,而是借助已存在的父元素(如body)结合JQuery选择器在回调中判断元素状态,这样不会触发Cypress的失败断言。
替换你原有的条件判断代码,改用以下实现:
cy.get(Elements.jiraVulnerabilityTableTitle).should(CyCondition.EXIST); cy.contains(Mocks.identifierColumn); cy.get(Elements.securityContainerFilterButton).click(); // 在body元素的回调中判断目标选项是否存在 cy.get('body').then(($body) => { // 用JQuery选择器检查#react-select-2-option-0-1是否存在 if ($body.find('#react-select-2-option-0-1').length > 0) { cy.get('#react-select-2-option-0-1').click({ force: true }); } else { cy.get(Elements.securityContainerOption).click({ force: true }); } });
关键说明:
cy.get('body')是必然存在的元素,不会触发测试失败;- 在
then回调中使用$body.find()(JQuery方法)查找目标元素,即使元素不存在也只会返回空集合,不会中断测试; - 进入对应分支后,元素存在性已得到确认(分支1中
find已验证元素存在,分支2中Elements.securityContainerOption是你原本确认存在的元素),因此可以安全调用click。
如果下拉选项需要加载时间,可在点击过滤按钮后增加等待容器出现的逻辑:
cy.get(Elements.securityContainerFilterButton).click(); // 等待下拉选项容器加载完成(需替换为实际的下拉容器选择器) cy.get('#react-select-2-listbox').should(CyCondition.EXIST); cy.get('body').then(($body) => { if ($body.find('#react-select-2-option-0-1').length > 0) { cy.get('#react-select-2-option-0-1').click({ force: true }); } else { cy.get(Elements.securityContainerOption).click({ force: true }); } });
内容的提问来源于stack exchange,提问作者Soumik Mukherjee
相关产品推荐
相关产品推荐

