2017-06-14 1 views
1

Ich bin neu bei Winkelmesser. Hier ist meine Config-DateiProbleme während der laufenden Winkelmesser Tests

config:

exports.config = { 
seleniumAddress: 'http://localhost:4444/wd/hub', 

capabilities: { 
    'browserName': 'chrome' 
}, 

specs: ['./protractor-tests/*.js'], 

jasmineNodeOpts: { 
    showColors: true 
} 
} 

Hier habe ich ein Szenario, wo ich das Login am testen, wo der Benutzer Login über Outlook und wenn klicken Sie auf Login es zur Startseite umleitet.

Anmeldung Test:

exports.login = function() { 
describe('Login Test', function() { 
    beforeEach(function() { 
     browser.get('http://domain/login'); 
    }); 
    afterEach(function() { 
     browser.ignoreSynchronization = false; 
    }); 
    it('It should redirect to outlook for auth', function() { 
     browser.ignoreSynchronization = true; 
     var currentUrl; 
     browser.getCurrentUrl().then(function(url) { 
      currentUrl = url; 
     }).then(function() { 
      browser.wait(function() { 
       return browser.getCurrentUrl().then(function(url) { 
        return url !== currentUrl; 
       }); 
      }); 
     }).then(function() { 
      setTimeout(function() { 
       var userName = element(By.xpath('/html/body/div[1]/header/div[1]/section/div[2]/apt-user-profile/div/div/button[1]/span/span')); 
       if (userName) 
        expect(browser.getCurrentUrl()).toContain('http://domain/home'); 
       else 
        expect(browser.getCurrentUrl()).toContain('https://login.microsoftonline.com'); 
      }, 10000); 


     }); 
    }); 

    it('It should login into the application and display user as Tom White', function() { 
     setTimeout(function() { 
      browser.driver.findElement(by.id('cred_userid_inputtext')).sendKeys('[email protected]'); 
      browser.driver.findElement(by.id('cred_password_inputtext')).sendKeys('****'); 
      browser.driver.findElement(by.id('cred_sign_in_button')).click(); 
      var userName = element(By.xpath('/html/body/div[1]/header/div[1]/section/div[2]/apt-user-profile/div/div/button[1]/span/span')); 
      expect(userName.getText()).toEqual('Hello Tom White'); 
     }, 10000); 
    }); 

}); 
} 

Diese Testfälle arbeiten eigentlich in Ordnung, aber wenn in Startseite, muss ich auch auf ein Element klicken, die mich zu einer anderen Seite umleitet es mit Fehler versagt

Failed: javascript error: document unloaded while waiting for result 

Haupttests:

var loginPage = require('./loginTest.js'); 

describe('Home Test', function() { 
    loginPage.login(); 
    it('It should click product', function() { 

      var productMenu = element(By.xpath('/html/body/div[1]/headerdiv[1]/section/div[1]/apt-nav-bar/div/div[2]/div[2]/ul/li[2]/a/span')); 
      productMenu.click(); 
      expect(browser.getCurrentUrl()).not.toEqual('http://domain/home'); 
      expect(browser.getCurrentUrl()).toEqual('http://domain/products'); 


     }) 

}); 

Jede mögliche Hilfe würde sehr geschätzt werden.

Antwort

0

Ihr Problem besteht darin, dass Sie nicht darauf warten müssen, dass die Seite etwas unternimmt. Sie können eine explizite Wartezeit mit der von Protractor bereitgestellten Funktionalität ExpectionConditions implementieren. Hier ist der Link von API.

Eine schmutzige Lösung besteht darin, eine sleep() Methode zu verwenden, so dass die Ausführung für eine bestimmte Zeit pausiert wird, sagen wir 5 Sekunden. So können Sie versuchen browser.sleep(5000), die den Fehler beseitigen sollte. Dies ist jedoch keine gute Lösung.

Bearbeiten 1: Der rootElement Parameter des exports.config Objekts, der in Ihrer Winkelmesserkonfigurationsdatei definiert ist, muss mit dem Element übereinstimmen, das Ihre ng-app Direktive enthält.

In Ihrem Transporteur-conf.js, fügen Sie bitte

rootElement: '.my-app', 

, wenn Ihr HTML ist:

<div ng-app="myApp" class="my-app"> 

Quelle: SO Post.

+0

wenn ich browser.sleep tun (5000) Ich bin immer der Fehler fehlgeschlagen: Fehler beim Warten auf Protractor mit der Seite zu synchronisieren: „window.angular undefiniert –

+0

aktualisierte Antwort, siehe oben. – demouser123

0

Sie rufen die login-Funktion außerhalb von it oder "vor" oder "nach" Funktionen auf, die sich unter dem Kontrollfluss des Winkelmessers befinden. Bewegen Sie die loginPage.login(); Aufruf beforeEach() oder beforeAll():

describe('Home Test', function() { 
    beforeEach(function() { 
     loginPage.login(); 
    }); 

    it('It should click product', function() { 
     var productMenu = element(By.xpath('/html/body/div[1]/headerdiv[1]/section/div[1]/apt-nav-bar/div/div[2]/div[2]/ul/li[2]/a/span')); 
     productMenu.click(); 
     expect(browser.getCurrentUrl()).not.toEqual('http://domain/home'); 
     expect(browser.getCurrentUrl()).toEqual('http://domain/products'); 
    }) 
}); 
Verwandte Themen