为什么在maven项目中发生浏览器'java.lang.NullPointerException'调用时发生错误,以及如何解决此问题?

问题描述 投票:0回答:1

我正在制作一个Maven项目,在打开chrome浏览器时显示java.lang.NullPointerException例外,我无法找到此处缺少的内容以及为什么浏览器无法打开。

我的基类是这样的


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterMethod;

import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;

import pages.LandingPage;
import pages.LoginPage;
import utils.ExtentReportManager;
import utils.DateUtils;


public class Base {
 public WebDriver driver;
 public Properties prop;
 public ExtentReports report = ExtentReportManager.getReportInstance();
 public ExtentTest logger;

 public void invokeBrowser(String browsername) {
     try {
         if (browsername.equalsIgnoreCase("Chrome")) {
             System.setProperty("webdriver.chrome.driver",
                     System.getProperty("user.dir") + "\\src\\resourc\\driver\\chromedriver.exe");
             driver = new ChromeDriver();//This is line 39 in Base
         } else if (browsername.equalsIgnoreCase("Firefox")) {
             System.setProperty("webdriver.gecko.driver",
                     System.getProperty("user.dir") + "\\src\\resourc\\driver\\geckodriver.exe");
             driver = new FirefoxDriver();
         } else {
             System.setProperty("webdriver.IEDriverServer.driver",
                     System.getProperty("user.dir") + "\\src\\resourc\\driver\\IEDriverServer.exe");
             driver = new InternetExplorerDriver();
         }
     } catch (Exception e) {
           e.printStackTrace();
     }
     driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS);//**This is line 53**
     driver.manage().window().maximize();
     driver.manage().timeouts().pageLoadTimeout(180, TimeUnit.SECONDS);


         prop = new Properties();

         try {
             FileInputStream file = new FileInputStream(
                     System.getProperty("user.dir") + "\\src\\resourc\\ObjectRepository\\projectConfig.properties");
             prop.load(file);
         } catch (Exception e) {
             e.printStackTrace();
         }

     }


 public LandingPage OpenApplication(String websiteURLKey ) {
     driver.get(prop.getProperty(websiteURLKey));
     return PageFactory.initElements(driver, LandingPage.class);
 }



 public void closebrowser() {
     driver.close();
 }

 @AfterMethod
 public void reportFlush() {
     report.flush();
 }


 /****************** Capture Screen Shot ***********************/
 public void takeScreenShotOnFailure() {
     TakesScreenshot takeScreenShot = (TakesScreenshot) driver;
     File sourceFile = takeScreenShot.getScreenshotAs(OutputType.FILE);

     File destFile = new File(System.getProperty("user.dir") + "/ScreenShots/" + DateUtils.getTimeStamp() + ".png");
     try {
         FileUtils.copyFile(sourceFile, destFile);
//          logger.addScreenCaptureFromPath(
//                  System.getProperty("user.dir") + "/ScreenShots/" + DateUtils.getTimeStamp() + ".png");

     } catch (IOException e) {
         e.printStackTrace();
     }

 }

}

我的测试类就是这样,我正在逐个运行项目的所有文件

package test;

import org.apache.http.client.utils.DateUtils;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.Test;

import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;

import base.Base;
import pages.DisplayDetails;
import pages.HomePage;
import pages.LandingPage;
import pages.LoginPage;
import pages.UpcomingBikesPage;
import utils.ExtentReportManager;

public class ProjectTest extends Base{
    LandingPage landingpage;
    LoginPage loginpage;
    HomePage homepage;
    UpcomingBikesPage upcomingbikespage;
    DisplayDetails displaydetails;

    @Test
    public void openBrowser() throws Exception {

        logger = report.createTest("Zigwheels Website Automation");
        Base base = new Base();
        logger.log(Status.INFO, "Initializing the Browser");
        base.invokeBrowser("chrome");//**This is line 32 in test file**
        logger.log(Status.INFO, "Opening the Website");
        landingpage = base.OpenApplication("websiteURL");
        logger.log(Status.INFO, " Login initated Successfully");
        loginpage = landingpage.initiatelogin();
        logger.log(Status.INFO, "Entered Credentials Successfully");

        homepage = loginpage.login();
        logger.log(Status.INFO, "Login Successfull");

        upcomingbikespage = homepage.home();
        logger.log(Status.INFO, "Got Upcoming Honda Bikes Successfully");
        displaydetails=upcomingbikespage.hondamanufacturer();

        displaydetails.finaly();

        //logger.addScreenCaptureFromPath(System.getProperty("user.dir") + "/ScreenShots/" + DateUtils.getTimeStamp() + ".png");


    }

}

并且在控制台中错误如下-

[RemoteTestNG] detected TestNG version 6.14.3
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 36324
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
FAILED: openBrowser
java.lang.NullPointerException
    at base.Base.invokeBrowser(Base.java:53)
    at test.ProjectTest.openBrowser(ProjectTest.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

第53行通过注释显示,它是隐式的等待行测试中的第32行也通过base.invokeBrowser(“ chrome”);注释显示。行。

java maven selenium-webdriver nullpointerexception testng
1个回答
0
投票

我已经建立了您的代码。它工作正常;它通过了那条线。

我使用了自己的chromedriver绝对路径。

可能在您的路径上出现错字。我建议在该chromedriver目录的终端/ powershell中使用pwd

if (browsername.equalsIgnoreCase("Chrome")) {
                System.setProperty("webdriver.chrome.driver",
                        "/Users/user/Documents/qac-cv-management-system/AutomatedTestReact/chromedriver");
                driver = new ChromeDriver();//This is line 39 in 
}
© www.soinside.com 2019 - 2024. All rights reserved.