NodeJS+Gauge框架下如何跨文件共享Selenium Driver实例
Gauge+NodeJS+Selenium跨文件共享Driver实例解决方案
核心思路
利用Gauge自带的spec级数据存储管理Driver实例,确保每个spec只初始化一次浏览器,所有步骤文件都能安全访问同一个Driver,彻底解决重复初始化多窗口、变量未定义的问题。
具体实现步骤
1. 编写Driver管理工具类
新建driverManager.js,统一处理Driver的初始化、获取和销毁逻辑:
const { Builder } = require('selenium-webdriver'); const { gauge } = require('@getgauge/gauge'); // 初始化Driver,仅当前spec未初始化时执行 async function initDriver() { const existingDriver = gauge.dataStore.specStore.get('driver'); if (!existingDriver) { const driver = await new Builder().forBrowser('chrome').build(); gauge.dataStore.specStore.put('driver', driver); } } // 获取当前spec的Driver实例 function getDriver() { return gauge.dataStore.specStore.get('driver'); } // 销毁Driver,在spec结束后执行 async function teardownDriver() { const driver = getDriver(); if (driver) { await driver.quit(); gauge.dataStore.specStore.remove('driver'); } } module.exports = { initDriver, getDriver, teardownDriver };
2. 绑定Spec级生命周期钩子
在你的主测试步骤文件(比如test_steps.js)中,添加Gauge的spec前后钩子,确保每个spec只初始化一次Driver:
const { gauge } = require('@getgauge/gauge'); const { initDriver, teardownDriver } = require('./driverManager'); // 每个Spec执行前初始化Driver gauge.specSuite().beforeSpec(async () => { await initDriver(); }); // 每个Spec执行完销毁Driver gauge.specSuite().afterSpec(async () => { await teardownDriver(); });
3. 在公共步骤中使用共享Driver
修改common_steps.js,通过getDriver()获取实例,替换之前直接使用driver的代码:
const { getDriver } = require('./driverManager'); const { By } = require('selenium-webdriver'); step('Visit the application under test.', async () => { const driver = getDriver(); await driver.get('你的应用访问地址'); }); step('Close the popup.', async () => { const driver = getDriver(); const closeBtn = await driver.findElement(By.css('.popup-close-btn')); await closeBtn.click(); });
关键注意事项
- 绝对不要在公共步骤文件里单独初始化Driver,所有初始化逻辑必须通过
driverManager和beforeSpec钩子执行,否则会触发多窗口问题 - 用
specStore而非scenarioStore,确保同一个spec下的所有场景共享同一个Driver实例(如果需要每个场景单独开浏览器,再切换为scenarioStore) - 检查
getDriver()的返回值,避免存错数据到存储中,否则会出现driver.findElement is not a function这类类型错误
内容的提问来源于stack exchange,提问作者Julius
相关产品推荐
相关产品推荐

