Java PageFactory提供空指针异常
我试图使用POM创建一个测试框架,但每当我使用Java PageFactory提供空指针异常,java,appium,Java,Appium,我试图使用POM创建一个测试框架,但每当我使用PageFactory时,它都会给出一个NullPointerException 我只是试图打开应用程序,检查页面上是否存在给定元素 这是我的驾驶课: public class Driver extends BaseSetup { protected AndroidDriver<MobileElement> driver; public Driver() { this.driver = super.get
PageFactory
时,它都会给出一个NullPointerException
我只是试图打开应用程序,检查页面上是否存在给定元素
这是我的驾驶课:
public class Driver extends BaseSetup
{
protected AndroidDriver<MobileElement> driver;
public Driver() {
this.driver = super.getDriver();
}
}
我得到以下错误:
FAILED: openApplicationValidation
java.lang.NullPointerException
at com.datamato.pages.OpenApplication.validatePageLoaded(OpenApplication.java:34)
at com.datamato.tests.OpenApplicationTest.openApplicationValidation(OpenApplicationTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:822)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1130)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)
我应该怎么做才能更正它?以下是您的程序流程
OpenApplication(AppiumDriver驱动程序){}
super()代码>调用驱动程序类构造函数
public Driver(){this.Driver=super.getDriver();}
super.getDriver()
method调用BaseSetup类getDriver
方法,该方法返回androidDriver
@BeforeClass
注释方法从未被调用,因此androidDriver
没有初始化
// System.out.println("Driver in initdriver is : "+androidDriver); This must have not printed.
这可能不是一个好的解决方案,但您可以在getDriver
中尝试以下方法,如putinitDriver
方法,以便在使用驱动程序之前对其进行初始化
解决方案:
public AndroidDriver<MobileElement> getDriver() {
initDriver();
return androidDriver;
}
公共AndroidDriver getDriver(){
initDriver();
返回驱动程序;
}
@Amit Jain,感谢您的快速响应,因为您提到我的@BeforeClass方法没有调用androidDriver,但它的调用和打印也是语句。请查找以下控制台输出,以供参考
[TestNG] Running:
C:\Users\DL41\AppData\Local\Temp\testng-eclipse--572591171\testng-customsuite.xml
Inside initDriver method
Argument to driver object : http://0.0.0.0:4723/wd/hub
May 23, 2019 10:03:30 AM io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0
INFO: Detected dialect: W3C
Driver in initdriver is : io.appium.java_client.android.AndroidDriver, Capabilities: {appActivity=.MainActivity, appPackage=com.BajajServiceApp.VikramUAT, databaseEnabled=false, desired={platformName=android, appActivity=.MainActivity, appPackage=com.BajajServiceApp.VikramUAT, deviceName=OnePlus6T, noReset=true, udid=d6f08719}, deviceManufacturer=OnePlus, deviceModel=ONEPLUS A6010, deviceName=d6f08719, deviceScreenSize=1080x2340, deviceUDID=d6f08719, javascriptEnabled=true, locationContextEnabled=false, networkConnectionEnabled=true, noReset=true, platform=LINUX, platformName=Android, platformVersion=9, takesScreenshot=true, udid=d6f08719, warnings={}, webStorageEnabled=false}
Starting Method :openApplicationValidation
-----------------------------------------
timer start
timer end
Ending Method :openApplicationValidation
-----------------------------------------
FAILED: openApplicationValidation
java.lang.NullPointerException
at com.datamato.pages.OpenApplication.validatePageLoaded(OpenApplication.java:34)
at com.datamato.tests.OpenApplicationTest.openApplicationValidation(OpenApplicationTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:822)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1130)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)
你能突出显示函数中哪一行正在崩溃吗?不清楚第二行是什么34@ShreyTrivedi感谢您的快速响应,下面一行的函数崩溃了:String str=newUser.getText()@维韦克,我还是不明白哪条线路在崩溃?您能在这里显示吗?@ShreyTrivedi请查看第四行字符串str=newUser.getText()中的类OpenApplication->method validatePageLoaded();好的.“WebElement newUser”应该在哪个阶段初始化?嘿,Amit,谢谢你的快速响应,但是我的@BeforeClass注释方法正在调用androidDriver,请查看下面的控制台输出以供参考。
// System.out.println("Driver in initdriver is : "+androidDriver); This must have not printed.
public AndroidDriver<MobileElement> getDriver() {
initDriver();
return androidDriver;
}
[TestNG] Running:
C:\Users\DL41\AppData\Local\Temp\testng-eclipse--572591171\testng-customsuite.xml
Inside initDriver method
Argument to driver object : http://0.0.0.0:4723/wd/hub
May 23, 2019 10:03:30 AM io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0
INFO: Detected dialect: W3C
Driver in initdriver is : io.appium.java_client.android.AndroidDriver, Capabilities: {appActivity=.MainActivity, appPackage=com.BajajServiceApp.VikramUAT, databaseEnabled=false, desired={platformName=android, appActivity=.MainActivity, appPackage=com.BajajServiceApp.VikramUAT, deviceName=OnePlus6T, noReset=true, udid=d6f08719}, deviceManufacturer=OnePlus, deviceModel=ONEPLUS A6010, deviceName=d6f08719, deviceScreenSize=1080x2340, deviceUDID=d6f08719, javascriptEnabled=true, locationContextEnabled=false, networkConnectionEnabled=true, noReset=true, platform=LINUX, platformName=Android, platformVersion=9, takesScreenshot=true, udid=d6f08719, warnings={}, webStorageEnabled=false}
Starting Method :openApplicationValidation
-----------------------------------------
timer start
timer end
Ending Method :openApplicationValidation
-----------------------------------------
FAILED: openApplicationValidation
java.lang.NullPointerException
at com.datamato.pages.OpenApplication.validatePageLoaded(OpenApplication.java:34)
at com.datamato.tests.OpenApplicationTest.openApplicationValidation(OpenApplicationTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:822)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1130)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)