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