如何在Serenity中开启多浏览器实例测试实时聊天功能?
Serenity 2.6.0 多浏览器实例测试实时聊天解决方案
单台机器实现双浏览器实例的方法
Serenity默认采用单会话复用策略,直接调用open()会复用现有WebDriver实例,导致新窗口替换旧实例。要同时打开两个独立浏览器,需手动创建并管理多个WebDriver实例,脱离Serenity默认会话管理:
- 以Java为例的代码实现:
// 初始化第一个浏览器实例(模拟聊天用户A) WebDriver driverA = new ChromeDriver(); driverA.get("你的聊天应用URL"); // 初始化第二个浏览器实例(模拟聊天用户B) WebDriver driverB = new ChromeDriver(); driverB.get("你的聊天应用URL"); // 执行聊天交互逻辑 // 用户A发送消息 driverA.findElement(By.id("msg-input")).sendKeys("测试实时消息"); driverA.findElement(By.id("send-btn")).click(); // 用户B验证接收消息 String receivedMsg = driverB.findElement(By.cssSelector(".msg-list .msg-item")).getText(); Assert.assertTrue(receivedMsg.contains("测试实时消息")); // 手动关闭两个实例 driverA.quit(); driverB.quit(); - 若使用Serenity Page Object,需为每个WebDriver实例单独绑定Page对象,避免复用默认会话的Page实例。
替代方案(当手动管理实例繁琐时)
如果需要更灵活的多实例管理或扩展到多机器测试,可选择:
- Selenium Grid:在本地启动Grid Hub和至少2个Node节点,配置并发会话数,让Serenity通过Grid分发测试任务,实现多浏览器实例并行运行。
- 多线程测试框架:结合JUnit/TestNG的多线程执行功能,在Serenity配置中添加
serenity.reuse.browser=false关闭会话复用,每个测试线程对应一个独立的浏览器实例。
问题原因说明
连续调用open()会替换旧实例,是因为Serenity默认会复用同一个WebDriver会话,所有测试步骤共享当前浏览器实例,新的open()操作只会在现有实例中打开新页面,而非创建新浏览器进程。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

