我正在使用 Cypress 测试,目前面临一个问题,我想自动从选项中单击某个元素(仅当该元素可用时)。这是代码的一部分:
cy.get(Elements.jiraVulnerabilityTableTitle).should(
CyCondition.EXIST
);
cy.contains(Mocks.identifierColumn);
cy.get(Elements.securityContainerFilterButton).click();
cy.get(Elements.securityContainerOption).should(CyCondition.EXIST).click({force:true});
这里,
securityContainerOption
是我正在使用的按钮。我有一个单独的 elements.js
文件,我已将 securityContainerOption
设置为 #react-select-2-option-0-0
。但是在运行测试时,我发现有时需要单击 #react-select-2-option-0-1
而不是 #react-select-2-option-0-0
。
所以,我想要的是,单击
securityContainerFilterButton
后,我想检查#react-select-2-option-0-1
是否可用,如果是,请单击它。如果它不可用,则不应失败,而应单击 #react-select-2-option-0-0
。
我们如何添加元素的条件点击并且不让测试失败?
我尝试了以下更改:
cy.get('#react-select-2-option-0-1').then(($option) => {
if ($option.length > 0) {
cy.get('#react-select-2-option-0-1').click({force:true});
} else {
cy.get(Elements.securityContainerOption).should(CyCondition.EXIST).click({force:true});
}
});
但是,在上面的代码中,我们做了
cy.get()
,因此如果找不到该元素,它本身就会失败。
赛普拉斯不完全支持对一个元素或另一个元素进行开箱即用的测试。
但只要页面稳定,您就可以提供两个选择器,并用逗号分隔。
cy.get('#react-select-2-option-0-1, #react-select-2-option-0-0')
如果页面上有一个或另一个选择器,则此操作将通过。但如上所述,在运行命令之前页面必须稳定,因为在查询您的首选元素时不会重试
#react-select-2-option-0-1
。
理想情况下,您会想要选择不同的选择方式,也许是通过文本插入 id。