如何基于已有Selenium浏览器会话启动Protractor执行?
如何在Protractor中复用已有的Selenium会话
刚好之前折腾过这个需求,Protractor虽然默认每次启动都会新建Selenium会话,但其实可以通过它底层的WebDriverJS API来复用已经存在的活跃会话,不用从头再来。下面把具体的操作步骤和注意事项给你理清楚:
核心原理
Protractor本质是基于WebDriverJS封装的,所以我们可以绕过它默认的会话创建流程,手动连接到一个已经存在的活跃Selenium会话——只需要拿到这个会话的sessionId,以及你的Selenium服务器地址就行。
具体配置步骤
1. 准备必要信息
首先你得确保:
- 有一个活跃的Selenium会话(没被关闭、没超时)
- 已经拿到这个会话的
sessionId(你已经通过环境变量或其他方式导出了这个值) - 知道Selenium服务器的地址(默认一般是
http://localhost:4444/wd/hub,如果是自定义端口或远程服务器要对应修改)
2. 修改Protractor配置文件
打开你的protractor.conf.js,按照下面的示例修改:
const { webdriver } = require('protractor'); exports.config = { // 指定你的Selenium服务器地址 seleniumAddress: 'http://localhost:4444/wd/hub', // 你的测试用例文件路径 specs: ['./test-specs/*.js'], onPrepare: async function() { // 从环境变量或其他存储位置获取已有的session ID const existingSessionId = process.env.EXISTING_SESSION_ID; if (!existingSessionId) { throw new Error('请先确保EXISTING_SESSION_ID环境变量已设置好哦'); } // 手动构建连接到已有会话的WebDriver实例 const commandExecutor = new webdriver.HttpCommandExecutor( `${exports.config.seleniumAddress}/session/${existingSessionId}` ); const session = new webdriver.Session(existingSessionId, { browserName: 'chrome' // 划重点!这里必须和已有会话的浏览器类型完全一致! }); const driver = new webdriver.WebDriver(commandExecutor, session); // 替换Protractor默认的driver,这样后续所有测试都会复用这个会话 browser.driver = driver; // 验证一下会话是否能正常连接 try { await browser.driver.getSession(); console.log(`✅ 成功复用会话:${existingSessionId}`); } catch (err) { throw new Error(`❌ 连接已有会话失败:${err.message}`); } }, onComplete: async function() { // 重要!如果不想让Protractor测试结束后关闭你的原有会话,就把默认的quit逻辑注释掉 // await browser.quit(); console.log('测试结束,原有会话已保留'); } };
3. 运行测试
先把EXISTING_SESSION_ID环境变量设好,然后正常启动Protractor就行:
EXISTING_SESSION_ID=你的会话ID protractor protractor.conf.js
踩过的坑&注意事项
- 别开
directConnect:directConnect是让Protractor直接连浏览器驱动,不走Selenium服务器,这种模式下根本没法复用会话,必须用seleniumAddress - 浏览器类型必须匹配:我之前就因为把
browserName写成了chrome,但原有会话是Firefox,直接连接失败,一定要对应上! - 确保会话是活跃的:如果原有会话已经超时或者被手动关闭了,连接肯定会失败,复用前最好先确认会话状态
- 会话清理要谨慎:如果测试结束后不需要保留原有会话,可以恢复
browser.quit(),但这会直接关闭你之前的会话,操作前想清楚哦
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

