2016-03-11 17 views
5

Wygląda na to, że mam błąd podczas korzystania z przykładu conf.js dostarczonego z kątomierzem. Uruchomiłem testy z grunt-protractor-runner, ale błędy wystąpiły nawet podczas korzystania z podanej konfiguracji przykładu."window.angular nie jest zdefiniowana." podczas używania kątomierza do automatycznego testowania?

My Gruntfile.js wygląda następująco:

/*global module:false*/ 
module.exports = function(grunt) { 
    // Project configuration. 
    grunt.initConfig({ 
     protractor: { 
     options: { 
      configFile: "smoketest.conf.js", // Default config file 
      keepAlive: false, // If false, the grunt process stops when the test fails. 
      noColor: false, // If true, protractor will not use colors in its output. 
      webdriverManagerUpdate: true, 
      args: { 
      seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.51.0.jar' 
      } 
     }, 
     smoke_test: { // Grunt requires at least one target to run so you can simply put 'all: {}' here too. 
      options: { 
      configFile: "smoketest.conf.js", // Target-specific config file 
      args: { 
       } 
      } 
     }, 
     protractor_test: { // Grunt requires at least one target to run so you can simply put 'all: {}' here too. 
      options: { 
       configFile: "./node_modules/protractor/example/conf.js", // Target-specific config file 
       args: { 
       } 
      } 
     }, 


     }, 
    }) 

    grunt.loadNpmTasks('grunt-protractor-runner'); 
    // Default task. 
    grunt.registerTask('default', ['protractor:smoke_test']); 

}; 

Używam grunt protractor:protractor_test który wykorzystuje ten plik

describe('angularjs homepage', function() { 
    it('should greet the named user', function() { 
    browser.get('http://www.angularjs.org'); 

    element(by.model('yourName')).sendKeys('Julie'); 

    var greeting = element(by.binding('yourName')); 

    expect(greeting.getText()).toEqual('Hello Julie!'); 
    }); 

    describe('todo list', function() { 
    var todoList; 

    beforeEach(function() { 
     browser.get('http://www.angularjs.org'); 

     todoList = element.all(by.repeater('todo in todoList.todos')); 
    }); 

    it('should list todos', function() { 
     expect(todoList.count()).toEqual(2); 
     expect(todoList.get(1).getText()).toEqual('build an angular app'); 
    }); 

    it('should add a todo', function() { 
     var addTodo = element(by.model('todoList.todoText')); 
     var addButton = element(by.css('[value="add"]')); 

     addTodo.sendKeys('write a protractor test'); 
     addButton.click(); 

     expect(todoList.count()).toEqual(3); 
     expect(todoList.get(2).getText()).toEqual('write a protractor test'); 
    }); 
    }); 
}); 

jednak, gdy ten skończy jestem przedstawiane z błędem

Error while waiting for Protractor to sync with the page: "window.angular is undefined. This could be either because this is a non-angular page or because your test involves client-side navigation, which can interfere with Protractor's bootstrapping. See http://git.io/v4gXM for details"`enter code here` 

Byłem w http://git.io/v4gXM, ale nie mogę wydaje się, że znajdziesz coś, co naprawi mój problem? Czy ktokolwiek inny miał ten problem, na pewno przykładowy test powinien działać zawsze?

+0

powróciła do starszej wersji kątomierz (ostatni znany pracować z naszych scenariuszy testowych) i działa ...? –

+0

Prawdopodobnie z powodu 'Jasmine' spróbuj przełączyć się na użycie' Jasmine2' następnym razem, jeśli masz podobny problem. (Istnieje wiele możliwości, ale najłatwiejszym rozwiązaniem jest użycie jaśminu2). –

+0

Po aktualizacji Kątomierza pojawia się podobny błąd. Dla mnie nie dostałem tego błędu w 3.1.1, ale dostałem inne błędy, więc miałem nadzieję, że 3.2.1 naprawi te błędy. Ale w 3.2.1 mam dokładnie ten błąd. Pomyślałem, że może to wynikać z faktu, że moja dyrektywa ng-app znajduje się na elemencie HTML, a nie na elemencie body. Ale dodanie rootElement: "html" do mojej konfiguracji Protractor nie pomogło. https://github.com/angular/protractor/issues/1742 – Keith

Odpowiedz

0

Mam dokładnie ten sam problem (kątomierz 3.1.0 z Jasmine2). Wydaje mi się, że winowajcą jest browser.get() w twoim zgłoszeniu beforeEach(). Kopiowanie tego do każdego testu może być obejściem problemu.

+0

To był tylko przykładowy skrypt, robię browser.get() w moich własnych testach, jak mówisz, i wciąż dostajesz ten sam błąd. –

+0

W sekcji odpowiadającej jest napisane: "Pomóż nam znaleźć rozwiązanie, badając problem, a następnie dodaj wyniki swoich badań i wszystko, co próbujesz, jako częściową odpowiedź". – TomVW

5

Exclaimer !!: To nie odpowiada na twoje pytanie jako takie, ale zapewnia hack do rozwiązania.

Kątomierz wymaga strony kątowej, aby zakończyć synchronizację, zanim spełni jej oczekiwania. Dlatego też, w celu obejścia tego problemu można użyć:

browser.ignoreSynchronization = true; 
browser.waitForAngular(); 
browser.sleep(500); 

ta informuje przeglądarkę, że kątomierz otwiera się nie czekać na kątowa do synchronizacji (ignoreSynchronization), a następnie czeka na kanciasty, aby zakończyć wszystko inne to robi , następnie dodaje czekanie 500 milisekund, aby dać kątomierzowi szansę na znalezienie addButton.click(). Kiedy kończy się oczekiwanie, zmusza on kątomierz do przejścia do następnego wiersza kodu, który zawiera oczekiwanie, przed tym zatrzymał się na linii addButton.click() i czekał na synchronizację (co nie miało miejsca), zanim ruszył dalej.

(myślę ...)

0

wychodził sam problem i go rozwiązać dla mnie: -

1. downgrade protractor to 3.0.0 
2. add jasmine2 in conf.js 
Powiązane problemy