我们如何使用 Puppeteer 编写/自动化一个 Electron 应用程序?

tru*_*ktr 5 javascript automation e2e-testing electron puppeteer

是否可以?某处有指南吗?基本上,我想对 Electron 应用程序进行 E2E 测试,并将编写用户交互脚本,即创建一个在 Electron 应用程序内部交互的“机器人”或“傀儡”用户。

Md.*_*her 4

编辑:已经过去 6 个多月了,有一些解决方法可以让您在一定程度上使用 puppeteer 控制 BrowserWindow。

\n\n

如果你正在进行 E2E 测试,我仍然推荐 Spectron,因为这是 Electron 网站上列出的。

\n\n

您将需要puppeteer-in-electron并且puppeteer-core

\n\n
const { BrowserWindow, app } = require("electron")\nconst pie = require("puppeteer-in-electron")\nconst puppeteer = require("puppeteer-core");\n\nconst main = async () => {\n  const browser = await pie.connect(app, puppeteer);\n\n  const window = new BrowserWindow();\n  const url = "about:blank";\n  await window.loadURL(url);\n\n  const page = await pie.getPage(browser, window);\n\n  // here is your page to control\n  await page.goto(\'https://example.net\');\n  console.log(await page.title()); // should print Example Domain\n\n  // use the following instead of browser.close or disconnect\n  window.destroy();\n};\n\nmain();\n
Run Code Online (Sandbox Code Playgroud)\n\n

目前还有其他可用的实验性解决方案,但不能保证适用于所有 puppeteer API。

\n\n\n\n
\n\n

下面是之前的回答,

\n\n

与 puppeteer 无关,但 Electron 有 Spectron,它允许您使用 chrome 驱动程序测试电子应用程序,请前往他们的主页。API 文档

\n\n

Spectron 构建于 ChromeDriver 和 WebDriverIO 之上。因此,如果您已经在使用 puppeteer,那么语法和用法会感觉很熟悉。

\n\n

快速启动 Spectron

\n\n

让您快速入门的命令,

\n\n
mkdir electron-test && cd electron-test    \ngit clone https://github.com/electron/electron-quick-start\nyarn init -y\nyarn add -D spectron mocha\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,我们在该文件夹内有spectron、mocha 和快速启动文件。现在让我们在test/spec.js路径上创建一些规范。

\n\n
const Application = require("spectron").Application;\nconst assert = require("assert");\n\ndescribe("Verify a visible window is opened with a title", function() {\n  before(async function() {\n    this.app = new Application({\n      // your app or electron executable path\n      path: "node_modules/electron/dist/electron",\n      // path to main.js file location\n      args: ["electron-quick-start/"]\n    });\n    await this.app.start();\n  });\n  after(async function() {\n    this.app.stop();\n  });\n\n  it("is visible", async function() {\n    const isVisible = await this.app.browserWindow.isVisible();\n    assert.equal(isVisible, true);\n  });\n\n  it("gets the title", async function() {\n    const title = await this.app.client.getTitle();\n    assert.equal(title, "Hello World!");\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

让我们运行一下吧

\n\n
\xe2\x9e\x9c  electron-test ./node_modules/.bin/mocha\n\n\n  Verify a visible window is opened with a title\n    \xe2\x9c\x93 is visible\n    \xe2\x9c\x93 gets the title\n\n\n  2 passing (665ms)\n
Run Code Online (Sandbox Code Playgroud)\n