加载时如何等待电子 html
How can I wait to electron while loading html
我有一个电子应用程序,它在打开时加载了一个 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();
})
我找到了如下代码的解决方案:
首先当我调用 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++;
}
});
}
我有一个电子应用程序,它在打开时加载了一个 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();
})
我找到了如下代码的解决方案:
首先当我调用 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++;
}
});
}