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

Appium搭配TestNG运行测试报错:无法向@Test注解方法注入AndroidDriver

报错原因

TestNG默认不会为无参数配置的@Test方法自动注入入参,你的代码存在两处不合理设计:

  • 类中已经声明了全局driver变量,且已在@BeforeClass初始化完成,不需要再给测试方法设置AndroidDriver类型入参
  • 你没有为Test1方法的入参配置@Parameters或@DataProvider注入规则,TestNG无法识别要传入的参数值,直接抛出注入失败错误
修复步骤
  1. 删除Test1方法的AndroidDriver driver入参,方法内部直接调用全局已初始化的driver变量即可
  2. (可选优化)将@After注解替换为@AfterClass,和@BeforeClass对应,避免单类多测试方法时,第一个方法跑完就销毁driver导致后续方法空指针
修复后完整代码
@Listeners(ExtentITestListenerAdapter.class)
public class TestNG {

    public AppiumDriver <AndroidElement>driver;

    @Test
    public void Test1() {
        MobileElement el1 = (MobileElement) driver.findElementById("skip_button");
        el1.click();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        TouchAction touchAction = new TouchAction(driver);
        touchAction.tap(new PointOption().withCoordinates(725, 993)).perform();
        touchAction.tap(new PointOption().withCoordinates(293, 1005)).perform();
        touchAction.tap(new PointOption().withCoordinates(1175, 1531)).perform();
        touchAction.tap(new PointOption().withCoordinates(1166, 2029)).perform();
        touchAction.tap(new PointOption().withCoordinates(763, 2036)).perform();
        MobileElement el2 = (MobileElement) driver.findElementById("continue_button");
        el2.click();
    }

    @BeforeClass
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("deviceName", "Pixel_4_2");
        desiredCapabilities.setCapability("automationName", "UiAutomator2");
        desiredCapabilities.setCapability("udid", "emulator-5554");
        desiredCapabilities.setCapability("app", "C:\\Users\\Diego\\Desktop\\flow-music-develop-dev-debug-v0.11.0-SNAPSHOT-209.apk");
        desiredCapabilities.setCapability("ensureWebviewsHavePages", true);

        URL remoteUrl = new URL("http://localhost:4723/wd/hub");

        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }

}

修改完成后重新运行测试即可解决注入报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:21:01