通过 Selenium 运行测试用例时出现 java.lang.NullPointerException [英] java.lang.NullPointerException when running testcase via Selenium
问题描述
我遇到了 NullPointerException 问题.我尽可能多地尝试,但我无法解决这个问题.我正在为我的项目实施 POM 模型(Selenium).
I am facing an issue with NullPointerException. I tried as much as possible but I'm unable to resolve this. I am implementing a POM model(Selenium) for my project.
页面:
public class VendorsHomePageApp
{
WebDriver driver;
public VendorsHomePageApp(WebDriver driver)
{
this.driver=driver;
}
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[1]/a")
WebElement dashboardTab;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[2]/a")
WebElement tendersTab;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[3]/a")
WebElement notificationsTab;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[4]/a")
WebElement profileTab;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/a")
WebElement vendorName;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[1]/a")
WebElement vendorHelp;
@FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[3]/a")
WebElement vendorSignOut;
@FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[1]/td[1]/a")
WebElement firstTender;
@FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[2]/td[1]/a")
WebElement secondTender;
@FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[3]/td[1]/a")
WebElement thirdTender;
public void clickOnDashboardTab()
{
dashboardTab.click();
}
public void clickOnTendersTab()
{
tendersTab.click();
}
public void clickOnNotificationsTab()
{
notificationsTab.click();
}
public void clickOnProfileTab()
{
profileTab.click();
}
public void clickOnFirstTender()
{
firstTender.click();
}
}
测试类:
public class VendorsHomePageTest
{
public WebDriver driver;
@Test
public void verifyVendorsHomePageTest() throws Exception
{
LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);
login.verifyLoginVendors();
VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(3000);
vhpapp.clickOnNotificationsTab();
vhpapp.clickOnProfileTab();
vhpapp.clickOnTendersTab();
vhpapp.clickOnDashboardTab();
vhpapp.clickOnFirstTender();
}
}
错误日志:
FAILED: verifyVendorsHomePageTest
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy4.click(Unknown Source)
at com.digitalmqc.automation.vendorspages.VendorsHomePageApp.clickOnNotificationsTab(VendorsHomePageApp.java:60)
at com.digitalmqc.automation.vendorstests.VendorsHomePageTest.verifyVendorsHomePageTest(VendorsHomePageTest.java:28)
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:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
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)
类:
public class LoginIntoVendors
{
@Test
public void verifyLoginVendors() throws Exception
{
WebDriver driver= new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("******");
IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class);
vendorInit.clickOnLoginButton();
VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class);
Loginven.vendorlogin("***","***@gmail.com", "****");
String title = driver.getTitle();
System.out.println("Title is :" + title );
}
}
有什么帮助吗?
推荐答案
您需要先初始化您的 WebDriver
.正如我所看到的,您正在创建 WebDriver
的引用但未初始化,请尝试以下操作:-
You need to initialize your WebDriver
first. As I seeing you are creating the reference of WebDriver
but not initialized, try as below :-
WebDriver driver = new ChromeDriver(); //or other driver which you want
注意 :- 如果您想初始化 ChromeDriver
,您需要下载 chromedriver 并在初始化驱动程序之前设置系统属性:-
Note :- If you want to initialize ChromeDriver
you need to download chromedriver and set system property before initialize driver as :-
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
所以详细回答如下:-
public class VendorsHomePageTest
{
public WebDriver driver;
@Test
public void verifyVendorsHomePageTest() throws Exception
{
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
driver = new ChromeDriver(); //or other driver which you want
LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);
login.verifyLoginVendors();
VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(3000);
vhpapp.clickOnNotificationsTab();
vhpapp.clickOnProfileTab();
vhpapp.clickOnTendersTab();
vhpapp.clickOnDashboardTab();
vhpapp.clickOnFirstTender();
}
}
编辑 :- 您需要创建单独的类,为您提供 WebDriver
实例,如下所示:-
Edited :- You need to create separate class which gives you WebDriver
instance as below :-
public class DriverInit {
public WebDriver driver;
private static DriverInit driverInit = null;
public static DriverInit getInstance() {
if (driverInit == null) {
driverInit = new DriverInit();
}
return driverInit;
}
private DriverInit() {
this.driver = new FirefoxDriver();
this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
this.driver.get("******");
}
public WebDriver getDriver() {
return this.driver;
}
现在您可以将其调用到 LoginIntoVendors
中,如下所示:-
now you can call it into LoginIntoVendors
as below :-
public class LoginIntoVendors
{
@Test
public void verifyLoginVendors() throws Exception
{
WebDriver driver = DriverInit.getInstance().getDriver();
IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class);
vendorInit.clickOnLoginButton();
VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class);
Loginven.vendorlogin("***","***@gmail.com", "****");
String title = driver.getTitle();
System.out.println("Title is :" + title );
}
}
在 VendorsHomePageTest
中如下:-
public class VendorsHomePageTest
{
public WebDriver driver;
@Test
public void verifyVendorsHomePageTest() throws Exception
{
driver = DriverInit.getInstance().getDriver();
LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);
login.verifyLoginVendors();
VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(3000);
vhpapp.clickOnNotificationsTab();
vhpapp.clickOnProfileTab();
vhpapp.clickOnTendersTab();
vhpapp.clickOnDashboardTab();
vhpapp.clickOnFirstTender();
}
}
希望它有帮助..:)
这篇关于通过 Selenium 运行测试用例时出现 java.lang.NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!