无法在TestNG中启动类,找不到原因。

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

我试图自动搜索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

哪些地方出了问题,哪些地方需要修改?

java selenium-webdriver selenium-chromedriver testng testng-eclipse
1个回答
2
投票

根本原因:问题:WebDriver没有初始化。

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");
    }
© www.soinside.com 2019 - 2024. All rights reserved.