加载html时如何等待电子

时间:2018-10-10 13:13:35

标签: javascript electron webdriver-io spectron

我有一个电子应用程序,该应用程序在打开时会加载HTML文件。 当我尝试从打开的页面中等待带有waitUntil方法的元素时,Spectron试图在页面加载时找到该元素,这会使我的应用程序崩溃,并且应用程序停留在空白页面。我如何等待加载此HTML?

我的应用程序启动代码如下:

async start() {
    try {
      await this.spectron.start();
      await this.focusOnWindow(0);
      return this._checkWindowReady();
    } catch (err) {
      throw err;
    }
  }

 beforeEach(async function (){
            app = new SpectronApplication();
            common = new CommonActions();

            await app.start();
 })

1 个答案:

答案 0 :(得分:1)

我找到了类似以下代码的解决方案:

首先,我打电话给app.start()

start()函数调用_checkWindowReady()

_checkWindowReady呼叫waitFor()

最后waitFor调用_callClientAPI(),它查找特定的功能和元素。

 async start() {
    try {
      await this.spectron.start();
      await this.focusOnWindow(0);
      return this._checkWindowReady();
    } catch (err) {
      throw err;
    }
  }

 _checkWindowReady() {
    return this.waitFor(this.spectron.client.getHTML, '[id="myApp.main.body"]');
  }

 waitFor(func, args) {
    return this._callClientAPI(func, args);
  }

 _callClientAPI(func, args) {
    let trial = 1;
    return new Promise(async(res, rej) => {
      while (true) {
        if (trial > this._pollTrials) {
          rej(`Could not retrieve the element in ${this._pollTrials * this._pollTimeout} seconds.`);
          break;
        }

        let result;
        try {
          result = await func.call(this.client, args, false);
        } catch (e) { }

        if (result && result !== '') {
          res(result);
          break;
        }

        await this.wait();
        trial++;
      }
    });
  }