npm 包 spectron-8.0.0 使用教程

简介

Spectron 是用于编写桌面应用程序的自动化测试库。它基于 Electron 框架,为开发人员提供能够控制应用程序的 API。本文将介绍如何使用 spectron-8.0.0 这个版本进行自动测试。

安装

如果你已经在项目中使用了 Electron,那么可以直接安装 spectron

npm install --save-dev spectron-8.0.0

如果尚未在项目中使用 Electron,请按照文档提示进行安装。

使用

初始化

在你的测试文件中引入 spectron。使用 new BrowserWindow() 初始化一个窗口,传入 electronPathspectronPath,分别指向 electronspectron 的路径。如果需要在测试运行时显示窗口,可以传入参数 show: true,否则使用默认值 show: false

const Application = require('spectron-8.0.0').Application;
const path = require('path');

const app = new Application({
  path: path.join(__dirname, '..', 'node_modules', '.bin', 'electron'),
  args: [path.join(__dirname, '..')],
  requireName: 'electronRequire',
  chromeDriverLogPath: null,
  startTimeout: 5000,
  waitTimeout: 5000,
  quitTimeout: 5000,
  webdriverPort: 9515,
  electronPath: electronBinary,
  spectronPath: this.spectronPath,
  chromeDriverArgs: ['--no-sandbox', '--disable-gpu'],
  env: {
    ELECTRON_ENABLE_LOGGING: true,
    ELECTRON_ENABLE_STACK_DUMPING: true,
    NODE_ENV: 'development',
    DEBUG: true,
  },
});

模拟用户输入

使用 app.client 模拟用户输入和交互。下面的例子模拟了用户向应用程序发送了一个键盘事件和一个点击事件。

const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');

chai.should();
chai.use(chaiAsPromised);

describe('Application launch', function() {
  beforeEach(function() {
    this.app = new Application({
      path: electronBinary,
      requireName: 'electronRequire',
      chromedriverArgs: ['--no-sandbox', '--disable-gpu'],
      chromeDriverLogPath: './chromedriver.log',
      startTimeout: 10000,
      waitTimeout: 10000,
      quitTimeout: 10000,
      env: {
        NODE_ENV: 'test',
      },
    });
    return this.app.start();
  });

  afterEach(function() {
    if (this.app && this.app.isRunning()) {
      return this.app.stop();
    }
  });

  it('shows an initial window', function() {
    return this.app.client.waitUntilWindowLoaded().getWindowCount().should.eventually.equal(1);
  });

  it('should open another window and show the title', async function() {
    await this.app.client.click("#app_shortcut");
    await this.app.client.keys('Enter');
    return this.app.client.waitUntilWindowLoaded().getTitle().should.eventually.equal('新窗口 标题');
  });
});

断言

使用 chai 特性断言结果是否符合预期。通过 should.eventually 对结果进行处理,以等待异步回调。

const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');

chai.should();
chai.use(chaiAsPromised);

describe('Application launch', function() {
  beforeEach(function() {
    this.app = new Application({
      path: electronBinary,
      requireName: 'electronRequire',
      chromedriverArgs: ['--no-sandbox', '--disable-gpu'],
      chromeDriverLogPath: './chromedriver.log',
      startTimeout: 10000,
      waitTimeout: 10000,
      quitTimeout: 10000,
      env: {
        NODE_ENV: 'test',
      },
    });
    return this.app.start();
  });

  afterEach(function() {
    if (this.app && this.app.isRunning()) {
      return this.app.stop();
    }
  });

  it('shows an initial window', function() {
    return this.app.client.waitUntilWindowLoaded().getWindowCount().should.eventually.equal(1);
  });

  it('should open another window and show the title', async function() {
    await this.app.client.click("#app_shortcut");
    await this.app.client.keys('Enter');
    return this.app.client.waitUntilWindowLoaded().getTitle().should.eventually.equal('新窗口 标题');
  });
});

总结

Spectron 是一个很好的自动化测试库,可以为开发人员提供更简易的测试方案,进一步提高测试效率。

示例代码: https://github.com/electron-userland/spectron/blob/master/docs/tutorial.md

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673e2fb81d47349e53d8e


纠错
反馈