You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spectron的Application()中访问驱动选项并固定启动窗口大小

嘿,这两个问题我之前在做Electron自动化测试时也碰到过,给你整理下靠谱的解决方法:

1. 在new Application()中配置WebDriver和ChromeDriver选项

Spectron的Application构造函数接受的配置对象里,其实内置了直接针对WebDriver和ChromeDriver的配置字段,不用绕弯子:

  • WebDriver配置:通过webdriver对象传递,你可以指定ChromeDriver的端口、自定义路径这类参数。比如你的ChromeDriver不在默认路径下,或者需要指定非标准端口时就用这个。
  • ChromeDriver启动参数:用chromeDriverArgs数组传递,这是给ChromeDriver进程本身的命令行参数,比如开启日志、调试模式之类的。
  • Chromium实例参数:还有个chromeArgs数组,这是传给Electron内置的Chromium浏览器的参数,很多和浏览器行为相关的配置都在这里设置(比如窗口大小,这刚好能解决你的第二个问题)。

举个完整的配置例子:

const { Application } = require('spectron');

const app = new Application({
  path: '/path/to/your/electron/app/executable',
  args: ['./src'], // 你的应用入口文件路径(如果是开发模式)
  // WebDriver 配置
  webdriver: {
    port: 9515, // 指定ChromeDriver使用的端口,默认就是9515,可按需修改
    path: './node_modules/chromedriver/lib/chromedriver/chromedriver.exe' // Windows下的自定义路径示例
  },
  // ChromeDriver 启动参数
  chromeDriverArgs: ['--verbose', '--log-path=./tests/chromedriver.log'],
  // Chromium 浏览器参数
  chromeArgs: ['--disable-gpu', '--no-sandbox']
});
2. 启动时固定窗口尺寸(避免启动后调整的问题)

你说的setBounds或者maximise是启动后操作,确实会导致组件提前渲染的问题——正确的做法是在应用启动前就通过Chromium的命令行参数指定窗口大小,也就是上面提到的chromeArgs里加--window-size参数。

这种方式是让Electron从启动那一刻就以指定尺寸打开窗口,组件渲染时直接基于这个尺寸布局,完全不会有滞后问题。如果需要固定窗口位置(避免不同机器上窗口位置随机),还可以加--window-position参数。

给你一个测试套件级别的示例,每个测试套件启动时都用固定尺寸:

const { Application } = require('spectron');
const assert = require('assert');

describe('我的Electron应用测试套件', function() {
  this.timeout(10000); // 给启动留足够时间
  let app;

  beforeEach(async () => {
    app = new Application({
      path: './node_modules/.bin/electron', // 开发模式下的Electron路径
      args: ['.'], // 应用根目录
      // 核心配置:启动时固定窗口大小和位置
      chromeArgs: [
        '--window-size=1280,720', // 宽度1280px,高度720px
        '--window-position=0,0', // 窗口固定在屏幕左上角
        '--disable-window-resizing' // 可选:禁用窗口缩放,防止测试中意外改变尺寸
      ]
    });

    await app.start();
  });

  afterEach(async () => {
    if (app && app.isRunning()) {
      await app.stop();
    }
  });

  it('验证窗口尺寸是否正确', async () => {
    const windowBounds = await app.browserWindow.getBounds();
    assert.strictEqual(windowBounds.width, 1280);
    assert.strictEqual(windowBounds.height, 720);
    // 这里继续写你的组件渲染相关测试
  });
});

注意:如果你的应用代码里有强制重置窗口大小的逻辑(比如启动时最大化),那这个参数会被覆盖,这时候需要先调整应用本身的代码,或者在chromeArgs里加对应参数来覆盖应用的硬编码逻辑。

内容的提问来源于stack exchange,提问作者cham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:52:09