Проблемы с Testcafe LocalStorage - PullRequest
3 голосов
/ 09 марта 2019

все!Я новичок в TestCafe, и мне нужна помощь в достижении чего-то, чего я хочу достичь.

У меня есть веб-сайт React, где я размещаю логин на Facebook.Обычно, когда вы заходите на страницу и нажимаете Login with facebook, открывается всплывающее окно и обычно вводите свои учетные данные.После этого вы будете перенаправлены на страницу, и токен будет сохранен в переменной localStorage, чтобы страница могла обратиться к ней позже.

Однако, когда я запускаю тест для процесса входа в систему, Testcafe вместо того, чтобы открывать всплывающее окно, открывает форму facebook на той же странице и никогда не перенаправляет на страницу.

Кроме того, я попытался установить dummy token в локальном хранилище, используя ClientFunction (а также Roles), и мой веб-сайт никогда не сможет достичь этого токена, потому что testcafe, кажется, помещает эту переменную в ключ, называемыйhammerhead

Итак, мой вопрос здесь, как я могу ввести этот токен в тесте или вручную, чтобы мой веб-сайт мог прочитать его и выполнить с ним некоторые функции?

Это то, что я имею до сих пор.

/* global test, fixture */
import { WelcomePage } from './pages/welcome-page'
import {ClientFunction, Role} from 'testcafe';

const welcomePage = new WelcomePage()

const setLocalStorageItem = ClientFunction((prop, value) => {
  localStorage.setItem(prop, value);
});

const facebookAccUser = Role(`https//mypage.net/`, async t => {
  await setLocalStorageItem('token', 'my-token');
}, { preserveUrl: true });

fixture`Check certain elements`.page(`https//mypage.net/`)
test('Check element is there', async (t) => {
  await t
    .navigateTo(`https//mypage.net/`)
    .wait(4000)
    .useRole(facebookAccUser)
    .expect(cetainElementIfLoggedIn)
    .eql(certainValue)
    .wait(10000)
})

Любая помощь будет высоко ценится

Спасибо за ваше время.

1 Ответ

3 голосов
/ 11 марта 2019

В настоящее время TestCafe не поддерживает несколько окон браузера. Поэтому невозможно войти через всплывающую форму Facebook. Тем не менее, есть обходной путь. Пожалуйста, обратитесь к следующей теме https://github.com/DevExpress/testcafe-hammerhead/issues/1428.

Мой рабочий тест выглядит так:

import { Selector, ClientFunction } from 'testcafe';

const patchAuth = ClientFunction(() => {
    window['op' + 'en'] = function (url) {
        var iframe = document.createElement('iframe');

        iframe.style.position = 'fixed';
        iframe.style.left = '200px';
        iframe.style.top = '150px';
        iframe.style.width = '400px';
        iframe.style.height = '300px';
        iframe.style['z-index'] = '99999999';
        iframe.src = url;
        iframe.id = 'auth-iframe';

        document.body.appendChild(iframe);
    };
});

fixture `fixture`
    .page `https://www.soudfa.com/signup`;

test('test', async t => {
    await patchAuth();

    await t
        .click('button.facebook')
        .switchToIframe('#auth-iframe')
        .typeText('#email', '****')
        .typeText('#pass', '****')
        .click('#u_0_0')
        .wait(30e3);
});

Имейте в виду, что манипуляции с x-frame-options в модуле testcafe-hammerhead обязательны.

Кроме того, я хотел бы отметить, что Testing in Multiple browser windows является одной из наших приоритетных задач, которая является частью TestCafe Roadmap

...