9
votes

Rapporteur: Erreur lors de l'attente de la synchronisation de Protractor avec la page: "La testabilité angularJS et la testabilité angulaire ne sont pas définies

J'essaie d'écrire des tests de bout en bout et j'ai décidé d'utiliser async et await.

fichier de configuration

    describe('home-view', function(){

    beforeEach(async function(){

        await browser.get('http://localhost:49335/index.html#!/home');

    });

    it('sorted by firstname', async function(){

        await element(by.css("[ng-click=\"sortData('firstname')\"]")).click();
        var firstname = element.all(by.repeater('a in emps')).all(by.css('td'));     
        expect(await firstname.get(0).getText()).toEqual('abraham');

    });

})

fichier de spécifications

exports.config = {
    framework: 'jasmine',
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['spec.js'],
    SELENIUM_PROMISE_MANAGER: false,
    getPageTimeout: 10000,
    multiCapabilities: [
        {
            browserName: 'firefox'
        }, {
            browserName: 'chrome'
        }
    ]
}

Erreur Erreur lors de l'attente de la synchronisation de Protractor avec la page: "la testabilité angularJS et la testabilité angulaire ne sont pas définies. Cela peut être soit parce qu'il s'agit d'une page non angulaire, soit parce que votre test implique une navigation côté client, ce qui peut interférer avec l'amorçage de Protractor. "

Pourquoi ai-je cette erreur? Merci


0 commentaires

3 Réponses :


11
votes

Vous obtenez cette erreur car le rapporteur par défaut attend que la page angulaire soit chargée. Si vous travaillez avec non angulaire, vous devez ajouter await browser.waitForAngularEnabled (false); au bloc onPrepare :

both angularJS testability and angular testability are undefined

Comment cela " attente "mécanisme fonctionne? Je vais copier la description du 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.

Donc, comme vous pouvez le voir, il s'agit de $ http et de $ timeout code > tâches. Un peu souvent, les développeurs ne l'utilisent pas correctement.

En conclusion, si vous voyez une telle erreur:

 onPrepare: async () => {
 ...
 await browser.waitForAngularEnabled(false);
 ...  

vous devez ajouter wait browser.waitForAngularEnabled (false); .


4 commentaires

c'est une application angularjs


J'irai plus loin dans ma réponse si vous avez besoin


@Oleksii, la variable browser provient-elle de rapporteur ?


@ChenDachao oui



0
votes

Donnez à getPageTimeOut plus de 20 secondes. Utilisez une attente explicite comme browser.sleep (2000) après la méthode browser.get. L'erreur s'est produite peut être due à une réponse lente de la page Web et utiliser également dirctConnect au lieu de seleniumAddress.


0 commentaires

0
votes

Plus tôt Tout ce dont j'avais besoin pour ajouter ceci dans mon script.js browser.driver.ignoreSynchronization = true;

Cependant, l'ajout de ceci a résolu mon problème. browser.waitForAngularEnabled (false);

Le script.js final est donc

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 commentaires