如何在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
相关产品推荐
相关产品推荐

