Groovy 保存浏览器会话到Excel后无法转回WebDriver实例问题求助
核心问题说明
WebDriver是JVM运行时的内存对象,仅在当前测试套件的进程生命周期内有效,你存入Excel的字符串只是ChromeDriver实例调用toString()的文本输出,并非序列化的对象数据,既不可能通过更换存储介质直接存储实例,也不可能从这串文本还原出可用的WebDriver对象,原有两个思路均不可行。
可行解决方案
方案1:同一次测试执行内跨套件复用(最简方案)
如果你的多个测试套件是放在同一个**测试集(Test Suite Collection)**中顺序执行的,可以直接使用测试集级别的全局变量存储WebDriver实例,不会在单个测试套件运行结束后被清除:
- 打开Katalon的「Profiles」设置,新建变量时选择「Execution」级别(而非默认的Test Suite级别)
- 首次创建WebDriver后直接赋值给该全局变量,后续套件直接调用该变量传入
DriverFactory.changeWebDriver()即可
方案2:跨执行进程复用会话(适合多次执行场景)
利用Chrome的远程调试能力,仅存储必要的会话信息,不需要存完整的WebDriver实例,操作步骤如下:
- 首次启动Chrome配置
自定义Chrome启动参数,开启远程调试端口,示例代码:import org.openqa.selenium.chrome.ChromeOptions import com.kms.katalon.core.webui.driver.DriverFactory ChromeOptions options = new ChromeOptions() // 自定义未占用的端口,比如9222 options.addArguments("--remote-debugging-port=9222") WebDriver initialDriver = new ChromeDriver(options) // 存储两个信息到Excel:调试端口9222、会话ID String savedSessionId = initialDriver.getSessionId().toString() DriverFactory.changeWebDriver(initialDriver) - 后续测试套件恢复会话
连接已打开的Chrome进程,挂载原有会话:import org.openqa.selenium.chrome.ChromeOptions import com.kms.katalon.core.webui.driver.DriverFactory ChromeOptions recoverOpts = new ChromeOptions() // 连接到之前开启调试端口的Chrome进程 recoverOpts.setExperimentalOption("debuggerAddress", "localhost:9222") WebDriver recoverDriver = new ChromeDriver(recoverOpts) // 直接传入恢复的driver实例即可操作原有浏览器会话 DriverFactory.changeWebDriver(recoverDriver)
内容的提问来源于stack exchange,提问作者Josh Young
相关产品推荐
相关产品推荐

