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

Appium测试遭遇InvalidTestClassError问题求助

解决JUnit + Appium测试中的InvalidTestClassError错误

问题原因

  • 你将JUnit的@Test注解错误标注在了main()方法上。JUnit对测试方法有强制规范:必须是非静态方法、无参数,而main()方法本身是静态且携带String[] args参数的,完全违反了JUnit的校验规则,因此抛出InvalidTestClassError。
  • 之前能正常运行是因为你当时是以Java应用程序的方式直接执行main方法,并未触发JUnit的测试类校验;重启后误选了JUnit测试运行方式,才触发了这个报错。

修正方案

移除main()方法上的@Test注解,将注解移到实际的测试方法testAutoMovil()上,同时调整测试方法为非静态(因为JUnit测试方法不能是静态的)。修正后的完整代码如下:

package com.example;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;

public class TestMovil {

    // @Test注解标注在非静态、无参数的测试方法上
    @Test
    public void testAutoMovil() throws MalformedURLException{
        AndroidDriver<MobileElement> driverAndroid;
        System.out.println("Creación del driver");

        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability("deviceName", "Redmi Note 8 Pro");
        capabilities.setCapability("udid", "heifzt9xypk7jbtc");
        capabilities.setCapability("platformName", "android");
        capabilities.setCapability("platformVersion", "10");
        capabilities.setCapability("appPackage", "com.xxx.xxx");
        capabilities.setCapability("appActivity", "com.xxx.views.activities.contexts.login.LoginActivity");

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

        driverAndroid = new AndroidDriver<MobileElement> (url, capabilities);
        driverAndroid.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        System.out.println("Aplicación comienza");

        MobileElement iniciarSesion = driverAndroid.findElement(By.id("com.xxx.xxx:id/activity_onboarding_sign_in_button"));
        iniciarSesion.click();
        
        // 测试结束后退出driver,避免资源占用
        driverAndroid.quit();
    }
}

额外说明

  • 如果需要保留main()方法用于本地调试,只需去掉它上面的@Test注解即可。此时既可以通过Java应用程序方式运行main方法,也可以通过JUnit运行器执行标注了@Test的测试方法。
  • 运行测试时确保选择JUnit测试运行方式,而非Java应用程序运行方式,这样JUnit才能正确识别并执行测试逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:15:22