I am trying to write some end to end tests and waned to use async and await.
configuration file
exports.config = {
framework: \'jasmine\',
You got this error because Protractor by default wait angular page is loaded. If you work with non angular you should add await browser.waitForAngularEnabled(false);
to onPrepare
block:
onPrepare: async () => {
...
await browser.waitForAngularEnabled(false);
...
How does this "waiting" mechanism works? I will copy description from code:
* If set to false, Protractor will not wait for Angular $http and $timeout
* tasks to complete before interacting with the browser. This can cause
* flaky tests, but should be used if, for instance, your app continuously
* polls an API with $timeout.
So, as you can see it is all about $http
and $timeout
tasks. A bit often developers use it in a not proper way.
In conclusion, if you see such error:
both angularJS testability and angular testability are undefined
you have to add await browser.waitForAngularEnabled(false);
.
Give the getPageTimeOut more than 20 sec. Use explicit wait like browser.sleep(2000) after browser.get method. The error occured may be because of slow response from webpage and also use dirctConnect instead of seleniumAddress.
Earlier All I needed to add this in my script.js browser.driver.ignoreSynchronization = true;
However adding this solved my problem. browser.waitForAngularEnabled(false);
So altogether final script.js is
describe('My first non angular class', function() {
it('My function', function() {
browser.driver.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
browser.driver.manage().window().maximize();
//browser.get('http://juliemr.github.io/protractor-demo/');
browser.driver.get('https://stackoverflow.com/users/login');
element(by.id('email')).sendKeys('6');
})
})