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
Post a Comment