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

运行Java+Selenium+Cucumber测试出现OutOfMemoryError错误如何解决

问题根因

你出现OOM的核心原因是PageFactory.initElements调用参数错误引发的无限递归实例化:
当你调用PageFactory.initElements(driver, LandingPage.class)时,PageFactory会自动调用LandingPage的带WebDriver参数的构造方法创建新实例,而你的构造方法里又调用了initElements,这就形成了无限循环,不断创建LandingPage对象,最终堆内存耗尽,调大堆内存无法解决问题,因为递归循环不会终止。

修复方案

把LandingPage构造方法里的initElements调用参数修改即可,推荐使用第一种写法:

  • 写法1:传入当前对象实例this,不需要创建新实例,直接给当前对象的@FindBy注解字段赋值
public class LandingPage {
    
    WebDriver driver;
    
    public LandingPage(WebDriver driver)
    {
        this.driver=driver;
        // 把原来的LandingPage.class改成this
        PageFactory.initElements(driver, this);
    }
    
    @FindBy(xpath="//a[contains(@id,'accountList')]")
    WebElement account_dd;
    
    public void movemousetodropdown() {
        System.out.println("I am trying to move mouse");
        Actions act = new Actions(driver);
        act.moveToElement(account_dd).build().perform();
    }
}
  • 写法2:如果要用类作为参数,就把initElements调用放到构造方法外部,接收返回的实例,不要在构造方法内调用避免递归
// LandingPage构造方法内不调用initElements
public LandingPage(WebDriver driver)
{
    this.driver=driver;
}

// 步骤定义中初始化时直接接收initElements返回的实例
p1 = PageFactory.initElements(driver, LandingPage.class);

修改后运行测试即可解决内存溢出问题,同时@FindBy注解的元素也会正常初始化,鼠标悬浮操作可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:08