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
相关产品推荐
相关产品推荐

