我正在测试一个需要与其他用户进行身份验证的网站。它大部分时间都在工作,但有时登录失败,并且在进入实际的测试代码之前,Testcafé不会检测到它。在测试页中找到DOM元素时,它不会失败,而不会在登录方法中引发错误。因此,它会保留错误的登录信息,并且同一用户的其他测试也会失败。
我知道在我的网站上检测到登录错误的方法,但是我无法对Testcafé说:
“嘿!登录时会出现错误,请不要为此用户保存登录信息,然后在下一个测试中重试”
编辑:
我不使用硬编码的登录信息,而是使用具有以下结构的单独文件logins.ts
,并将其修改为添加loggedIn
和role
字段:
adminUserCredentials: { login: 'mylogin', pwd: 'mypass', role: null, loggedIn: false }
然后我按如下方式使用它:
function createUserForSpecificEnv(user: User, baseUrl: string): Role {
if(!user.loggedIn) {
user.role = Role(baseUrl, async t => {
await t
.wait(1000)
.typeText('#loginInput', user.login)
.typeText('#passwordInput', user.pwd)
.click('#Btn')
if(await Selector('#user-info').visible) {
user.loggedIn = true
}
})
}
return user.role
}
const adminUserRole = getRole(adminUserCredentials)
test("test 1", async t => {
t.useRole(adminUserRole)
}) // The test go on the login page, auth failed (expected) and can't find #user-info (expected)
test("test 2", async t => {
t.useRole(adminUserRole)
}) // The test doesn't go to the login page and directly says : can't find #user-info
但是它仍然无法正常工作... Testcafe尝试登录第一个测试,然后直接重用相同的登录信息。
任何帮助将不胜感激!谢谢:-)
编辑2 我澄清了一个事实,我使用变量来存储角色(请参见注释)
答案 0 :(得分:3)
如果预计登录失败,则建议不要为此特定测试使用Role
。您可以将身份验证登录提取到单独的函数中,并直接在此测试中和Role
构造函数中使用它:
const logIn = async t => {
//login steps
};
user.role = Role(baseUrl, logIn);
test("test 1", async t => {
await logIn(t);
}); // The test go on the login page, auth failed (expected) and can't find #user-info (expected)
test("test 2", async t => {
t.useRole(adminUserRole)
});
答案 1 :(得分:2)
我认为您可以在“角色初始化”的最后一步上检查一些选择器,以确保您正确登录。如果未正确登录,则需要重新创建角色以在以后的测试中进一步使用。请参见以下代码,该代码演示了我的想法:
import { Role, Selector } from 'testcafe';
let role = null;
let loggedIn = false;
function getRole() {
if (!loggedIn) {
role = new Role('http://example.com', async t => {
console.log('role initialize');
// await t.typeText('#login', 'login');
// await t.typeText('#password', 'password');
// await t.click('#signin');
// NOTE: ensure that we are actually logged in
if(await Selector('#user_profile').exists)
loggedIn = true;
});
}
return role;
}
fixture `fixture`
.page `../pages/index.html`;
test(`test1`, async t => {
await t.useRole(getRole());
});
test(`test2`, async t => {
await t.useRole(getRole());
});
test(`test3`, async t => {
await t.useRole(getRole());
});