[英]Protractor and async/await
這是我的Page Object類
export class TopMenu {
topbarMenu: ElementFinder;
menuItems;
numberofMenuItems: number;
constructor() {
console.log("TopMenu constructor called");
this.setMenus();
}
async setMenus() {
console.log("aaaaaaaaaa");
this.topbarMenu = await element(by.css("ul[class*='topbar-menu']"));
console.log("bbbbbbbbbb");
this.menuItems = await this.topbarMenu.all(by.xpath("./li"));
console.log("ccccccccc");
}
}
這是我的“ it”塊。 這是程序的起點。
it("Click all Submenues 3", async () => {
browser.waitForAngularEnabled(true);
let topMenu: TopMenu = await new TopMenu();
console.log("ddddddddddddddd");
}
我的輸出是這樣的
**TopMenu constructor called
aaaaaaaaaa
bbbbbbbbbb
ddddddddddddddd
ccccccccc
正如您從我上面的輸出中看到的那樣,在此行解決之前,調用了“ console.log(“ ddddddddddddddddd”)“”“,此行在this.menuItems = await this.topbarMenu.all(by.xpath("./li"));
解析為” this.menuItems = await this.topbarMenu.all(by.xpath("./li"));
類”
可以省略嗎?
我要在完全創建“ TopMenu”后執行我在“ it block”中的任何行。
怎樣像這樣控制流量?
await
構造函數,除非您構造的Promise(不是必需的)沒有意義,因為構造函數無法返回Promise(創建Promise時除外)
您可能想要做類似的事情
export class TopMenu {
topbarMenu: ElementFinder;
menuItems;
numberofMenuItems: number;
somePromise;
constructor() {
console.log("TopMenu constructor called");
this.somePromise = this.setMenus();
}
async setMenus() {
console.log("aaaaaaaaaa");
this.topbarMenu = await element(by.css("ul[class*='topbar-menu']"));
console.log("bbbbbbbbbb");
this.menuItems = await this.topbarMenu.all(by.xpath("./li"));
console.log("ccccccccc");
}
}
it("Click all Submenues 3", async () => {
browser.waitForAngularEnabled(true);
let topMenu: TopMenu = new TopMenu();
await topMenu.somePromise;
console.log("ddddddddddddddd");
}
現在,您的it
塊將等待setMenus
返回的setMenus
注意:根據您得到的輸出,我可以放心地說element(...
不是異步的(嗯,它沒有返回Promise,它很可能具有異步性,但是一點都沒有“暴露”出來) )-因此您不需要await element(....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.