我正在制作一个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”);注释显示。行。
我已经建立了您的代码。它工作正常;它通过了那条线。
我使用了自己的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
}