Как Testcafe обрабатывает ошибки входа в систему? - PullRequest
2 голосов
/ 09 июля 2019

Я тестирую сайт, который требует аутентификации с разными пользователями. Он работает большую часть времени, но иногда происходит сбой входа в систему, и Testcafé не обнаруживает его перед запуском реального тестового кода. Вместо того, чтобы выдавать ошибку в метод входа в систему, происходит сбой при поиске элемента DOM на тестовой странице. Таким образом, он хранит неверную информацию для входа в систему, и другие тесты с тем же пользователем также не пройдут.

Я знаю способ обнаружения ошибки входа в систему на моем веб-сайте, но не могу сказать Testcafé:

«Привет! Что-то не так добавляется при входе в систему, не сохраняйте информацию для этого пользователя и повторите попытку в следующих тестах»

EDIT: Вместо использования жестко закодированной информации для входа в систему я использую отдельный файл 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 Я проясняю тот факт, что я использую переменную для хранения роли (см. Комментарии)

Ответы [ 2 ]

3 голосов
/ 24 июля 2019

Если ожидается сбой входа в систему, я бы рекомендовал не использовать 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)
});
2 голосов
/ 10 июля 2019

Я думаю, что вы можете проверить некоторые селекторы на последнем шаге инициализации роли, чтобы убедиться, что вы правильно вошли в систему. Если это не так, вам нужно заново создать свою роль для дальнейшего использования в следующих тестах. Пожалуйста, посмотрите следующий код, который демонстрирует мою идею:

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());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...