通过 Selenium 运行测试用例时出现 java.lang.NullPointerException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38497248/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 20:22:30  来源:igfitidea点击:

java.lang.NullPointerException when running testcase via Selenium

javaseleniumselenium-webdrivernullpointerexceptiontestng

提问by sandeep kumar

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.

我正面临 NullPointerException 的问题。我尽可能多地尝试,但我无法解决这个问题。我正在为我的项目实施 POM 模型(Selenium)。

The page:

这一页:

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

TestClass:

测试类:

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

Error log:

错误日志:

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)

Class:

班级:

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

Any help?

有什么帮助吗?

采纳答案by Saurabh Gaur

You need to initialize your WebDriverfirst. As I seeing you are creating the reference of WebDriverbut not initialized, try as below :-

你需要初始化你的WebDriver第一个。正如我所看到的,您正在创建参考WebDriver但未初始化,请尝试以下操作:-

WebDriver driver = new ChromeDriver(); //or other driver which you want

Note:- If you want to initialize ChromeDriveryou need to download chromedriverand set system property before initialize driver as :-

注意:- 如果要初始化ChromeDriver,则需要在将驱动程序初始化为之前下载chromedriver并设置系统属性:-

System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");

So details answer like as below :-

所以详细回答如下:-

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();

    }

}

Edited:- You need to create separate class which gives you WebDriverinstance as below :-

编辑:-您需要创建单独的类,它为您WebDriver提供如下实例:-

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

now you can call it into LoginIntoVendorsas below :-

现在您可以将其调用LoginIntoVendors如下:-

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


       }
}

and in the VendorsHomePageTestas below :-

而在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();

    }

}

Hope it helps..:)

希望能帮助到你..:)

回答by Paras

Your driver seems to be nullwhat you can do to avoid this situation is to instantiateyour driver reference.

您的驱动程序似乎null可以做些什么来避免这种情况,instantiate请参考您的驱动程序。

In your test class you can instantiate your driver.

在您的测试类中,您可以实例化您的驱动程序。

public class VendorsHomePageTest {
    public WebDriver driver;
    @Test
    public void verifyVendorsHomePageTest() throws Exception {
        driver = new FirefoxDriver(); // or whatever browser you want.
        // Here you can initialise the elements in `PageObject` class.
        VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);
        // Rest of your code
    }
}