2016-02-23 8 views
17

Sto eseguendo un semplice esempio HelloWorld con Protractor 3.1.1 e Angular2, ma questa cosa continua a dirmi Impossibile trovare testabilità per l'elemento. Ho cercato su Internet un po 'di informazioni sull'errore, ma senza fortuna, sembra essere un nuovo tipo di eccezione che non molti hanno affrontato.Protractor 3.1.1 + Angular2: impossibile trovare testabilità per l'elemento

Questo è il componente che sto utilizzando:

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'; 
} 

Questo è il file di configurazione goniometro:

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

E questo è lo scenario goniometro sto facendo funzionare:

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'); 
    }); 
}); 

La pagina web si carica normalmente con il modello HTML reso, ma Protractor pensa che la pagina web risultante non sia un Pagina web angolare, ora, perché è così? E ovviamente, se ispeziono la pagina web risultante, è solo l'HTML risultante del codice angolare elaborato, sto facendo qualcosa di sbagliato?

Questo è l'errore completo:

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

Se corro un semplice test come dice il goniometro Tutorial, utilizzando questa pagina demo: http://juliemr.github.io/protractor-demo/, esso funziona come previsto, quindi qualcosa è il mio codice Angular2 che il goniometro non funziona con esso, ma ho già finito le idee, nessuno sa cosa sta succedendo?

UPDATE 23-02-2016

Dopo alcune ricerche ho scoperto che per utilizzare goniometro con Angular2, ci deve essere una linea di configurazione aggiuntiva nel file di configurazione:

useAllAngular2AppRoots: true 

tale che conf js appare ormai come:

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

o includere la radice app esplicitamente:

rootElement: 'my-app' 

Dopo questo aggiornamento tutte le chiamate per trovare un elemento by.id() lavoro OK, ma se si fa finta di utilizzare uno dei localizzatori by.model() o by.binding(), sarà semplicemente con il messaggio UnknownError: unknown error: angular is not defined. Non ho idea del perché.

+0

stesso problema, credo che userò 'by.id()' o 'by.css()' per il momento ... È – foch

+1

mi hai appena salvato un sacco di chiacchiere! –

+0

risolto anche per me! dovresti postare l'aggiornamento come risposta in modo che gli altri possano facilmente trovare la soluzione. – OJ7

risposta

2

Apparentemente c'è un bug in quel commit. Check this!.

Ma per ora è possibile eseguire i test utilizzando browser.executeScript('window.name = "NG_ENABLE_DEBUG_INFO!"');

Problemi correlati