Electron E2E 与剧作家 - 如何获取文件保护程序窗口。无法使用 playwright 检测保存/打开对话框

问题描述 投票:0回答:2

我正在尝试与剧作家一起自动化电子应用程序,并在我需要保存或打开文件的时候遇到了困难。在触发保存或打开文件菜单项后,我无法获取正在打开的对话框。

我尝试使用以下两个事件,但它们似乎都不起作用。

ElectronApp.waitForEvent('窗口')

window.waitForEvent('文件选择器')

有什么方法可以获取打开的保存对话框,以便我可以访问保存按钮并通过 e2e 脚本完成保存功能。

electron playwright savefiledialog
2个回答
1
投票

你不能。作为解决方法,您可以模拟文件保护程序窗口。

示例:

const svgPath = path.join(__dirname, 'resources', 'generated.svg');
await app.evaluate(async ({ dialog }, svgPath) => {
    dialog.showSaveDialog = () => Promise.resolve({ filePath: svgPath, canceled: false });
}, svgPath);
await page.click('text=Export SVG');

上面我模拟了

dialog.showSaveDialog
来保存 SVG 文件。

  • app
    来自
    await _electron.launch(...)
    ,
  • page
    来自
    await app.firstWindow();

不会弹出文件保护程序窗口。但你的应用程序可以直接通过模拟获取

filePath


0
投票

看起来这是一个bug

除了模拟之外,您还可以将输入移至客户端。如果你有类似的东西

<input data-testid="my-input" type="file" multiple onchange=""/>

您可以使用 Playwright 输入文件,如下所示。

const window = await electronApp.firstWindow();

const myInput = window.getByTestId('my-input');
expect(myInput).not.toBe(undefined);
myInput.click();

await new Promise<void>(resolve => {
    window.on('filechooser', async (fileChooser) => {
        await fileChooser.setFiles(path.join(__dirname, "file.txt"));
        resolve();
    });
})
© www.soinside.com 2019 - 2024. All rights reserved.