Я запускаю простой пример 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
. Не знаю, почему.