Puppeteer的`waitForFileChooser()`未检测到filechooser启动Electron的API(超时)

b5buobof  于 2023-08-01  发布在  Electron
关注(0)|答案(1)|浏览(238)

我在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

yvfmudvl

yvfmudvl1#

Electron有两个过程:主进程和渲染器进程。
问题是人偶师只能和渲染器进行通信。由于文件对话框是从Electron的API启动的,它来自主进程, puppet 师无法检测或与之交互,因此超时。
您必须从渲染器进程(即使用vanilla html)来检测文件选择器。

相关问题