我正在 React 前端上运行 cypress v10,并尝试让我的 cookie 在我的一些测试中持续存在。
我正在测试登录和退出我的应用程序的流程。从 V10 开始,cy.session() 似乎是可行的方法。然而,我见过的大多数例子只是在 beforeEach() 的开头添加一个 cookie 到一个命名会话对象中。
我在测试模块开始时没有最初可用的 cookie,我创建了一些测试(如下所示),在使用 cookie 登录时进行更多测试,然后注销,删除 cookie。
所以我对如何将 session() 实现到以下代码的组合中有点困惑。可以使用一些结构方向,谢谢!
describe('Auth (e2e)', () => {
it('should load and redirect to /login', () => {
cy.visit('https://localhost:3000/');
cy.wait(500);
cy.url().should('include', 'login');
});
it('login button should be disabled initially', () => {
cy.get('#btn-login').should('have.attr', 'disabled');
});
it('login button should be enabled upon enter valid details', () => {
cy.get('#tbxUsername').click().type('hfisher');
cy.get('#tbxPassword').click().type('#VS1DEV');
cy.get('#btn-login').should('not.have.attr', 'disabled');
});
it('should navigate to the home/dashboard upon logging …Run Code Online (Sandbox Code Playgroud) 在最新版本的 Cypress 中,Cookie 保留已被弃用,因此我希望使用 cy.session。但是,我无法让它在多个测试中工作,因为 cy.session 需要位于测试“it”内,这是我当前如何设置测试的示例。
beforeEach(() => {
Cypress.Cookies.defaults({
preserve: /somecookie|someOtherCookie|AnotherCookie/
})
it('Navigate to URL', () => {
performance.NavigateToUrl(URL);
});
it('Login - Username/Pass', () => {
performance.LoginUserPass();
});
it('Navigate Order Page', () => {
performance.Orderpage();
});
//And so on............
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助和建议,因为我真的不想重写测试结构,因为我创建了一份关于当前输出/设计的报告。
在所有测试中保留会话
我计划将现有项目的 Cypress 版本从 6.9.1 更新到 12.6.0。
目前,我们正在导航到网页并在 before() 挂钩中使用 ntlm-auth 登录。之后,网页保持打开状态,可用于接下来的所有测试。
在最新的赛普拉斯版本中,似乎在每个测试用例之后都会清除并关闭页面,据我所知,这是拥有更好的测试用例所需的行为。
但是,在最新的 Cypress 版本中,有没有一种方法可以在 before hook 中导航到网页,或者在第一个测试中,将页面保持打开状态,然后在第二个测试用例中与其交互并导航到同一页面的其他部分、保持页面打开等?
现有的代码结构如下所示:
before(() => {
cy.ntlm(
['<url>'],
<username>,
<password>
);
cy.visit(<url>);
});
it('Test 1', () => {
cy.contains('something').click();
});
it('Test 2', () => {
cy.get('#something').type('{enter}');
});
Run Code Online (Sandbox Code Playgroud)
我尝试在 before 钩子中使用 cy.session() 保存会话,我的想法是在下一个测试中恢复会话/页面,但我不确定这是否是正确的方法。
如果可以在 Cypress.io 中将数据保存在变量中并在其他块中重用它例如,我有一个特殊的设备名称。我想接收此数据,然后单击它后,检查新窗口中的标题是否包含设备的特殊名称
我知道它如何使用静态名称,但我尝试创建动态自动测试,我想知道是否可能