如何解决TestNG类的java.lang.NullPointerException
大家好,在TestNG测试以下运行时出现错误。
public class BaseTest {
WebDriver driver;
@BeforeClass
public void LaunchBrowser() throws InterruptedException {
System.setProperty("webdriver.chrome.driver","c://chromedriver.exe");
WebDriver driver = new ChromeDriver();
Thread.sleep(5000);
driver.get("https://stackoverflow.com/questions/26032149/selenium-testng-java-lang-nullpointerexception");
System.out.println("1");
driver.manage().window().maximize();
Thread.sleep(10000);
}
}
public class Homepage extends BaseTest
{
WebDriver driver;
@Test
public void Discover() {
driver.findElement(By.xpath("/html/body/header/div/ol[1]/li/a")).click();
}
}
Error:
1
FAILED: Discover
java.lang.NullPointerException
at pages.Homepage.Discover(Homepage.java:16)
===============================================
Default test
Tests run: 1,Failures: 1,Skips: 0
===============================================
解决方法
Null point exception occurring because of driver instance you are initiating begin differently than later.
Please create and use driver instance as a global variable
static WebDriver driver;
-------------------------------------------------------------------------------------------
OR
Singleton is solution for null point exception in your test automation
Create class and by using method you can use driver instance any where without any issue like null point
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Paths;
public class TestApp {
private WebDriver driver;
private static TestApp myObj;
// public static WebDriver driver;
utils.PropertyFileReader property = new PropertyFileReader();
public static TestApp getInstance() {
if (myObj == null) {
myObj = new TestApp();
return myObj;
} else {
return myObj;
}
}
//get the selenium driver
public WebDriver getDriver()
{
return driver;
}
//when selenium opens the browsers it will automatically set the web driver
private void setDriver(WebDriver driver) {
this.driver = driver;
}
public static void setMyObj(TestApp myObj) {
TestApp.myObj = myObj;
}
public void openBrowser() {
//String chromeDriverPath = property.getProperty("config","chrome.driver.path");
//String chromeDriverPath = property.getProperty("config",getChromeDriverFilePath());
System.setProperty("webdriver.chrome.driver",getChromeDriverFilePath());
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-notifications");
options.addArguments("disable-infobars");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void navigateToURL() {
String url =property.getProperty("config","url");
;
driver.get(url);
}
public void closeBrowser()
{
driver.quit();
}
public WebElement waitForElement(By locator,int timeout)
{
WebElement element = new WebDriverWait(TestApp.getInstance().getDriver(),timeout).until
(ExpectedConditions.presenceOfElementLocated(locator));
return element;
}
private String getChromeDriverFilePath()
{
// checking resources file for chrome driver in side main resources
URL res = getClass().getClassLoader().getResource("chromedriver.exe");
File file = null;
try {
file = Paths.get(res.toURI()).toFile();
} catch (URISyntaxException e) {
e.printStackTrace();
}
return file.getAbsolutePath();
}
}
//If you want call driver instance you can use following line
**TestApp.getInstance().getDriver();**
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。