量角器和异步/等待

问题描述 投票:1回答:1

这是我的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("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(”ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd)

有可能省略吗?

我希望在我的“TopMenu”完全创建之后,在“它阻止”内执行任何一行。

如何控制流量?

javascript async-await jasmine protractor angular-e2e
1个回答
2
投票

this.menuItems = await this.topbarMenu.all(by.xpath("./li"));ing一个构造函数,除非你构造一个Promise(你不是)没有意义,因为构造函数不能返回一个Promise(创建一个Promise时除外)

你可能想要做类似的事情

await

现在你的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不是异步的(好吧,它不会返回Promise,它可能有异步,但它根本不是“暴露”) - 因此你不需要element(...

© www.soinside.com 2019 - 2024. All rights reserved.