如何在打字稿中的对象中使用 class 函数?

How to use class function in Object in typescript?

我在 angular 中写了一个 and to end 测试。这是页面对象的代码 class.

export class AppPage {

NodeArrow(node) {
  let NodeArrow = $$('.toggle-children').get(node);
  return NodeArrow;
  }
}

并且我试图从 class 之外使用它。

  import { AppPage } from './app.po';
  describe('Interactive component', async () => {
  beforeEach(async () => {
    page.navigateToEditor();
    browser.waitForAngularEnabled(false);
  });
  let page = await new AppPage();
   it('Deleting item in Paramter tab works', async() => {
       await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }

但它说 NodeArrow 未定义。我怀疑我是否用打字稿正确地写下了这个功能。请让我知道我做错了什么

class 的构造函数不能 return promise,所以你不能 await 它。

import { AppPage } from './app.po';
describe('Interactive component', async () => {
    beforeEach(async () => {
        page.navigateToEditor();
        browser.waitForAngularEnabled(false);
    });
    let page = new AppPage(); // No await
    it('Deleting item in Paramter tab works', async () => {
        await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }
});

如果您有需要在正确初始化对象之前完成的异步代码,您可以使用静态辅助函数:

export class AppPage {
    private constructor() {
        // non async code 
    }

    static async create() : Promise<AppPage> {
        var r = new AppPage();
        await r.asynInit()
        return r
    }
    async asynInit() : Promise {
        // async cod
        await delay(100);
    }
    NodeArrow(node) {
        let NodeArrow = $$('.toggle-children').get(node);
        return NodeArrow;
    }
}

import { AppPage } from './app.po';
describe('Interactive component', async () => {
    beforeEach(async () => {
        page.navigateToEditor();
        browser.waitForAngularEnabled(false);
    });
    let page = await AppPage.create();
    it('Deleting item in Paramter tab works', async () => {
        await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }
});

从您的 new AppPage()

中删除 await
import {
  AppPage
} from './app.po';

describe('Interactive component', async () => {
  beforeEach(async () => {
    page.navigateToEditor();
    browser.waitForAngularEnabled(false);
  });
  let page = new AppPage(); // remove await
  it('Deleting item in Paramter tab works', async () => {
    await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
  })
});