2014-11-25 53 views
0

我想創建一個框架來測試跨平臺移動web應用程序(非本地)。這裏是我的代碼是如何設置:我的appium的第二個測試不斷得到一個java零點異常

測試類:

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擴展了基類幷包含了我所有的WebDriver元素函數。

編輯:如果我直接在我的第二個測試中做driver.findelement,我得到一個未找到的元素異常。它看起來像@test結束後正在重置,我不知道是什麼。

+0

你在哪裏編碼了「dbcSelector()」&「SignInMobile()」方法?其中有什麼? – Surya 2014-11-25 06:21:42

+0

手機庫。它基本上是一個返回driver.findelement。如果我在第一個測試中調用它,它會起作用。 – Matt 2014-11-25 11:54:48

回答

0

我發現問題實際上是以@test命令執行的。我沒有意識到,junit不會按順序運行測試,我會考慮測試套件固件。

+0

如果測試依賴於訂單,許多人認爲它是一種代碼味道。相反,他們應該是獨立的。如果您只需要查看1個測試,而不是20,則診斷問題要容易得多。 – Robert 2014-11-25 15:46:23

+0

如果我這樣做,我將不得不登錄到網站,選擇一些內容,等待它加載,更改多個設置,最後做實際測試。這將是複雜和耗時的。該網站的設計方式我不能簡單地做一個URL +文本開始我離開的地方。你認爲還有更好的辦法嗎? – Matt 2014-11-25 16:33:42

+0

你可以在@BeforeClass中登錄到網站,並保持其他測試獨立嗎?或者一個測試是否創建另一個測試使用的狀態(例如,填充數據庫)? – Robert 2014-11-25 20:11:32

相關問題