2017-10-04 2 views
0

In einem meiner e2e Tests muss ich die aktuelle URL abrufen und die Ausführung des Tests anhalten, bis ich es bekomme. Dies ist mein aktueller Code:Angular 2 erhalten aktuelle Url in Winkelmesser e2e Test

let publicUrl; 
browser.wait(()=>{ 
    browser.getCurrentUrl().then((url)=>{ 
    publicUrl = url; 
    }) 
}); 
console.log(publicUrl); 

Aber publicUrl immer als die console.log() Linie wird ausgeführt undefiniert ist, bevor der Wert festgelegt wurde. Ich habe viele Kombinationen von browser.wait() versucht und browser.getCurrentUrl() aber ohne Erfolg:

let publicUrl; 

browser.wait(()=>{ 
    return browser.getCurrentUrl() 
}).then((url) => { 
    publicUrl = url; 
}); 

console.log(publicUrl); 

Ich bin mir ziemlich sicher, dass dies möglich sein muss, also nicht sicher, was mache ich falsch.

Antwort

0

Alles, was die .then() verwendet, ist eine asynchronous Funktion. Ihr console.log() und seine aktuelle Positionierung in Ihrem Code ist synchronous, was bedeutet, dass es vor der .getCurrentUrl() wird den Wert zurückgeben wird. Ihr Code muss so aussehen:

let publicUrl; 
browser.wait(()=>{ 
    browser.getCurrentUrl().then((url)=>{ 
    publicUrl = url; 
    return console.log(publicUrl); 
    }); 
}); 

Hoffe, das hilft!

0

GoLGo13 ist richtig. Ich möchte eine weitere Zeile hinzufügen, dass, wenn Sie wissen, Ihre erwartete URL, dann Sie auf bestimmte URL warten können.

Definieren Sie zuerst Ihre erwartete URL in der öffentlichen URL;

let publicUrl=yourExpectedUrl; 
browser.wait(()=>{ 
    browser.getCurrentUrl().then((url)=>{ 
    return url==publicUrl; 
    }) 
}); 
Verwandte Themen