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

标签 javascript automation electron puppeteer e2e-testing

这可能吗?某处有向导吗?基本上我想对 Electron 应用程序进行 E2E 测试,并将编写用户交互脚本,即制作一个在 Electron 应用程序内部交互的“机器人”或“puppeteer ”用户。

最佳答案

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

如果做E2E测试,我还是推荐spectron,因为electron网站上就是这么写的。

您将需要 puppeteer-in-electronpuppeteer-core

const { BrowserWindow, app } = require("electron")
const pie = require("puppeteer-in-electron")
const puppeteer = require("puppeteer-core");

const main = async () => {
  const browser = await pie.connect(app, puppeteer);

  const window = new BrowserWindow();
  const url = "about:blank";
  await window.loadURL(url);

  const page = await pie.getPage(browser, window);

  // here is your page to control
  await page.goto('https://example.net');
  console.log(await page.title()); // should print Example Domain

  // use the following instead of browser.close or disconnect
  window.destroy();
};

main();

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


下面是之前的回答,

与 puppeteer 无关,但 Electron 有 spectron,它允许您使用 chrome 驱动程序测试 electron 应用程序,前往他们的 home page.api doc .

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

快速启动 Spectron

让您快速入门的命令,

mkdir electron-test && cd electron-test    
git clone https://github.com/electron/electron-quick-start
yarn init -y
yarn add -D spectron mocha

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

const Application = require("spectron").Application;
const assert = require("assert");

describe("Verify a visible window is opened with a title", function() {
  before(async function() {
    this.app = new Application({
      // your app or electron executable path
      path: "node_modules/electron/dist/electron",
      // path to main.js file location
      args: ["electron-quick-start/"]
    });
    await this.app.start();
  });
  after(async function() {
    this.app.stop();
  });

  it("is visible", async function() {
    const isVisible = await this.app.browserWindow.isVisible();
    assert.equal(isVisible, true);
  });

  it("gets the title", async function() {
    const title = await this.app.client.getTitle();
    assert.equal(title, "Hello World!");
  });
});

让我们运行它,

➜  electron-test ./node_modules/.bin/mocha


  Verify a visible window is opened with a title
    ✓ is visible
    ✓ gets the title


  2 passing (665ms)

关于javascript - 我们如何使用 Puppeteer 编写/自动化 Electron 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896279/

相关文章:

c++ - 如何从存储在其他文件夹中的 C++ 运行 linux 可执行文件

selenium - 如何在 selenium 3 中执行 webdriver 支持的 selenium?

javascript - Electron js右键单击,如果已进行选择,则可以执行 “Copy”和 “Cut”,如果光标位于输入字段中,则可以执行 “Paste”

node.js - 尝试将 Electron 更新程序添加到 Electron 项目时出现错误 TS2305 : Module '"http "' has no exported member ' OutgoingHttpHeaders'.

javascript - 如何测试条件语句提示的输入类型 - Javascript

javascript - 如何使用 Jest 和 Enzyme 测试 getDerivedStateFromProps

JavaScript Cookie 保存表单

java - 在 Cucumber 测试场景中比较整数值的最佳实践

html - Electron >这是一个错误吗?

javascript - ES6 重新导出的值被包装到 Getter 中