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

Selenium运行TestNG测试类时报java.lang.StackOverflowError如何解决?

栈溢出错误产生原因

核心是LoginPageCRM类的构造方法中PageFactory.initElements调用参数错误,触发了无限递归:

  • 当你调用new LoginPageCRM()创建实例时,首先执行该类的无参构造方法
  • 构造方法里调用PageFactory.initElements(driver, LoginPageCRM.class),如果第二个参数传的是类对象,Selenium的PageFactory内部会通过反射新建一个该类的实例
  • 新建实例的过程又会触发LoginPageCRM的无参构造,再次调用initElements,循环往复直到栈空间耗尽,抛出StackOverflowError
修复方案

只需要修改LoginPageCRM类的构造方法里的PageFactory.initElements调用,将第二个参数从LoginPageCRM.class替换为this即可:

public LoginPageCRM()
{
    // 用当前已创建的实例初始化PageFactory,无需PageFactory再创建新实例
    PageFactory.initElements(driver, this);
}

可选优化

你在TestBase的initialization方法中,重复设置了pageLoadTimeout,第二行应该是设置隐式等待,建议修正避免等待逻辑异常:

// 原错误写法
// driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS); 
// driver.manage().timeouts().pageLoadTimeout(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS); 

// 修正后
driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS); 
driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS); 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:45:04