Как я могу ждать электронов при загрузке HTML - PullRequest
0 голосов
/ 10 октября 2018

У меня есть электронное приложение, которое загружает 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 голосов
/ 11 октября 2018

Я нашел решение, как показано ниже:

Во-первых, когда я звоню 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++;
      }
    });
  }
...