陷入 Cypress - 登录冗余

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

我目前正在解决一个持续存在的问题,希望得到一些指导。我正在利用 Cypress 进行测试,并且我正在尝试找到一种方法来避免每个测试用例重复登录。

以下是我的测试文件:

describe("Authenticated User Validations", () => {
    beforeEach(() => {
        cy.visit(baseUrl);
        cy.login(user, password);
    });

    it("Login and Verify URL", () => {
        cy.url().should('include', '/inventory.html');
    });

    it("Button Order from A-Z by Default", () => {
        cy.contains('A to Z').should('exist');
    });
});

Commands.js 文件

const baseUrl = Cypress.env("CYPRESS_BASE_URL");

Cypress.Commands.add('login', (user, password) => {
    cy.session([user, password], () => {
        cy.visit(baseUrl);
        cy.get('[data-test="username"]').type(user);
        cy.get('[data-test="password"]').type(password);
        cy.get('[data-test="login-button"]').click();
    });
});

我很困惑要在哪里添加 cy.visit ,是在 command.js 中,还是在 beforeEach 中,还是在测试中?

我可以在没有会话的情况下使其工作,但每次都会输入并登录。我看到了另一种解决方案,但它对我不起作用

提前致谢

cypress
1个回答
0
投票

cy.session(id, setup)
是每次调用时都会表现不同的命令。

参数

setup
仅在第一次使用时调用。

第二次调用时,返回保存的数据而不是运行

setup()

这是一个小例子

const baseUrl = 'https://example.com'

Cypress.Commands.add('login', (user, password) => {
  cy.session([user, password], () => {
    console.log('in session setup')              // only appear once in the console
    cy.visit(baseUrl)
    cy.url().should('include', 'example.com')    // page is at baseUrl
    cy.setCookie('token', 'my-token-123')        // simulate a logon cookie
  })
})

it('test1', () => {
  cy.login('abc', '123')
  cy.url().should('include', 'about:blank')   // page is at the default blank URL
})

it('test2', () => {
  cy.login('abc', '123')
  cy.url().should('include', 'about:blank')   // page is at the default blank URL
})

测试运行程序对 test1 显示

created
,对 test2 显示
restored


`cy.visit()`怎么样?

both 内测试 URL 为

about:blank
,如果没有调用
cy.visit()
,则这是 Cypress 默认页面。

所以,每次测试都必须自己访问你想要测试的页面。

文档的这一部分在哪里调用 cy.visit() 给出了选项

直观上,您似乎应该在登录函数或自定义命令中的 cy.session() 之后立即调用 cy.visit() ,因此它的行为(从后续测试的角度来看)与没有登录函数的行为完全相同cy.session().

但是,如果您想在不同页面上测试某些内容,则需要在测试开始时调用 cy.visit() ...


奇怪的事情

请参阅会话缓存

为了减少开发时间,在“开放”模式下运行 Cypress 时,会话将被缓存以供 spec 文件重新运行

因此,当您最初运行规范时,您会看到上面的日志。再次运行,两个测试都标记为 restored,而不是 test1: created,test2: restored

您必须使用清除所有会话链接手动清除第二次运行。

如果您修改测试,会话应该会自动清除,但我不确定这种情况总是会发生。

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