2013-08-27 20 views
12

Sto provando a ottenere un test di e2e in esecuzione contro il mio server locale e verificare che l'url risultante (dopo aver fatto clic su un pulsante di navigazione) sia il risultato corretto. Tuttavia l'url risultante è sempre falso.goniometro aspettarsi errori currenturl

Il mio codice è il seguente:

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> 

CODICE TEST:

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

Il problema è l'URL corrente dopo aver fatto clic sul pulsante rimane #/current_url e non lo fa cambia al risultato previsto #/new_page.

Qualcuno sa dove ho sbagliato?

risposta

10

Dopo la ricerca per la risposta a questa domanda che ho capito io

l'URL corrente non manca, non mi aspettavo la promessa di tornare a angolare. Il codice ammended qui sotto mostra dove avevo sbagliato

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

Questo quindi attende angolare per instradare alla nuova pagina e aggiornare eventuali attacchi e poi procede a verificare il risultato atteso che ora è quello che mi aspetterei che fosse .

Si prega di notare che questo non risolve tutti i problemi relativi a risultati getCurrentUrl() imprevisti. se si utilizza driver.findElement() potrebbe essere necessario fare riferimento alla risposta di JulieMR a this question

Spero che questo aiuti qualcuno bloccato su questo problema.

+6

In versioni correnti deve essere 'ptor.getCurre ntUrl() '. Qualcos'altro va bene. –

2

In Protractor 1.5.0 protractor.getInstance(); non funziona più, quindi è necessario utilizzare browser invece.

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

È possibile anche scrivere una custom expected condition-wait per URL corrente a parità di un desiderato uno. Inoltre, utilizzare browser e element notazioni:

browser.get("#/current_page"); 

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

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

dove urlChanged è:

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

Oppure, un goniometro> = 4.0.0 soluzione e la condizione urlContains previsto:

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

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