Testcafe: Есть ли способ сохранить сеанс вошедшего в систему нетронутым между страницами? - PullRequest
1 голос
/ 10 апреля 2020

Я использую Instagram, чтобы объяснить мой сценарий. Я вхожу с идентификатором testUser в Instagram. Я oop через набор учетных записей Instagram (например: https://www.instagram.com/some_page/). Такие прямые URL передаются из файла JSON. Я проверяю что-то на этой странице и перехожу на следующую страницу, чтобы выполнить тот же набор проверок.

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

Код роли

const testUser = Role('https://www.instagram.com/accounts/login/', async t => {
/* some code */
}, { preserveUrl: true });

Fixture и BeforeEach:

fixture`Instaa Test`
    .page`https://www.instagram.com/`

    .before(async t => {
    })

    .beforeEach(async t => {
        await t.setTestSpeed(0.3)
        await t.useRole(testUser)
        await t.maximizeWindow()
    })

Тестовый блок:

dataSet.forEach(data => {
    test("Check Business Account", async t => {
    await t.navigateTo(data.pageURL);
    /* some code */
}
}

1 Ответ

3 голосов
/ 13 апреля 2020

Мне удалось воспроизвести проблему с помощью следующего кода:

import { Role, Selector } from 'testcafe';

const testUser = Role('https://www.instagram.com/accounts/login/', async t => {
    const login = Selector('#react-root > section > main > div > article > div > div:nth-child(1) > div > form > div:nth-child(2) > div > label > input');
    const password = Selector('#react-root > section > main > div > article > div > div:nth-child(1) > div > form > div:nth-child(3) > div > label > input');
    const submit = Selector('#react-root > section > main > div > article > div > div:nth-child(1) > div > form > div:nth-child(4) > button');

    await t.typeText(login, 'my-login');
    await t.typeText(password, 'my-password');
    await t.click(submit);

    // NOTE: here is a workaround
    // await t.wait(10000);

}, { preserveUrl: true });

fixture `Instagram`
    .page`https://www.instagram.com/`
    .beforeEach(async t => {
        await t.setTestSpeed(0.3);
        await t.useRole(testUser);
    });

test(`test1`, async t => {
    await t.navigateTo('https://www.instagram.com/cristiano/');
    await t.wait(5000);
});

test(`test2`, async t => {
    await t.navigateTo('https://www.instagram.com/leomessi/');
    await t.wait(5000);
});

test(`test3`, async t => {
    await t.navigateTo('https://www.instagram.com/neymarjr/');
    await t.wait(5000);
});

Я создал отдельный тикет в репозитории testcafe: https://github.com/DevExpress/testcafe/issues/4978

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

// NOTE: here is a workaround
// await t.wait(10000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...