You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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驱动及浏览器实例运行速度极快

疑问

测试运行缓慢可能由以下哪些原因导致?

  1. 项目中大量使用Spring DI
  2. 使用PageFactory
  3. 使用WebElement监听器
  4. 设置上述Chrome选项

可能的原因分析

  1. WebElement监听器:EventFiringWebDriver会在每个WebElement操作前后触发监听器逻辑,如果ElementListener中包含日志记录、截图、额外校验等耗时操作,会直接拖慢整体执行速度,元素操作越频繁,开销越明显。
  2. PageFactory初始化方式:当前遍历所有Spring Bean来初始化页面对象,若项目Bean数量多,会增加启动耗时;另外纯Web场景下使用AppiumFieldDecorator而非Selenium原生的DefaultFieldDecorator,可能带来不必要的性能损耗。
  3. Chrome选项--disable-quic:QUIC是优化的UDP协议,禁用后浏览器回退到TCP协议,对依赖QUIC优化的站点,可能导致网络请求变慢。
  4. Spring DI的影响:若Spring容器初始化大量复杂Bean(含繁琐依赖注入、初始化逻辑),会增加框架启动时间,但通常不会直接导致页面加载时的API请求变慢。

排查建议

  • 临时移除ElementListener,运行测试验证速度是否恢复,确认监听器是否为瓶颈。
  • 修改PageFactory初始化逻辑,直接指定需初始化的页面对象类,避免遍历所有Bean;替换AppiumFieldDecorator为DefaultFieldDecorator测试纯Web场景性能。
  • 移除--disable-quic选项,观察页面加载速度变化。
  • 检查Spring Bean初始化逻辑,排查是否存在不必要的耗时操作(如预加载非必要资源)。

内容的提问来源于stack exchange,提问作者Abhijeet Vaikar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:02:40