java无法在TestNG中启动类,并且无法找到原因
我试图自动搜索expedia网站。如果我在selenium java版本中运行相同的代码,它就可以完美运行。但是在TestNG模式下。我收到了错误信息
package testNGbasics;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.Test;
public class Expediaassignment {
public String baseUrl = "https://www.expedia.com/";
public WebDriver driver;
//Flying From class variables
public WebElement flyingfrom = driver.findElement(By.xpath("//input[@id='flight-origin-hp-flight']"));
public String DepatureFrom = "Mumbai";
public String FF = flyingfrom.getAttribute("value");
//Flying To class variables
public WebElement flyingTo = driver.findElement(By.xpath("//input[@id='flight-destination-hp-flight']"));
public String DD = flyingTo.getAttribute("value");
//Declaring departure and return date
public String departureDate = "22/06/2020";
public String returnDate = "21/08/2020";
@Test
public void setBaseURL()
{
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Java\\chromedriver_win32\\chromedriver.exe");
System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY,"True");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
//Navigating to expedia website
driver.get(baseUrl);
System.out.println(driver.getCurrentUrl());
}
@Test
public void closepopup()
{
driver.findElement(By.xpath("//button[@id='travel-advisory-close-button']//span[1]")).click();
}
@Test
public void FlyingFrom() throws InterruptedException
{
flyingfrom.click();
flyingfrom.sendKeys(DepatureFrom);
Thread.sleep(2000);
flyingfrom.sendKeys(Keys.ARROW_DOWN);
Thread.sleep(2000);
flyingfrom.sendKeys(Keys.ENTER);
System.out.println("Your departure is"+FF);
}
@Test
public void FlyingTo() throws InterruptedException
{
flyingTo.click();
Thread.sleep(2000);
flyingTo.sendKeys("MAA");
Thread.sleep(2000);
flyingTo.sendKeys(Keys.ARROW_DOWN);
Thread.sleep(2000);
flyingTo.sendKeys(Keys.ENTER);
System.out.println("Your destination is"+DD);
}
@Test
public void departureDate() throws InterruptedException
{
WebElement DepartureDate = driver.findElement(By.xpath("//input[@id='flight-departing-hp-flight']"));
DepartureDate.click();
DepartureDate.sendKeys(departureDate);
//Thread.sleep(2000);
//driver.findElement(By.xpath("//*[@id=\"flight-departing-wrapper-hp-flight\"]/div/div/div[2]/table/tbody/tr[3]/td[3]/button")).click();
String DepartDate =DepartureDate.getAttribute("value");
System.out.println("Your depature date is"+DepartDate);
}
@Test
public void returnDate() throws InterruptedException
{
WebElement ReturnDate = driver.findElement(By.xpath("//input[@id='flight-returning-hp-flight']"));
ReturnDate.click();
ReturnDate.sendKeys(returnDate);
//Thread.sleep(2000);
String ReturDate =ReturnDate.getAttribute("value");
System.out.println("Your Return date is"+ReturDate);
}
}
我收到下面的错误消息
[RemoteTestNG] detected TestNG version 7.0.1
org.testng.TestNGException:
Cannot instantiate class testNGbasics.Expediaassignment
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
at org.testng.internal.InstanceCreator.instantiateUsingDefaultConstructor(InstanceCreator.java:193)
at org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:113)
at org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:109)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:167)
at org.testng.TestClass.getInstances(TestClass.java:102)
at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:82)
at org.testng.TestClass.init(TestClass.java:74)
at org.testng.TestClass.<init>(TestClass.java:39)
at org.testng.TestRunner.initMethods(TestRunner.java:459)
at org.testng.TestRunner.init(TestRunner.java:338)
at org.testng.TestRunner.init(TestRunner.java:291)
at org.testng.TestRunner.<init>(TestRunner.java:222)
at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
at org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676)
at org.testng.SuiteRunner.init(SuiteRunner.java:178)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:112)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1275)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1251)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1100)
at org.testng.TestNG.runSuites(TestNG.java:1039)
at org.testng.TestNG.run(TestNG.java:1007)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:23)
... 27 more
Caused by: java.lang.NullPointerException
at testNGbasics.Expediaassignment.<init>(Expediaassignment.java:17)
... 33 more
出了什么问题。还有什么需要改变
# 1 楼答案
根本原因:
问题:WebDriver没有初始化,您已经使用了它
抛出:
因为:在创建Expediaassignment实例时,此代码将执行,并且由于
driver
是null
它无法创建Expediaassignment实例在所有测试执行之前,可以使用
@BeforeSuite
执行代码。 比如