有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    根本原因:

    Caused by: java.lang.NullPointerException
        at testNGbasics.Expediaassignment.<init>(Expediaassignment.java:17)
    

    问题:WebDriver没有初始化,您已经使用了它

     public WebDriver driver;
    
    // Flying From class variables
        public WebElement flyingfrom = driver.findElement(By.xpath("//input[@id='flight-origin-hp-flight']"));
    

    抛出:

    Cannot instantiate class testNGbasics.Expediaassignment
    

    因为:在创建Expediaassignment实例时,此代码将执行,并且由于drivernull它无法创建Expediaassignment实例

    在所有测试执行之前,可以使用@BeforeSuite执行代码。 比如

        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";
    
        @BeforeSuite
        void setBaseURL() {
            System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Java\\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());
    
            flyingfrom = driver.findElement(By.xpath("//input[@id='flight-origin-hp-flight']"));
            FF = flyingfrom.getAttribute("value");
    
            flyingTo = driver.findElement(By.xpath("//input[@id='flight-destination-hp-flight']"));
            DD = flyingTo.getAttribute("value");
        }