簡體   English   中英

量角器和異步/等待

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM