Cypress 有条件地通过测试,无需运行其余代码

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

这是我需要创建的 Cypress 测试场景:

  1. 访问网站,查看项目是否存在

    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() 块即可读取文件的方法,但它在我的情况下不起作用(我不确定为什么)。

有什么办法可以真正克服这个问题吗?

typescript conditional-statements cypress
1个回答
0
投票

如果您确定搜索已完成并显示搜索结果,则可以使用

Cypress.$()
检查来执行 if/else 逻辑。

会是这样的

const projectExists = Cypress.$(".project_name").length > 0;
if (projectExists) then {

} else {
  projectPageObject.createTheBrandNewProject()
}

但是您必须自行加载,不能依靠

cy.get('.project_name')
来重试,因为如果该项目没有出现在搜索结果中,那么重试将会失败。

因此,如果搜索结果上方始终显示标题或其他测试,请先检查它。

或者,使用此处所示的轮询方法如何使用 Cypress 检查可能不存在的元素

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