19

In goniometro, disponibile a livello globale browser oggetto ha due metodi:getLocationAbsUrl vs getCurrentUrl

restituisce il corrente URL assoluto da AngularJS.

Orari un comando per recuperare l'URL della pagina corrente.

Non è abbastanza chiaro e ovvio qual è la differenza tra i due. In questo momento, ho utilizzato solo getCurrentUrl().

Quando dovremmo usare getLocationAbsUrl()? Quali casi d'uso copre?


Non riesco a ricordare qualcosa di simile a getLocationAbsUrl() in altri attacchi lingua selenio. Sembra praticamente specifico per il goniometro.

+2

'getLocationAbsUrl' è sicuramente specifico per goniometro (/ angolare), utilizza' $ posizione' sull'elemento angolare: https: // github.com/angular/goniometro/blob/master/lib/clientsidescripts.js # L617. Dove come, come dici, 'getCurrentUrl()' è selenio/webdriver. Non rispondendo perché non so quando ognuno è preferito - anche interessato a una risposta. – DRobinson

+0

Non conosco la risposta, ma non ho mai sentito il bisogno di usare nessuno dei due. Faccio sempre asserzioni e attendo localizzatori specifici (elementi) piuttosto che url, perché è una situazione comune avere un cambio di URL prima che una parte specifica della tua pagina venga inserita nel dom. Quindi trovo più stabile aspettare i cambiamenti nella dom piuttosto che i cambiamenti nell'URL. – Dziamid

+0

@Dziamid usiamo le attese esplicite per aspettare anche le modifiche nel DOM, che rende i test più affidabili e aiuta ad evitare sorprese. Ma ci sono casi in cui anche la posizione dell'URL deve essere controllata. Grazie. – alecxe

risposta

16

GitHub per getCurrentUrl

webdriver.WebDriver.prototype.getCurrentUrl = function() { 
    return this.schedule(
     new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL), 
     'WebDriver.getCurrentUrl()'); 
}; 

Utilizza le schedule() ->command() wrapper per risolvere una promessa da WebDriver.getCurrentUrl()


GitHub fonte per Protractor.getLocationAbsUrl

functions.getLocationAbsUrl = function(selector) { 
    var el = document.querySelector(selector); 
    if (angular.getTestability) { 
    return angular.getTestability(el). 
     getLocation(); 
    } 
    return angular.element(el).injector().get('$location').absUrl(); 
}; 

semplicemente un wrapper per $location.absUrl() con un'attesa per le AngularJS libreria per caricare


URL attuale vs assoluto URL

determinato URL app:

http://www.example.com/home/index.html#/Home 

L'URL corrente si risolve in m minerale di un URI

/home/index.html#/Home 

URL assoluto decide di

http://www.example.com/home/index.html#/Home 

Quando si desidera utilizzare URL assoluto: Si desidera utilizzare l'URL di dominio completo, piuttosto che la navigazione locale (URI), si desidera l'URL assoluto.

  • Se l'applicazione effettua le chiamate per la URL corrente, i test devono chiamare getCurrentUrl().

  • Se il codice invia richieste per URL assoluto, i test devono chiamare getLocationAbsUrl().

+0

Grazie, Dave, per la spiegazione dettagliata! – alecxe

2

Fondamentalmente dovrebbero fare la stessa cosa, restituire l'URL della pagina.

Da questo bug report:

https://github.com/angular/protractor/issues/132

sembra che IEDriver per selenio era sempre la restituzione della prima pagina caricata, non è quella attuale. Quindi il team del goniometro ha implementato una chiamata JS a Angular's $location per restituire sempre l'URL correttamente tramite Javascript, non Protocollo Webdriver.

fonte
2

Come affermato in precedenza il getLocationAbsUrl - restituisce un percorso completo della posizione corrente. browser.get(' http://angular.github.io/protractor/#/api '); expect(browser.getLocationAbsUrl()) .toBe(' http://angular.github.io/protractor/#/api ');

getCurrentUrl viene utilizzato in una promessa (pianificazione) per recuperare l'URL della pagina corrente. In genere, si utilizzerà solo getCurrentUrl durante la pianificazione.

webdriver.WebDriver.prototype.getCurrentUrl = function() { return this.schedule(new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL),'WebDriver.getCurrentUrl()'); }