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

java.lang.NullPointerException when running a testcase via Selenium Android driver

我在执行脚本时收到 'Null pointer error'。但是应用程序在 Geny 动作上正确启动但无法执行进一步的操作,例如单击 'Skip user' 按钮。 下面是我为它编写的代码

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");
  }
}

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

要解决此问题,请在 @BeforeMethod@Test

中使用相同的 AndroidDriver driver

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

所做的那样