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

通过Selenium Android驱动程序运行测试用例时的java.lang.NullPointerException,android,appium,appium-android,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"

我在执行脚本时遇到“空指针错误”。但该应用程序在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");
  }
}
您在代码中使用了两个驱动程序。一个是全局级别的,您已声明为public static,另一个是您在@before方法中使用并初始化的。 因此,由于@before方法中的驱动程序是通过使用AndroidDriver driver=new AndroidDrivernew URL初始化的http://0.0.0.0:4723/wd/hub,帽;它工作正常,正在打开应用程序。但是在那之后,您的代码将进入@Test,您使用的驱动程序是全局驱动程序,并且该驱动程序没有初始化,这就是为什么您会得到NullPointerException

要解决此问题,请在@before方法和@Test中使用相同的AndroidDriver驱动程序


所以,您只需要使用driver=newandroiddrivernewurlhttp://0.0.0.0:4723/wd/hub,帽;这将初始化全局驱动程序,并将在@before方法中的@Test中使用,而不是在那里生成另一个AndroidDriver驱动程序,就像您使用AndroidDriver=new AndroidDrivernew URL所做的那样http://0.0.0.0:4723/wd/hub,帽

在哪一行获取NullPointerException?请显示控制台错误或错误片段**NullPointerException**错误已消失,但新错误org.openqa.selenium.WebDriverException:未定义命令或响应编解码器。无法继续显示…我已在更正后更新代码。你能帮我查一下最新的错误吗?请告诉我应该怎么做?因为我是新手。我已经更新了,但是没有更新working@AressQa只需使用driver=newandroiddrivernewurlhttp://0.0.0.0:4723/wd/hub,帽;在代码行caps.setCapabilityapp之后,app.getAbsolutePath;它会像你的代码中的其他一切一样正常谢谢你的快速回复。错误已消失,但出现了新错误。@AressQa您现在遇到的错误是什么?org.openqa.selenium.WebDriverException:尚未定义命令或响应编解码器。无法继续