Protractor: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined

后端 未结 3 1451
长情又很酷
长情又很酷 2021-01-17 13:55

I am trying to write some end to end tests and waned to use async and await.

configuration file

exports.config = {
    framework: \'jasmine\',
             


        
相关标签:
3条回答
  • 2021-01-17 14:04

    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');
    
        })
    
    }) 
    
    0 讨论(0)
  • 2021-01-17 14:11

    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.

    0 讨论(0)
  • 2021-01-17 14:20

    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);.

    0 讨论(0)
提交回复
热议问题