这是我需要创建的 Cypress 测试场景:
访问网站,查看项目是否存在
2a)。如果是 - 更改名称并通过测试而不运行 then() 之外的其余代码。
2b)。如果没有 - 运行该代码之外的其余代码 将创建项目
这是代码:
it("1. Apollo - Create tented project with estimate and team", () => {
cy.visit(website)
projectPageObject.searchProject(projectName);
cy.get(".project_name")
.then(project => {
if(project.length>0){
project[0].click();
cy.wait(5000);
projectPageObject.clickOnEditProject();
projectPageObject.elements.projectNameInput()
.clear()
.type(projectName + id);
projectPageObject.updateProject();
} else {
cy.log("Project doesn't exist yet!")
}
})
projectPageObject.createTheBrandNewProject();
createTheBrandNewProject() 方法包含多个 then() 链。这阻止我将该代码放置在 else 块中,因为 Cypress 不允许在另一个 then() 中使用 then()。此外,由于其异步性质,在 then() 块内使用布尔标志变量不起作用。
我考虑将布尔值写入文件,因为我找到了一种无需使用 then() 块即可读取文件的方法,但它在我的情况下不起作用(我不确定为什么)。
有什么办法可以真正克服这个问题吗?
如果您确定搜索已完成并显示搜索结果,则可以使用
Cypress.$()
检查来执行 if/else 逻辑。
会是这样的
const projectExists = Cypress.$(".project_name").length > 0;
if (projectExists) then {
} else {
projectPageObject.createTheBrandNewProject()
}
但是您必须自行加载,不能依靠
cy.get('.project_name')
来重试,因为如果该项目没有出现在搜索结果中,那么重试将会失败。
因此,如果搜索结果上方始终显示标题或其他测试,请先检查它。
或者,使用此处所示的轮询方法如何使用 Cypress 检查可能不存在的元素