Selenium自动化测试框架中Chrome浏览器实例运行缓慢求助
基于Selenium WebDriver的Web UI自动化测试框架性能问题排查
项目类型
- 基于Maven构建
- 采用CucumberJVM实现框架结构与关注点分离(Gherkin步骤、业务层、页面对象)
- 使用Spring DI管理工具类及页面对象的生命周期(当它们作为其他类的依赖时)
- 通过PageFactory管理定位器
- 使用元素监听器(基于EventFiringWebDriverFactory)
关键依赖版本
- Selenium Java客户端绑定版本:3.141.59
- Webdriver manager版本:3.6.1
Chrome Driver实例化配置
options.setAcceptInsecureCerts(true); options.addArguments("--disable-quic"); return options;
添加驱动监听器的方式
protected void addDriverListeners() { // Add event listeners List<Listener> listeners = new ArrayList<>(); listeners.add(new ElementListener()); driver = EventFiringWebDriverFactory.getEventFiringWebDriver(driver, listeners); }
PageFactory元素初始化方式
protected void initPageFactoryElements() { String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); for (int i = 0; i < beanDefinitionNames.length; i++) { Object page = applicationContext.getBean(beanDefinitionNames[i]); if (BasePage.class.isAssignableFrom(page.getClass())) { LOG.debug("Initialising PageFactory elements for page: {}", page.getClass()); PageFactory.initElements(new AppiumFieldDecorator(driver), page); } } }
Chrome驱动初始化流程
- 通过WebDriverManager配置驱动
- 设置Chrome选项:接受不安全证书、禁用QUIC协议
- 使用上述选项初始化Chrome驱动
- 打开网站
- 添加元素监听器
- 初始化PageFactory元素
遇到的问题
- 驱动实例化后,Chrome浏览器启动耗时过长
- 调用
driver.navigate().to(configuration.getBaseUrl());提交URL后,网站加载完成耗时极久,API请求及资源加载均变慢
对比情况
在仅包含WebDriver依赖的简单Java Maven项目中运行测试时,Chrome驱动及浏览器实例运行速度极快
疑问
测试运行缓慢可能由以下哪些原因导致?
- 项目中大量使用Spring DI
- 使用PageFactory
- 使用WebElement监听器
- 设置上述Chrome选项
可能的原因分析
- WebElement监听器:EventFiringWebDriver会在每个WebElement操作前后触发监听器逻辑,如果
ElementListener中包含日志记录、截图、额外校验等耗时操作,会直接拖慢整体执行速度,元素操作越频繁,开销越明显。 - PageFactory初始化方式:当前遍历所有Spring Bean来初始化页面对象,若项目Bean数量多,会增加启动耗时;另外纯Web场景下使用
AppiumFieldDecorator而非Selenium原生的DefaultFieldDecorator,可能带来不必要的性能损耗。 - Chrome选项
--disable-quic:QUIC是优化的UDP协议,禁用后浏览器回退到TCP协议,对依赖QUIC优化的站点,可能导致网络请求变慢。 - Spring DI的影响:若Spring容器初始化大量复杂Bean(含繁琐依赖注入、初始化逻辑),会增加框架启动时间,但通常不会直接导致页面加载时的API请求变慢。
排查建议
- 临时移除
ElementListener,运行测试验证速度是否恢复,确认监听器是否为瓶颈。 - 修改PageFactory初始化逻辑,直接指定需初始化的页面对象类,避免遍历所有Bean;替换
AppiumFieldDecorator为DefaultFieldDecorator测试纯Web场景性能。 - 移除
--disable-quic选项,观察页面加载速度变化。 - 检查Spring Bean初始化逻辑,排查是否存在不必要的耗时操作(如预加载非必要资源)。
内容的提问来源于stack exchange,提问作者Abhijeet Vaikar
相关产品推荐
相关产品推荐

