2016-07-27 3 views
1

クラス1:Appium:私は2つのクラス、ClassA&ClassBをhvします。これらの2つのクラスをtestng.xmlファイルを使って実行しています.ClassBのdatを知りたいのですが、@ Beeforeclassを置く必要がありますか?

public class LaunchApp { 

    AndroidDriver<WebElement> driver; 

    @BeforeTest 
    public void Test1() throws MalformedURLException { 

     DesiredCapabilities capability = new DesiredCapabilities(); 

     capability.setCapability("deviceName", "Android"); 
     capability.setCapability("platformName", "Android"); 
     capability.setCapability("platformVersion", "5.1.1"); 
     capability.setCapability("deviceName", "Samsung Galaxy On5"); 
     capability.setCapability("app", 
       "D:\\whatsapp.apk"); 
     capability.setCapability("PackageName", 
       "com.movocado.socialbostonsports"); 
     capability.setCapability("ActivityName", 
       "com.movocado.socialbostonsports.Activity.LogInSceen"); 

     try { 
      driver = new AndroidDriver<WebElement>(new URL(
        "http://127.0.0.1:4723/wd/hub"), capability); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 

     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

    } 

クラス2:

public class DrawerMenuTest { 
    AndroidDriver<WebElement> driver; 

    @Test(priority = 1) 
    public void DrawerMenuIcon() { 

     WebElement drawerMenu = driver.findElement(By 
       .id("com.movocado.socialbostonsports:id/rel_drawer")); 
     try { 
      drawerMenu.click(); 
     } catch (NullPointerException e) { 
      System.out.println(e.getMessage()); 
     } 

    } 

問題: セカンドクラスがNullPointerExceptionを示しています。私に解決策を提案してください。

+0

2番目のクラスで、あなたは 'AndroidDriver'をインスタンス化していませんでした...それは問題です –

答えて

0

あなたはLaunchAppAndroidDriverを初期化されていますが、NullPointerExceptionの原因だnullAndroidDriverの唯一のrefrence変数を作成しているDrawerMenuTestにこのドライバの参照を渡すことはありません。

あなたは一人ひとり以下のようにクラスにAndroidDriverの単一のインスタンスを与える別のsingltonクラスを作成する必要があり、それを克服するために: - :

-

public class DriverInit { 

    private AndroidDriver<WebElement> driver; 

    private static DriverInit driverInit = null; 

    public static DriverInit getInstance() { 
     if (driverInit == null) { 
      driverInit = new DriverInit(); 
     } 
     return driverInit; 
    } 

    private DriverInit() { 
     DesiredCapabilities capability = new DesiredCapabilities(); 

     capability.setCapability("deviceName", "Android"); 
     capability.setCapability("platformName", "Android"); 
     capability.setCapability("platformVersion", "5.1.1"); 
     capability.setCapability("deviceName", "Samsung Galaxy On5"); 
     capability.setCapability("app", "D:\\whatsapp.apk"); 
     capability.setCapability("PackageName", "com.movocado.socialbostonsports"); 
     capability.setCapability("ActivityName", "com.movocado.socialbostonsports.Activity.LogInSceen"); 


     this.driver = new AndroidDriver<WebElement>(new URL(
       "http://127.0.0.1:4723/wd/hub"), capability); 

     this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    } 

    public WebDriver getDriver() { 
     return this.driver; 
    } 
} 

今、あなたは以下のようにLaunchAppクラスにこれを使用することができます

public class LaunchApp { 

     AndroidDriver<WebElement> driver; 

     @BeforeTest 
     public void Test1() throws MalformedURLException { 
      driver = DriverInit.getInstance().getDriver(); 
      //now do your stuff with this driver 
     } 
    } 

そして、以下のようDrawerMenuTestクラスで使用: -

public class DrawerMenuTest { 
    AndroidDriver<WebElement> driver; 

    @Test(priority = 1) 
    public void DrawerMenuIcon() { 
     //get driver instance first 
     driver = DriverInit.getInstance().getDriver(); 

     WebElement drawerMenu = driver.findElement(By 
       .id("com.movocado.socialbostonsports:id/rel_drawer")); 
     try { 
      drawerMenu.click(); 
     } catch (NullPointerException e) { 
      System.out.println(e.getMessage()); 
     } 

    } 
} 

希望します.. :)

+0

ありがとう、今それは働いています –

関連する問題