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

使用Maven+Selenium运行TestNG PageFactory时遇依赖注入错误求助

解决TestNG无法给@Test方法注入WebDriver的问题

这个错误的核心原因是TestNG不支持直接在@Test标注的方法中通过参数注入WebDriver,而且你的setup()方法里的WebDriver是局部变量,测试方法根本访问不到它。咱们一步步来修正:

1. 修正TestPage类的WebDriver作用域

把WebDriver改成TestPage类的成员变量,这样setup()初始化后,所有测试方法都能复用这个driver实例:

package TestClass;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import pageObjectFactoryMaven.SelectCoursePage;
import pageObjectFactoryMaven.SignInPage;

public class TestPage {
    // 把WebDriver改为类成员变量,让所有测试方法可访问
    WebDriver driver;

    @BeforeMethod
    public void setup (){
        System.setProperty("webdriver.chrome.driver", "D:/Drivers/chromedriver.exe");
        driver = new ChromeDriver();
        // 注意URL缺少http://前缀,补上才能正常访问
        driver.get("http://wwww.hhg.com");
        driver.manage().window().maximize(); // 可选:最大化窗口方便操作
    }

    @Test
    // 移除WebDriver参数,直接使用类成员变量
    public void SelectCourse () {
        SelectCoursePage POF1 = new SelectCoursePage (driver);
        POF1.studying().click();
        POF1.findacourse().click();
        POF1.entersearchitem().sendKeys("computer science");
    }

    @Test
    // 同样移除WebDriver参数
    public void SignIn () {
        SignInPage POF2 = new SignInPage (driver);
        POF2.enterusername().sendKeys("kff");
        POF2.enterpassword().sendKeys("jdnd");
        POF2.clickLogin().click();
    }

    // 建议添加AfterMethod,每次测试后关闭浏览器,避免资源泄漏
    @AfterMethod
    public void teardown() {
        if(driver != null) {
            driver.quit();
        }
    }
}

2. 修复Page类的定位符问题

你的SelectCoursePage里有个CSS选择器写的是"element",这是明显的占位符,记得替换成实际的元素定位规则,否则运行时会找不到元素:

// 将"element"替换为真实的CSS选择器,比如".find-course-btn"或其他有效定位符
@FindBy (css = "element") 
WebElement findacourse;

3. 为什么之前的写法会报错?

  • TestNG的原生依赖注入仅支持特定类型的参数(如ITestContext、XmlTest等),WebDriver不在支持列表内,因此无法直接给@Test方法传入WebDriver参数。
  • 你之前在setup()中定义的WebDriver driver是局部变量,作用域仅限于setup()方法,测试方法根本无法访问这个变量,自然无法传递。

修改完成后,确认ChromeDriver路径正确、页面元素定位符准确,你的测试就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:23