Hello,
I am trying to test an angular app, that has Non-angular iframe in one of the screen.
Would you please let me know if there is any work-around for this issue.
on trying to switch to iframe, seeing following error.
Tried following 2 approaches, seeing same error.
var iframe = element(by.tagName('iframe'));
browser.switchTo().frame(iframe);
var iframe = element(by.tagName('iframe'));
browser.ignoreSynchronization = true; //as iframe non-angular, tried this approach as well.
browser.driver.switchTo().frame(iframe);
Message:
RangeError: Maximum call stack size exceeded
Stacktrace:
RangeError: Maximum call stack size exceeded
==== async task ====
Asynchronous test function: it()
experiencing same problem
had same issue , fixed it by searching frame element via browser.driver.findelements(locator) instead of element(locator). That fixed the issue
This will be fixed with the latest version, since element won't resolve to itself anymore.
Temporary fix:
browser.driver.switchTo().frame(iframe.getWebElement())
@juliemr is this supposed to be fixed for version 3.0.0? 'cause I'm having the issue when using with CucumberJS, btw, I also using gulp-protractor and CucumberJS I had implemented as custom, as suggested.
"error_message": "RangeError: Maximum call stack size exceeded\n
at Object.goog.array.peek (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/array/array.js:68:15)\n
at Object.promise.ControlFlow.goog.defineClass.goog.defineClass.promise.controlFlow (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:2938:14)\n
at promise.Promise.goog.defineClass.constructor (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1024:38)\n
at new wrappedCtr (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:2468:26)\n
at promise.Deferred.goog.defineClass.constructor (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1371:20)\n
at new wrappedCtr (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:2468:26)\n
at Object.promise.defer (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1501:10)\n
at convertKeys (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:236:34)\n
at convertValue (/Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:218:16)\n
at /Users/brunosoko/Folder/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:252:32"
Here's what I'm doing:
this.Then(/^I see the uploader is shown$/, function(done){
//browser.wait(EC.visibilityOf(uploaderPage.btnFacebook));
browser.switchTo().frame(uploaderPage.frame);
browser.executeScript()
expect(uploaderPage.container.isDisplayed()).to.eventually.be.true;
expect(uploaderPage.btnFacebook.isDisplayed()).to.eventually.be.true;
expect(uploaderPage.btnFlickr.isDisplayed()).to.eventually.be.true;
expect(uploaderPage.btnHardDrive.isDisplayed()).to.eventually.be.true;
expect(uploaderPage.btnInstagram.isDisplayed()).to.eventually.be.true;
expect(uploaderPage.btnYouTube.isDisplayed()).to.eventually.be.true;
uploaderPage.btnFacebook.click();
done();
});
And my uploader.frame looks like:
this.frame = $('#v1iframe');
I am still having this issue, living with the temporary fix for now.
Most helpful comment
This will be fixed with the latest version, since
elementwon't resolve to itself anymore.Temporary fix:
browser.driver.switchTo().frame(iframe.getWebElement())