2016-02-29 93 views
0

我正在學習appium並試圖從一個類調用一個對象到另一個類並面臨空指針異常。 下面是我的代碼:在appium中面臨「空指針異常」

public class TestCommons { 

    public AndroidDriver driver; 

    public void setUp() { 

     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setCapability("deviceName", "MotoE"); 
     File file = new File("D:/APK1/com.vector.guru99.apk"); 
     capabilities.setCapability("app", file); 

     try { 
      driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void tearDown() { 

     driver.closeApp(); 
    } 
} 

我想在其他類中使用上面的類即「TestCommons」。我想使用驅動程序對象。

二等低於:

public class Day03 extends TestCommons { 

    TestCommons commons = new TestCommons(); 

    @BeforeClass 
    public void beforeClass() { 
     commons.setUp(); 

    } 

    @Test(enabled = true) 
    public void f() { 

     if (driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed()) { 
      System.out.println("Quiz is displayed"); 
      driver.findElement(By.id("com.vector.guru99:id/action_quiz")).click(); 
      System.out.println("quiz is click"); 

     } 
    } 

    @AfterClass(enabled = true) 
    public void afterClass() { 
     commons.tearDown(); 
    } 

} 

獲得空指針在第二個方案@:

if(driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed(); 

任何人都可以澄清我請。

+0

你在哪裏申報驅動程序? –

+0

在「TestComons」類中聲明。問題中的第一個類 – naazneen3264

+1

在調用isDisplayed()之前檢查driver.findElement的結果。我想你會發現你的空問題。 – Udo

回答

0

你有兩個問題之一。

1)在setUp()中未正確設置驅動程序。如果是這種情況,您可能會遇到異常情況。檢查你的日誌,以確保沒有異常。 2)driver.findElement(By.id(「com.vector.guru99:id/action_quiz」))返回null。您可以通過設置調試點並在該調用上運行評估表達式來檢查此問題。

0

試試這個方法:

public class TestCommons { 

    public static AndroidDriver driver; 
    @BeforeClass 
    public void setUp() { 

     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setCapability("deviceName", "MotoE"); 
     File file = new File("D:/APK1/com.vector.guru99.apk"); 
     capabilities.setCapability("app", file); 

     try { 
      driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 
    @AfterClass 
    public void tearDown() { 

     driver.closeApp(); 
    } 
} 

public class Day03 extends TestCommons { 

     @Test(enabled = true) 
    public void f() { 

     if (driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed()) { 
      System.out.println("Quiz is displayed"); 
      driver.findElement(By.id("com.vector.guru99:id/action_quiz")).click(); 
      System.out.println("quiz is click"); 

     } 
    } 



} 
+0

謝謝!它的工作完美。您能否向我解釋以下幾點:1.我們將「驅動程序」聲明爲靜態,所以不需要實例化。我理解了這個概念2.我們將void setUp()初始化爲「new = ....」。我們是否凌駕了司機? – naazneen3264