Транспортир / Selenium XHR остается в статусе «в ожидании» - PullRequest
0 голосов
/ 27 декабря 2018

Я использую транспортир с селеном для проверки моей угловой страницы.

В некоторые случайные моменты он просто останавливает выполнение, потому что XHR-запрос все еще находится в состоянии ожидания (в Chrome Dev Tools).

Когда я копирую URL-адрес запроса (это простой запрос GET) и открываю его в новой вкладке, он немедленно возвращает данные (JSON, ~ 200 символов в длину).

Запросостается "в ожидании" при выполнении тестов E2E, и из 10 раз упомянутый GET-URL вызывается, но может завершиться неудачей 1 раз.

Selenium печатает следующую ошибку: «Превышено время ожидания получения сообщения от средства визуализации: 298,388».

Есть идеи?

Редактировать:

  • Chromeверсия 71.0.3578.98
  • версия Chromedriver 2.45
  • версия сервера Selenium 3.141.59 (автономная версия)
  • AngularJS v1.6.4

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Ваш тест не был выполнен вовремя.Таким образом, вы можете увеличить время ожидания в файле protractor.conf.js.

jasmineNodeOpts: {
  ...
 /**
 * Default time to wait in ms before a test fails.
 */
  defaultTimeoutInterval: 50000,
  ...
},

В приведенной ниже ссылке вы можете найти различные аргументы времени ожидания, которые можно настроить в protractor.conf.js: https://github.com/angular/protractor/blob/master/lib/config.ts


Если это не решит вашу проблему, то в основном это из-за некоторых плагинов или сторонней рекламы.

См .: https://sqa.stackexchange.com/questions/9007/how-to-handle-time-out-receiving-message-from-the-renderer-in-chrome-driver/9140#9140

0 голосов
/ 27 декабря 2018

В крайнем случае , вы можете выполнить JS :

waitForAngular(function(browser, timeOut){
    pendingReq = browser.executeScript("var injector = window.angular.element('body').injector(); var $http = injector.get('$http'); return ($http.pendingRequests.length === 0);"
    if (timeOut >= 0){
        timeOut -= 1;
        if ( pendingReq ){
            return
        };
        else {
            waitForAngular(browser, timeOut)
        };
    };
    else {
    console.log("did not load in time");
    };
});

Это не чистый способ написания кода, но я нашел его, чтобы помочь мнес Angular App, где запросы все еще ожидают ...

Надеюсь, вы найдете это полезным!

РЕДАКТИРОВАТЬ:

Функция выше должна работать, это можетнужен какой-то рефакторинг я его не тестировал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...