我有将近100个规格文件,包括多个测试。我想一次登录即可运行所有这些规格文件。我不希望我的赛普拉斯每次都登录每个规格文件的过程可以为所有规格文件保留一次登录]
这是Cypress.io建议您使用的推荐方法,因为这完全是反模式。
反模式:共享页面对象,使用您的UI登录,但不使用快捷方式。
最佳实践:隔离测试规范,以编程方式登录到您的应用程序,并控制您的应用程序状态。
您应该有一个规格文件/少量测试可以实际测试您的登录屏幕/功能,以确认确实可以正常工作。
但是其他任何时候,您都应该通过API语法登录到您的帐户,并将凭据存储在Cookie或令牌中。
这样,您应该可以绕过登录屏幕。
一旦您使用了API,您可以将其添加到适当位置的before钩子中。
查看我们的“登录”食谱https://github.com/cypress-io/cypress-example-recipes#logging-in-recipes-其中大多数使用before
钩子登录一次,然后将cookie /令牌保存在本地变量中,并在beforeEach
钩子中一次又一次地进行设置
请查看代码:
登录完成后我正在将数据存储在本地存储中
我正在第一个文件中调用登录方法,并且能够访问第一个文件中的本地存储
但是在第二个规范文件中,即使登录我也无法访问该令牌
// commands.js
Cypress.Commands.add("SignIn", () => {
cy.visit("https://app-dev.partie.com/");
const loginBtn = "section.btn-group > a.btn.btn-outline";
const userNameField = 'input[type="text"]';
const passwordField = 'input[type="password"]';
const loginFormBtn = ".bg-blue";
cy.get(loginBtn).click();
cy.get(userNameField)
.type("usrename")
.get(passwordField)
.type("!password");
cy.get(loginFormBtn).click();
cy.wait(3000);
cy.setLocalStorage("jwt", "this is token");
});
/////// first test spec file and i am abale to access local storate ///////
before(() => {
cy.SignIn()
cy.saveLocalStorage();
});
beforeEach(() => {
cy.restoreLocalStorage();
});
it("should exist identity in localStorage", () => {
cy.getLocalStorage("jwt").then(token => {
cy.log("jwt", token);
});
cy.getCookie('foo').should('have.property', 'value', 'bar')
});
//////// 2nd test spec file and im not able to access token //////////////////
afterEach(() => {
cy.saveLocalStorage();
});
beforeEach(() => {
cy.restoreLocalStorage();
});
it("should exist identity in localStorage", () => {
cy.getLocalStorage("jwt").then(token => {
cy.log("jwt", token);
});
});