Подтвердить что ты не робот

Транспортир 3.1.1 + Angular2: не удалось найти проверяемость элемента

Я запускаю простой пример HelloWorld с помощью Protractor 3.1.1 и Angular2, но эта вещь продолжает говорить мне Не удалось найти тестовую возможность для элемента. Я искал интернет для получения некоторой информации об ошибке, но не повезло, это похоже на новый вид исключения, с которым не столько сталкивались.

Это компонент, который я использую:

import {Component} from 'angular2/core';

@Component({
    selector: 'my-app',
    template: '<h1>My First Angular 2 App</h1>' +
    '<h2>{{myName}}</h2>' +
    '<input id="someId" [(ngModel)]="myName"/>'
})
export class AppComponent {
    myName = 'Joe';
}

Это конфигурационный файл Protractor:

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: [
    'e2e/*.js'
  ],
  baseUrl: 'http://localhost:3000'
};

И это сценарий "Протрактор", который я запускаю:

describe('angularjs homepage', function() {
    it('should say my name', function() {
        browser.get('/index.html');
        var greeting = element(by.id('someId'));
        expect(greeting.getAttribute('value')).toEqual('Joe');
    });
});

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

Это полная ошибка:

Error: Failed: Error while waiting for Protractor to sync with the page: "Could not find testability for element."

Если я запустил простой тест, как говорит Учебник по укладчикам, используя эту демонстрационную страницу: http://juliemr.github.io/protractor-demo/, он работает так, как ожидалось, поэтому у меня есть Angular2 код, с которым не работает Обработчик, но у меня уже не было идей, кто-нибудь знает, что происходит?

ОБНОВЛЕНИЕ 23-02-2016

После некоторых исследований я обнаружил, что для использования Protractor с Angular2 в конфигурационном файле должна быть добавлена ​​дополнительная строка конфигурации:

useAllAngular2AppRoots: true

так что conf.js теперь выглядит так:

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: [
    'e2e/*.js'
  ],
  baseUrl: 'http://localhost:3000',
  useAllAngular2AppRoots: true
};

или явно укажите корень приложения:

rootElement: 'my-app'

После этого обновления все вызовы для поиска элемента by.id() работают нормально, но если вы притворяетесь, что используете какой-либо локатор by.model() или by.binding(), он просто провалится с сообщением UnknownError: unknown error: angular is not defined. Не знаю, почему.

4b9b3361

Ответ 1

По-видимому, в этой фиксации есть ошибка. Проверьте это!.

Но пока вы можете запускать свои тесты, используя browser.executeScript('window.name = "NG_ENABLE_DEBUG_INFO!"');

Ответ 2

С помощью Protractor и Angular добавьте rootElement: 'my-app-root' в protractor.conf.js, где my-app-root - имя элемента (селектор CSS). Документация по конфигурации доступна здесь.