1

这是我的页面对象类

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("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("dddddddddddddddd")”在此行解析之前被调用“this.menuItems = await this.topbarMenu.all(by.xpath("./li"));在 TopMenu 类中”

可以省略吗?

我想在我的“TopMenu”完全创建后执行我在“it block”中的任何行。

如何控制这样的流量?

4

1 回答 1

2

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

注意:根据您得到的输出,我可以肯定地说这element(...不是异步的(好吧,它不返回 Promise,它很可能具有异步性,但根本没有“暴露”) - 因此你不不需要await element(....

于 2019-03-10T06:16:23.480 回答