Транспортир перезагрузит страницу, когда она рухнула - PullRequest
0 голосов
/ 04 января 2019

Позвольте мне объяснить ситуацию, в настоящее время я тестирую веб-сайт AngularJS с помощью Protractor, я его вообще не разрабатываю.

Проблема в том, что совершенно случайно веб-сайт иногда не отображается.Это просто пустое имя с другим названием:

  • Если заголовок "VideoGame" ->, то веб-сайт отображается
  • Если заголовок "VideoGame-env-DEV" -> Тогда веб-сайтне отображается

Понятия не имею, почему и это не моя проблема.

Однако при тестировании с Protractor он явно падает.

Так что я хотел обойтипроблема с временным решением:

    function specialRefreshFunction() {

    cpt=0;
    browser.get('https://blablabla');
    browser.waitForAngular();
    var title = browser.getTitle();
    while (title != "VideoGame") {
        cpt=cpt+1;
        //sleep(1000);
        //browser.sleep(1000);
        browser.get('https://blablabla');
        browser.waitForAngular();
        //browser.navigate().refresh();
        console.log("fail  "+cpt);
    }

    console.log("Correct title  " + title);}

Мое решение не работает.Я новичок в NodeJS & Protractor, поэтому код может быть бессмысленным.

  • W10 64bit
  • Последний Chromedriver
  • Protractor 5.4.2
  • NodeJS 10.15.0
  • Угловой 6.1.10

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

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

public vierifyPageTitle() {
    return new Promise((resolve, reject) => {
        const refreshUserData = setInterval(() => {
            return browser.getTitle().then((title) => {
                if (title === 'VideoGame') {
                    clearInterval(refreshUserData);
                    resolve(title);
                }
            }, (err) => {
                browser.refresh();
                reject(err);
            });
        }, 1000);
    });
}

Обновляется каждые 1000 мс, если заголовок не равен ожидаемому.

0 голосов
/ 04 января 2019

Вы можете перейти с browser.wait

let EC = protractor.ExpectedConditions;
browser.wait(
    EC.presenceOf($('#some-element')),
    10000,
    'Element did not appear after route change'
).then(function() {}, function() {
    browser.refresh();
});

В этом конкретном примере транспортир будет ждать 10 секунд, пока элемент #some-element не появится на странице.browser.wait возвращает обещание, поэтому вы можете обрабатывать оба случая - когда элемент появляется или элемент не появляется.Просто поместите некоторый определенный селектор вместо $('#some-element'), который присутствует на вашей странице, с помощью которого вы можете считать страницу загруженной

Хотя, если вы полагаетесь только на значение заголовка, вы можете использовать titleContains

var EC = protractor.ExpectedConditions;
// Waits for the title to contain 'foo'.
browser.wait(EC.titleContains('foo'), 5000);
...