Как обойти перенаправление в Protractor

Я использую Angular 2 и пишу тесты Protractor. Моя проблема заключается в том, что когда пользователь вводит имя пользователя и пароль и нажимает кнопку входа в систему, страница перенаправляется на среднюю страницу, а эта средняя страница перенаправляется на другую страницу, которая дает и проверяет JWT (после кнопки входа пользователю не нужно ничего делать, пока страница достигает панели управления) но транспортир не может выполнить перенаправление. Есть ли способ перевести транспортир в спящий режим, пока я не дотронусь до приборной панели? или есть способ, который вы можете предложить?

browser.sleep(10000) не сработало. Потому что, пока браузер спит, транспортир остается на странице входа до тех пор, пока не выйдет из строя.

Сообщение об ошибке:

Expected Function to equal 'http://localhost:4200'.
Expected :"http://localhost:4200"
Actual   :{}

person D. Ister    schedule 24.05.2017    source источник
comment
что вы имеете в виду, когда транспортир не выполняет перенаправление? Итак, вы хотите, чтобы тест подтвердил, что он действительно проходит через среднюю страницу? или просто протестируйте конечную страницу назначения?   -  person eLRuLL    schedule 24.05.2017
comment
@eLRuLL проверяет конечный пункт назначения, потому что средняя страница имеет другой URL-адрес, а средняя страница перенаправляет меня на другую страницу с другим URL-адресом с JWT, но как пользователь вы не можете щелкнуть где-либо на этой странице, это похоже на проверку безопасности   -  person D. Ister    schedule 24.05.2017


Ответы (1)


Вам нужно использовать .then в каждом обещании, иначе обещания разрешатся после завершения всех синхронных задач.

browser.sleep(10000).then(() => {
    browser.getCurrentUrl().then(url => {
        expect(url).toEqual('http://localhost:4200');
    });
})

В идеале вы хотите использовать browser.wait(), чтобы дождаться, пока URL-адрес не станет таким, как ожидалось, прежде чем двигаться дальше. Таким образом, он не будет ждать 10000 мс, но завершит ожидание сразу после совпадения URL-адреса.

let timeout = 10000;
browser.wait(() => {
    return browser.getCurrentUrl().then(url => {
        return url === 'http://localhost:4200';
    });
}, timeout).thenCatch(err => {
    throw err;
});

Конечно, это просто предположение о том, что вы не сделали / не должны были делать, поскольку вам нужно опубликовать свой код.

Изменить: дальнейшее объяснение. Если вы запустите это:

console.log('Got here 1');
browser.sleep(0).then(() => {
   console.log('Got here 2');
]);
console.log('Got here 3');

Вы, вероятно, ожидали, что результат будет:

Got here 1
Got here 2
Got here 3

Но на самом деле результат был бы таким:

Got here 1
Got here 3
Got here 2

Потому что "обещания разрешатся после завершения всех синхронных задач"

person Nugen.exe    schedule 24.05.2017
comment
Второе решение, которое вы предоставили, вызывает у меня еще одну ошибку, которая выглядит следующим образом: Failed: protractor_1.browser.wait(...).thenCatch is not a function TypeError: protractor_1.browser.wait(...).thenCatch is not a function ---------------------------------- ---- Первое решение не работает, либо оно перенаправляет меня обратно на мою страницу входа, и мне нужно снова войти в систему. - person D. Ister; 24.05.2017
comment
Вместо thenCatch используйте catch. Это перенаправление обратно на страницу входа в систему, это странное поведение. Я не понимаю, как то, что я написал, может вызвать перенаправление. Разместите свой код, и мы действительно сможем помочь. - person Nugen.exe; 24.05.2017
comment
то, что вы написали, идеально, это то, что я тоже пробовал, проблема в том, что, как я сказал, он не переходит на страницу, на которую перенаправляется средняя страница, поэтому он не может получить токен JWT и никогда не регистрируется, поэтому ожидание не Чтобы решить проблему, он пытается перейти на главную страницу, но, поскольку он не зарегистрирован, главная страница перенаправляет меня обратно на страницу входа, потому что у нее есть защита авторизации - person D. Ister; 25.05.2017
comment
Вы используете .then для всего, что является обещанием? Если вы опубликуете свои шаги и код, я смогу помочь, но на данный момент я могу только предполагать. - person Nugen.exe; 26.05.2017