Функции транспортира не работают (просмотрел конфиги, логи и т.д.)

Я опишу проблему как можно лучше - если я упустил детали, скажите, пожалуйста, - я все еще изучаю Protractor.

Я пишу свой первый тест транспортира для веб-сайта, и его содержание очень простое.

учитель.js

describe("teacher list", function () {
  beforeEach(function () {
    browser.get('http://127.0.0.1:9000/teachers');
  });
  it("has teacher", function () {
    initiateDebug();
    var teachers = element.all(by.repeater("teacher in items track by $index"));
    initiateDebug();
    expect(teachers.count()).toBe(20);
    initiateDebug();
  })
});

...где initiateDebug() — это функция, определенная в функции onPrepare в protractor_conf.js следующим образом:

инициировать отладку()

global.initiateDebug = function() {
    browser.pause(debugPortNumber);
    debugPortNumber++;
};

Причина, по которой я включил это, заключалась в том, что вызов browser.pause() приводит к ошибке:

Port 5858 is already in use. Please specify another port to debug.
[launcher] Process exited with error code 1

и я скопировал временное исправление, предложенное участником в ветке этой проблемы: https://github.com/angular/protractor/issues/2206.

Назад к проблеме

Вопрос 1

Если я запускаю этот код, страница просто висит и ничего не загружается. Погуглив придумал это (Получение ошибки : ошибка при ожидании синхронизации Protractor со страницей: {}), и я напрямую использовал browser.driver.get(), и это похоже на работоспособное решение.

Однако мой первый вопрос: это случай, когда он не может найти angular? Потому что я отчетливо помню, что когда я запускал Protractor за неделю до этого, если он не мог найти Angular, он выдавал эту ошибку:

UnknownError: javascript error: angular is not defined

Однако ошибка из моей консоли заключается в следующем:

1) teacher list has teacher
  Message:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
        at [object Object]._onTimeout (/Users/Baggio/project/project_bugs/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1812:23)

Вопрос. Причина в том, что эта ошибка возникает из-за того, что страница постоянно зависает при загрузке, а асинхронный вызов никогда не выполняется? Или может быть, что angular не загружается? Или что-то еще?

Я совершенно уверен, что транспортир загружается, потому что я вывел его в консоль, он перечисляет все свойства объекта.

И как продолжение вопроса 1, вот следующий вопрос, который я не понимаю.

Вопрос 2

Если я попытаюсь запустить этот тест с browser.driver.get(), я получу точно такое же сообщение об ошибке:

1) teacher list has teacher
  Message:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
        at [object Object]._onTimeout (/Users/Baggio/project/project_bugs/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1812:23)

Так что это не должно иметь ничего общего с загрузкой страницы или нет.

Что я пробовал

Я попытался после вызова инициироватьDebug() в интерактивном режиме отладки (введя ту же строку, что и первая точка останова, и я получил это:

wd-debug> repl
> element.all(by.repeater("teacher in items track by $index"))
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
F

Если я правильно понял (https://github.com/angular/protractor/blob/master/docs/debugging.md), ввод команды protractor должен что-то дать, но здесь он просто возобновил поток управления вне режима отладки, не соответствуя спецификации Jasmine.

Я представлю здесь соответствующий код, который:

HTML-код, который строка element.all должна взять из

<section ng-if="staFlag" class="teacher-item yes-cursor cursor-over" ng-repeat="teacher in items track by $index">

Вопрос 2. Почему здесь не работает Protractor?

Вопрос 3

Что я тоже пробовал - думая, что это тот случай, когда Protractor может не найти Angular, определяя свойство rootElement в protractor_conf.js (добавляя ng-app='kp' в корневой файл html и rootElement: 'html' в файл конфигурации), но он возвращает но точно такое же сообщение об ошибке:

1) teacher list has teacher
  Message:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
        at [object Object]._onTimeout (/Users/Baggio/project/project_bugs/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1812:23)
  Message:

Мысль 3: может ли это эффективно доказать, что это не проблема, когда Protractor не может найти Angualr?

Дополнительная информация

Я должен запустить этот тест на том же сервере, где веб-сайт работает локально, потому что по какой-то причине, если он запускается на другом сервере, веб-сайт вообще не работает. Под «не работает» я имею в виду: страница загружается правильно, но все биты, требующие получения данных из бэкэнда через Restangular, не отображаются.

Короткий вопрос

Что именно мешает правильному выполнению этого теста Protractor? Я думаю, что упускаю что-то очень очевидное, но я смотрел на это часами и не придумал никаких идей.

Я был бы очень признателен за указатели в правильном направлении или решение, если это возможно - большое спасибо.


person Code Apprentice    schedule 20.11.2015    source источник
comment
Я столкнулся с той же проблемой, когда запускал скрипт транспортира с appium в эмуляторе Android. Вы нашли решение ?   -  person Emna Ayadi    schedule 18.03.2016
comment
@Emma На самом деле я это сделал - и сообщение консоли означает, что асинхронные обратные вызовы не запускаются в течение указанного интервала времени ожидания. Например, если это 10000 (это настраивается в файле спецификаций транспортира) и на странице, на которой вы находитесь, есть какой-то асинхронный вызов, где он ожидает дольше 10000, он перестанет работать. Посмотрите, есть ли какие-либо асинхронные обратные вызовы, на которых застряла ваша страница.   -  person Code Apprentice    schedule 19.03.2016
comment
@Emma Для меня проблема заключалась в том, что я нахожусь в Китае и постоянно использую прокси для доступа в Интернет, потому что Google слишком ценен. Затем проблема возникает, когда проект, над которым я работаю, имеет некоторые вызовы на странице, которые просто не срабатывают при прокси-соединении. Загадка, с которой я столкнулся, заключалась в том, что для некоторых частей сайта требовался прокси-сервер, иначе они не будут работать, но другие части сайта отказывались работать на прокси-сервере. Решил это, переключив прокси на тот, который может автоматически фильтровать, какие соединения заблокированы, а какие нет.   -  person Code Apprentice    schedule 19.03.2016
comment
Моя проблема теперь, когда я делаю интервал времени, когда веб-сайт загружается (веб-сайт angularjs), тогда ничего не происходит после того, как этот браузер выходит из строя. Этот pb происходит только в эмуляторе. В реальном устройстве все работает отлично!   -  person Emna Ayadi    schedule 19.03.2016
comment
@Emma Если ваш сайт достаточно мал, попробуйте изолировать фрагменты кода и посмотреть, какие его части вызывают ошибку? Также попробуйте выяснить, в чем разница между вашей эмуляцией и реальным устройством, чтобы увидеть, что может вызывать проблемы с асинхронным обратным вызовом?   -  person Code Apprentice    schedule 19.03.2016
comment
Он говорит мне, что такой сессии нет, пока я запускаю ее в эмуляторе. Проблема начинается с первой строки кода в файле спецификаций «первым сделать». Я видел некоторые проблемы, такие как я, но я сделал то, что они сделали, и ничего лучше :(   -  person Emna Ayadi    schedule 19.03.2016
comment
Давайте продолжим это обсуждение в чате.   -  person Emna Ayadi    schedule 19.03.2016