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);
所做的那样
我在执行脚本时收到 '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);