Инъектор не найден для аргумента element для getTestability

Я пытаюсь запустить этот учебник против моего собственного кода AngularJS. Я не могу пройти первый тест. Любая попытка вытащить любую информацию с моей страницы получает эту ошибку:

     Error: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.3.8/ng/test"
   Stacktrace:
     Error: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.3.8/ng/test"
    at Error (<anonymous>)
==== async task ====

Protractor.waitForAngular()
==== async task ====
Asynchronous test function: it()

Есть ли у кого-нибудь учебник Protractor, который показывает вам, как настроить свой собственный код, а не код другого?

Заранее благодарю

Ответ 1

Ответ заключается в том, что вы должны иметь <html ng-app> или <html ng-app = ""> в верхней части страницы html, чтобы использовать Protractor.

Например, приложение, входящее в состав <div ng-app = "">, не будет работать

Ответ 2

Как и в принятом ответе, проблема заключается в том, что протрактор знает, что является корнем вашего приложения, именно здесь определено ng-app. По умолчанию предполагается, что это тег, но ваш код, похоже, есть в другом месте. Тем не менее вы действительно можете изменить это поведение в файле конфигурации.

Из файла Protractor файл конфигурации:

  // CSS Selector for the element housing the angular app - this defaults to
  // body, but is necessary if ng-app is on a descendant of <body>.
  rootElement: 'body',

Например, если ваше ng-приложение находится в div как:

<div id="my-app" ng-app=myAppManager">

Вы можете использовать

rootElement: '#my-app'

Поскольку это селектор CSS, вы также можете использовать синтаксис квадратных скобок для выбора по атрибуту, например:

rootElement: '[ng-app]'

Это выберет элемент, содержащий атрибут ng-app, независимо от того, какой он есть.

Ответ 3

У меня есть мой загрузочный код angular, как показано ниже:

var appName = "testApp";
var appContainer = document.getElementById('app-container');
angular.bootstrap(appContainer, [appName]);

Я получил ту же ошибку, что и у меня, и с советом, который я взял у @jgiralt, вот мой conf.js транспортира, который исправил эту ошибку:

// conf.js
exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  rootElement: '#app-container',
  specs: ['spec.js']
}

Ответ 4

Я столкнулся с такой же проблемой при тестировании E2E с жасмином и транспортиром.

Это связано с корневым тегом html.

В то время как runnnig транспортир, я получал ошибку.
"Ошибка при ожидании синхронизации Protractor со страницей:" [ng: test] инжектор не найден для аргумента element для getTestability\nhttp://errors.angularjs.org/1.3.13/ng/test "

Для этого я сделал небольшое изменение в корневом теге html добавив атрибут lang = "en" . Это решило мою проблему.

Заключительный HTML

<!DOCTYPE html> <html lang="en" ng-app="test"> ..... </html>

Надеюсь, это поможет вам.

Спасибо.

Ответ 5

У вас может быть несвязанная ошибка инжектора angular, вызывающая этот вывод от транспортира. Попробуйте очистить терминал, снова запустив транспортир и посмотрев первую ошибку, которая отображается над выводом подробного транспортира. Если это ошибка angular инжектора, вы можете исправить ее, просто добавив тэг script в ваш index.html.

Выход терминала:
Error: [$injector:modulerr] Failed to instantiate module app.components.slider

Может быть исправлено добавлением следующего в index.html:
<script src="app/components/sliders/slider.component.js"></script>

Это работает, потому что модуль app.components.slider определяется в файле app/components/sliders/slider.component.js. Возможно, это было случайно удалено из файла index.html во время слияния/переустановки или никогда не добавлено в первую очередь.