我正在开发电子应用程序。主进程将打开第一个渲染器(browserWindow)。当用户单击按钮时,此渲染器将IPC消息发送到主进程。收到此消息后,主进程将打开另一个不同的渲染器。这两个渲染器同时存在。该应用程序运行正常。
然后,使用Spectron测试该应用程序,如何访问两个渲染器?问题是app.rendererProcess
总是返回第一个渲染器。
与app.client
的问题相同,该问题始终包含第一个渲染器的WebdriverIO browser
对象,从不包含第二个渲染器。
是否可以列出测试中Spectron应用程序的所有过程?是否可以访问第二个渲染器的browser
对象?
使用AVA:
test.(async t => {
// the application is open before the test
// at this point, the first renderer is open
// click on the button to open the second renderer
await t.context.app.client.click('#bt_openSecondRenderer');
// wait for the second renderer to open
// error: this element doesn't exist
await t.context.app.client.click('elt_of_the_scnd_renderer');
});
我正在使用AVA,但我不认为这是问题所在。因此,如果有人知道如何与Mocha或其他工具配合使用,那将非常有帮助。
谢谢!
答案 0 :(得分:2)
按照Tim answer给出的原理,我们可以使用WebDriverIO来聚焦所需的窗口,而不是使用BrowserWindow:
test.(async t => {
// here, t.context.app.client handles the first window
await t.context.app.client.windowByIndex(1).then(() => {
// here, t.context.app.client handles the second window
});
});
答案 1 :(得分:1)
像用户一样,Specton只能与聚焦窗口进行交互。 应该可以工作,但我尚未对其进行测试:
// The docs say that app.electron gives you access to all the Electron APIs
// This should get you a list of BrowserWindows
const windows = await t.context.app.electron.BrowserWindow.getAllWindows();
// Focus the window you want to interact with
windows[1].focus();
// Do your clicking
await t.context.app.client.click('elt_of_the_scnd_renderer');
答案 2 :(得分:0)
it('Switch window', async () => {
await app.client.waitUntilWindowLoaded(100000)
.windowByIndex(0);
.windowByIndex(1);
})