2013-08-27 3 views
12

Ich versuche, einen e2e-Test läuft gegen meinen lokalen Server und testen, dass die resultierende URL (nachdem eine Navigationsschaltfläche geklickt wurde) das richtige Ergebnis ist. Die resultierende URL ist jedoch immer falsch.Winkelmesser erwarte currenturl schlägt fehl

Mein Code ist unten dargestellt:

HTML:

//http://localhost/#/current_Page 
<html> 
    <head><title></title></head> 
    <body> 
    //should change the current url to 
    //http://localhost/#/new_page 
    <button class="button" ng-click="change_page()">Change Page</button> 
</html> 

TEST CODE:

var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  
    var ptor; 

    describe('Test 1', function() { 
     var ptor = protractor.getInstance(); 
     ptor.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       expect(ptor.currentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 

Das Problem ist die aktuelle URL nach dem Klick auf die Schaltfläche #/current_url bleibt und nicht Wechseln Sie zum erwarteten Ergebnis #/new_page.

Weiß jemand, wo ich falsch gelaufen bin?

Antwort

10

Nach Suche nach der Antwort auf diese Frage habe ich es selbst heraus

Die aktuelle URL nicht fehlschlägt, ich warte nicht für das Versprechen Winkel zurückzukehren. Der Fügte Code unten zeigt, wo ich falsch war

gegangen
var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  
var ptor; 

describe('Test 1', function() { 
    var ptor = protractor.getInstance(); 
    ptor.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       ptor.waitForAngular(); 
       expect(ptor.currentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 

Diese wartet dann auf Winkel auf dem Weg zu der neuen Seite und alle Bindungen aktualisieren und dann geht das erwartete Ergebnis zu überprüfen, die jetzt das, was ich würde erwarten, dass es sein .

Bitte beachten Sie, dass dies nicht alle Probleme im Zusammenhang mit unerwarteten getCurrentUrl() Ergebnissen löst. Wenn Sie driver.findElement() verwenden, müssen Sie möglicherweise auf JulieMRs Antwort auf this question

verweisen. Ich hoffe, dass dies jemandem hilft, bei diesem Problem festzuhalten.

+6

In aktuelle Versionen muss es 'ptor.getCurre sein ntUrl() '. Alles andere ist in Ordnung. –

2

In Winkelmesser 1.5.0 protractor.getInstance(); funktioniert nicht mehr, so müssen Sie stattdessen browser verwenden.

var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  

describe('Test 1', function() { 
    browser.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       browser.waitForAngular(); 
       expect(browser.getCurrentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 
0

können Sie auch eine custom expected condition-wait für aktuelle URL schreiben, um gleich einer gewünschten. Außerdem verwenden browser und element Notationen:

browser.get("#/current_page"); 

it("change page and current url", function() { 
    element(by.css(".button")).click(); 

    browser.wait(urlChanged("#/new_page")), 5000); 
}); 

wo urlChanged ist:

var urlChanged = function(url) { 
    return function() { 
    return browser.getCurrentUrl().then(function(actualUrl) { 
     return actualUrl.indexOf(url) >= 0; 
    }); 
    }; 
}; 

Oder ein Winkelmesser> = 4.0.0 Lösung und die urlContains erwartete Bedingung:

element(by.css(".button")).click(); 

var EC = protractor.ExpectedConditions; 
browser.wait(EC.urlContains("#/new_page"), 5000);