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

解决LandingPage中WebDriver空指针异常:代码修改咨询

解决Selenium中LandingPage的NullPointerException问题

报错信息

Cannot invoke "org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)" because "this.driver" is null at pageObject.LandingPage.searchItem

相关代码

LandingPage.java

public class LandingPage {
    public WebDriver driver;
    
    By search=By.xpath("//input[@placeholder='Search for Vegetables and Fruits']");
    
    By ProductName=By.cssSelector("h4.product-name");
    By topDeals=By.xpath("//a[normalize-space()='Top Deals']");
    public  LandingPage(WebDriver driver)
    {
        this.driver=driver;
    }
    
    public void searchItem(String name)
    {
        
        driver.findElement(search).sendKeys(name);
    }
    
    public String getProductName()
    {
        
        return driver.findElement(ProductName).getText();
    }
    public void SelectTopDealsPage()
    {
        
          driver.findElement(topDeals).click();
    }
}

LandingPageStepDefination.java

public class LandingPageStepDefination {
    public WebDriver driver;

    public String landingproductName;
    public String offerpageproductname;
    pageObjectManager pageObjectManager;
    setups setups;

    LandingPage LandingPageLandingPage;
    public LandingPageStepDefination(setups setups) {

        this.setups = setups;
    }

    @Given("user in greencart landing page")
    public void user_in_greencart_landing_page() {

         
    }

    @When("user search with shortname {string} and extrach actual name of product")
    public void user_search_with_shortname_and_extrach_actual_name_of_product(String Shrotname)
            throws InterruptedException {

        LandingPage LandingPage = setups.pageObjectManager.getMeLandingPage();
        LandingPage.searchItem(Shrotname);

         
        Thread.sleep(5000);
        setups.landingproductName = LandingPage.getProductName().split("-")[0].trim();
        System.out.println(landingproductName);

    }
}

修改方案

1. 修复pageObjectManager的LandingPage初始化逻辑

检查pageObjectManager类中的getMeLandingPage方法,必须在创建LandingPage实例时传入已初始化的WebDriver对象,示例实现如下:

public class pageObjectManager {
    private setups setups;

    public pageObjectManager(setups setups) {
        this.setups = setups;
    }

    public LandingPage getMeLandingPage() {
        // 传入setups中已初始化的driver实例
        return new LandingPage(setups.getDriver());
    }
}

2. 完善setups类的WebDriver初始化

确保setups类中完成WebDriver的初始化,并提供获取driver的方法:

public class setups {
    public WebDriver driver;

    @Before // 使用Cucumber前置注解完成初始化
    public void setupDriver() {
        // 初始化ChromeDriver,可根据需求替换为其他浏览器驱动
        driver = new ChromeDriver();
        driver.manage().window().maximize();
    }

    public WebDriver getDriver() {
        return driver;
    }
}

3. 补充@Given步骤的页面加载逻辑

在LandingPageStepDefination的@Given方法中,添加页面打开逻辑,确保driver就绪且目标页面加载完成:

@Given("user in greencart landing page")
public void user_in_greencart_landing_page() {
    driver = setups.getDriver();
    // 替换为实际的GreenCart首页地址
    driver.get("https://rahulshettyacademy.com/seleniumPractise/");
}

问题根源

报错核心是LandingPage类的driver成员变量为null——调用searchItem时,没有有效的WebDriver实例传入LandingPage的构造方法,导致无法执行findElement操作。通过上述修改,确保driver从初始化到传递的链路完整,即可解决NullPointerException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:20:32