我的appium的第二个测试不断得到一个java空点异常

我的appium的第二个测试不断得到一个java空点异常,java,junit,selenium-webdriver,appium,Java,Junit,Selenium Webdriver,Appium,我正在尝试创建一个框架来测试非本地的跨平台移动web应用程序。下面是如何设置我的代码: 测试等级: public class TestSuite extends MobileLibrary{ @BeforeClass public static void setUpTests() throws Exception { setUp(); } @AfterClass public static void cleanUpTests()

我正在尝试创建一个框架来测试非本地的跨平台移动web应用程序。下面是如何设置我的代码:

测试等级:

 public class TestSuite extends MobileLibrary{

    @BeforeClass
    public static void setUpTests() throws Exception {
        setUp();

    }  

    @AfterClass
    public static void cleanUpTests() throws Exception {
        driver.quit();
    }



    @Test
    public void validateSignIn() throws Exception
    {

        String username = "testtest";
        String password = "testtest";
        SignInMobile(driver,username,password);
        assertTrue(true);

    }
    @Test
    public void randomTests() throws Exception

        dbcSelector(driver,"test");
        assertTrue(true);
    }


}
基类

public class SetupBase 
{

    protected static AppiumDriver driver;
    protected static AppiumPlatform appiumPlatform;
    protected static DeviceSize deviceSize;
    protected static DeviceName deviceName;
    protected static String deviceID;
    protected static DesiredCapabilities capabilities;
    protected static enum AppiumPlatform{
        DESKTOP,IOS,ANDROID
    }
    protected static enum DeviceSize{
        SMALL,MEDIUM,LARGE
    }
    protected static enum DeviceName{
        NEXUS7,S5,IPHONE5S
    }
    public static void setUp() throws MalformedURLException /*throws Exception*/ {



    String deviceNameEnv = System.getenv("DEVICENAME");
    switch(deviceNameEnv){
        //sets devicename here
    }
    //sets platform here
    if(deviceName==DeviceName.NEXUS7 || deviceName==DeviceName.S5)
        appiumPlatform = AppiumPlatform.ANDROID;
    else if(deviceName==DeviceName.IPHONE5S)
        appiumPlatform = AppiumPlatform.IOS;
    else
        appiumPlatform = AppiumPlatform.DESKTOP;

    switch(deviceName){     
        //sets size here
    }

    capabilities = new DesiredCapabilities();
    capabilities.setCapability("deviceName",deviceID);

    if(appiumPlatform==AppiumPlatform.ANDROID){
        capabilities.setCapability("platformName","Android");
        capabilities.setCapability("browserName","Chrome");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }
    else if(appiumPlatform==AppiumPlatform.IOS){
        capabilities.setCapability("platformName","iOS");
        capabilities.setCapability("browserName","Safari");
        driver  = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }


    }
}
无论我做什么,每当我在第二次测试中尝试使用驱动程序时,我都会得到一个java空指针异常。MobileLibrary扩展了基类并包含所有my WebDriver元素函数。
编辑:如果我在第二次测试中直接执行driver.findelement,我会得到一个元素未找到异常。在@test结束后,似乎有什么东西被重置了,我不知道是什么。

我发现问题实际上是@test命令的执行。我没有意识到junit没有按顺序运行测试,我将查看测试套件装置。

您在哪里编写了dbcSelector和SignInMobile方法?里面有什么?移动图书馆。它基本上是一个返回驱动程序。如果我在第一次测试中调用它,它会起作用。很多人认为如果测试取决于顺序,它就是代码气味。相反,它们应该是独立的。如果你只需要看一个测试,而不是20个,那么诊断问题就容易多了。如果我这样做,我将不得不登录到网站,选择一些东西,等待它加载,更改一些设置,然后最后进行实际测试。这将是复杂和耗时的。网站的设计方式,我不能简单地做一个url+文本开始我离开的地方。你认为还有更好的方法吗?你能用@BeforeClass登录网站,并保持其他测试的独立性吗?或者一个测试是否创建了另一个测试使用的状态,例如,填充数据库?