我的appium的第二个测试不断得到一个java空点异常
我正在尝试创建一个框架来测试非本地的跨平台移动web应用程序。下面是如何设置我的代码: 测试等级:我的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()
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登录网站,并保持其他测试的独立性吗?或者一个测试是否创建了另一个测试使用的状态,例如,填充数据库?