在我的一个e2e测试中,我需要获取当前的url并暂停执行测试,直到我得到它。这是我目前的代码:
let publicUrl;
browser.wait(()=>{
browser.getCurrentUrl().then((url)=>{
publicUrl = url;
})
});
console.log(publicUrl);
但publicUrl
始终未定义,因为console.log()
行在设置值之前执行。我尝试了browser.wait()
和browser.getCurrentUrl()
的多种组合,但没有成功:
let publicUrl;
browser.wait(()=>{
return browser.getCurrentUrl()
}).then((url) => {
publicUrl = url;
});
console.log(publicUrl);
我很确定这一定是可能的,所以不确定我做错了什么。
答案 0 :(得分:0)
使用 .then()的任何内容都是asynchronous函数。您的 console.log()及其在代码中的当前位置为synchronous,这意味着它会在 .getCurrentUrl()返回值之前执行。您的代码必须如下所示:
let publicUrl;
browser.wait(()=>{
browser.getCurrentUrl().then((url)=>{
publicUrl = url;
return console.log(publicUrl);
});
});
希望这有帮助!
答案 1 :(得分:0)
GoLGo13是对的。 我想添加一行,如果你知道,你的预期网址,然后 你可以等待特定的网址。
首先在公共网址中定义您的预期网址;
let publicUrl=yourExpectedUrl;
browser.wait(()=>{
browser.getCurrentUrl().then((url)=>{
return url==publicUrl;
})
});
答案 2 :(得分:0)
const test = await browser.driver.getCurrentUrl();
如果您需要添加网址以检查某些资产网址等,则此方法非常理想。
参考:https://github.com/angular/protractor/issues/5154#issuecomment-667656260