通过Selenium Android驱动程序运行测试用例时发生java.lang.NullPointerException

时间:2019-03-15 09:56:48

标签: android appium appium-android

执行脚本时出现“空指针错误”。但是应用在Geny motion上正常启动,但是无法执行其他操作,例如单击“跳过用户”按钮。 以下是我为此编写的代码

public class mainProgram {
    public static AndroidDriver driver;

  @Test
  public void skipUser() { 
  driver.findElement(By.id("com.hp.pregnancy.lite:id/btn_join_later")).click();
  }

  @BeforeMethod
  public void beforeMethod() {
      try {
            File app = new File("D:\\Automation builds\\Testbuild.apk");   
            DesiredCapabilities caps = new DesiredCapabilities();     
            caps.setCapability("deviceName", "Google Nexus 6P - 7.1.0 - API 25 - 1440x2560");
            caps.setCapability("udid", "192.168.250.101:5555"); //Give Device ID of your mobile phone
            caps.setCapability("platformName", "android");
            caps.setCapability("platformVersion", "7.1.0");
            caps.setCapability("appPackage", "com.hp.pregnancy.lite");
            caps.setCapability("appActivity", "com.hp.pregnancy.lite.onboarding.SplashScreenActivity");
            caps.setCapability("noReset", "true");
            caps.setCapability("autoAcceptAlerts", "true");
            caps.setCapability("autoDismissAlerts", "true");
        //  caps.setCapability("fullReset",false);
            caps.setCapability("app", app.getAbsolutePath()); 

        Androiddriver driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);

            System.out.println("Pregnancy+ application launched successfully on Genymotion");
            Thread.sleep(5000);
            } catch (Exception e) {
                System.out.println("Step failed - Unable to setup with the predefined Capabilities");
            }
  }

  @AfterMethod
  public void afterMethod() {
      System.out.println("afterMethod");
  }
}

1 个答案:

答案 0 :(得分:1)

您在代码中使用了两个drivers。一种是在全局级别上已声明为public static,另一种是在@BeforeMethod中使用并初始化的。
因此,driver中的@BeforeMethod通过使用AndroidDriver driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);进行初始化,可以正常工作并打开应用程序。但是之后,您的代码将转到@Test,您正在使用的驱动程序是全局驱动程序,并且该驱动程序尚未初始化,这就是为什么您获得NullPointerException

的原因

要解决此问题,请在AndroidDriver driver@BeforeMethod中使用相同的@Test

因此,您只需要在driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);中使用@Test(这将初始化全局驱动程序并将在您的@BeforeMethod中使用),而不用创建另一个{{1} },就像您使用AndroidDriver driver