我在Puppeteer上运行了一个测试,它正在尝试使用Electron将文件上传到我的Web应用程序构建中。
我的堆栈:
- 电子:v22
- Puppeteer :v19
我在main.js
中有以下代码
function handleOpenFile(_, path) {
const { canceled, filePaths } = await dialog.showOpenDialog({ path, properties: ['openFile']
return filePaths[0] // assume user only chooses 1 file for this test
})
}
字符串
在我的preload.js
中,它被公开为一个函数:
const { ipcRenderer } = require('electron')
window.electronAPI = {
openFiles: (defaultPath) => ipcRenderer.invoke('dialog:openFiles', defaultPath),
}
型
然后,我的前端代码在按钮按下处理程序下调用此API。
然而,在我的测试中,即使手动测试证明文件对话框确实弹出,代码片段也会超时。
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.qClick(UPLOAD_BUTTON),
]);
型
我能知道这里出了什么问题吗?
我指的是他们的Github issue
1条答案
按热度按时间yvfmudvl1#
Electron有两个过程:主进程和渲染器进程。
问题是人偶师只能和渲染器进行通信。由于文件对话框是从Electron的API启动的,它来自主进程, puppet 师无法检测或与之交互,因此超时。
您必须从渲染器进程(即使用vanilla html)来检测文件选择器。