javascript - Error while waiting for Protractor to sync with the page: "angular could not be found on the window" on running protractor test case -


i testing angular website. our application starts login page , vertical application selection frame (on left corner of page) non-angular web-pages , after selecting application in left frame, it opens angular site inside frame (right application selection frame).

i have following code automate scenario using cucumber , protractor. after logging in , launching application left frame, error message as:

uncaught exception: error while waiting protractor sync page: "angular not found on window".

[launcher] process exited error code 1

process finished exit code 1

please find code snippet below:

var chai = require('chai');  var chaiaspromised = require('chai-as-promised');  chai.use(chaiaspromised);  var expect = chai.expect;  var assert = chai.assert;  var mystepdefinitionswrapper = function () {        this.given(/^i login application valid (.*) , (.*)$/, function (username, password) {            browser.driver.get(browser.baseurl);          browser.driver.wait(function () {              return browser.driver.iselementpresent(by.id("contentplaceholder1_usernametextbox"));          }, 10000);            browser.driver.findelement(by.id("contentplaceholder1_usernametextbox")).then(function (usernamefield) {              usernamefield.sendkeys(username);          });            browser.driver.findelement(by.id("contentplaceholder1_passwordtextbox")).then(function (passwordfield) {              passwordfield.sendkeys(password);          });            return browser.driver.findelement(by.id("contentplaceholder1_submitbutton")).click();      });        this.given(/^i launch application application selection page$/, function () {          browser.driver.wait(function () {              return browser.driver.iselementpresent(by.xpath("//a[starts-with(@class,'cp-icon') , contains(@style,'applaunch_default_26x26')]"));          }, 10000);          browser.driver.findelement(by.xpath("//a[starts-with(@class,'cp-icon') , contains(@style,'applaunch_default_26x26')]")).click();          browser.driver.wait(function () {              return browser.driver.iselementpresent(by.xpath("//span[contains(@title,'appname')]"));          }, 10000);          return browser.driver.findelement(by.xpath("//span[contains(@title,'appname')]")).click();      });        this.when(/^i open task (.*)$/, function (personname) {  		//anugular website starts here          browser.waitforangular();          return element(by.xpath("//td[contains(text(),'" + personname + "')]/following::td[2]/button[text()='perform']")).click();      });

i've had issue few times before, login page(with angular) takes me 'success' page(without angular), redirects me landing page(with angular).

this works quite nicely:

loginbtn.click(); browser.wait(function () {     return browser.executescript('return !!window.angular'); }, 10000, 'timed out waiting angular after login page); 

see if can work well!

edit after edit: sweet, 1 looks tricky! let's see can find out.

can switch frame? check out:

https://angular.github.io/protractor/#/api?view=webdriver.webdriver.targetlocator.prototype.frame https://angular.github.io/protractor/#/api?view=webdriver.webdriver.prototype.switchto

since non-angular @ start, may need:

browser.driver.switchto().frame(element(by.id('framewithangular'))); 

i don't think need browser.wait until can switch frame, i'm not sure behavior when in non-angular area @ start.

another thing try pointing config area angular rootelement(line 173): https://github.com/angular/protractor/blob/master/docs/referenceconf.js

this disrupt rest of flow, though, depending on site layout. bit more reading iframes, though in angular talks waiting frames properly: protractor: testing angular app in iframe

let me know if can closer this!


Comments