tru*_*ktr 5 javascript automation e2e-testing electron puppeteer
是否可以?某处有指南吗?基本上,我想对 Electron 应用程序进行 E2E 测试,并将编写用户交互脚本,即创建一个在 Electron 应用程序内部交互的“机器人”或“傀儡”用户。
编辑:已经过去 6 个多月了,有一些解决方法可以让您在一定程度上使用 puppeteer 控制 BrowserWindow。
\n\n如果你正在进行 E2E 测试,我仍然推荐 Spectron,因为这是 Electron 网站上列出的。
\n\n您将需要puppeteer-in-electron并且puppeteer-core,
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();\nRun Code Online (Sandbox Code Playgroud)\n\n目前还有其他可用的实验性解决方案,但不能保证适用于所有 puppeteer API。
\n\n下面是之前的回答,
\n\n与 puppeteer 无关,但 Electron 有 Spectron,它允许您使用 chrome 驱动程序测试电子应用程序,请前往他们的主页。和API 文档。
\n\nSpectron 构建于 ChromeDriver 和 WebDriverIO 之上。因此,如果您已经在使用 puppeteer,那么语法和用法会感觉很熟悉。
\n\n让您快速入门的命令,
\n\nmkdir electron-test && cd electron-test \ngit clone https://github.com/electron/electron-quick-start\nyarn init -y\nyarn add -D spectron mocha\nRun Code Online (Sandbox Code Playgroud)\n\n因此,我们在该文件夹内有spectron、mocha 和快速启动文件。现在让我们在test/spec.js路径上创建一些规范。
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});\nRun 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)\nRun Code Online (Sandbox Code Playgroud)\n