0

我有一个电子应用程序,它在打开时加载一个 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();
 })
4

1 回答 1

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++;
      }
    });
  }
于 2018-10-11T11:17:46.157 回答