Java 无法实例化类

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21460412/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 08:49:54  来源:igfitidea点击:

Cannot instantiate class

javaselenium-webdrivertestng

提问by Learner

iam facing a problem i have written a method navback, which i need to use regularily to navigate back. when iam running it is throwing a error.

我面临一个问题,我写了一个方法导航,我需要定期使用它来导航回来。当我运行它时抛出一个错误。

below is the Code.

下面是代码。

    package Examples;

import java.util.concurrent.TimeUnit;

//import org.junit.BeforeClass;
import org.testng.annotations.BeforeClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class Flipkart {
    public static WebDriver driver;
    Actions action = new Actions(driver);
//String ddd;
//    public Example2() {
//       super();
//    }

    @BeforeClass
    public void beforeClass()
    {
    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);


    }

    @Test

    public void mailSend() throws InterruptedException
    {

        driver.get("https://www.flipkart.com/");
        driver.manage().window().maximize();


        navback();
        driver.findElement(By.xpath("/html/body/div/div/div[2]/div/div/ul/li/div/div[2]/div/ul/li[2]/a")).click();
        driver.navigate().back();


        navback();
        driver.findElement(By.xpath("/html/body/div/div/div[2]/div/div/ul/li/div/div[2]/div/ul/li[3]/a")).click();
        driver.navigate().back();

        driver.navigate().refresh();
    }

    public void navback()
    {
          WebElement we = driver.findElement(By.xpath("//html/body/div/div/div[2]/div/div/ul/li/a/span"));
          action.moveToElement(we).build().perform();
    }



    @AfterClass
    public void tear()
    {
       // driver.quit();
   }
}

Below is the Error.

下面是错误。

org.testng.TestNGException: 
Cannot instantiate class Examples.Flipkart
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38)
    at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387)
    at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:110)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:186)
    at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:120)
    at org.testng.TestRunner.initMethods(TestRunner.java:409)
    at org.testng.TestRunner.init(TestRunner.java:235)
    at org.testng.TestRunner.init(TestRunner.java:205)
    at org.testng.TestRunner.<init>(TestRunner.java:160)
    at org.testng.remote.RemoteTestNG.newTestRunner(RemoteTestNG.java:141)
    at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:271)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:561)
    at org.testng.SuiteRunner.init(SuiteRunner.java:157)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:111)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1299)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1286)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
    ... 21 more
Caused by: java.lang.NullPointerException
    at org.openqa.selenium.interactions.Actions.<init>(Actions.java:41)
    at Examples.Flipkart.<init>(Flipkart.java:18)
    ... 26 more

Please some one help me, iam not able to proceed further.

请有人帮助我,我无法进一步进行。

Thanks

谢谢

采纳答案by Sotirios Delimanolis

You don't initialize driver, so it is null, but you pass it to Actions.

您没有初始化driver,所以它是null,但是您将它传递给Actions

public static WebDriver driver;
Actions action = new Actions(driver);

That throws a NullPointerException.

那抛出一个NullPointerException.

Caused by: java.lang.NullPointerException
at org.openqa.selenium.interactions.Actions.<init>(Actions.java:41)

Initialize driver.

初始化driver



Note the lifecycle. Before JUnit runs your @BeforeClassor @Beforemethods, it has to create the Flipkartinstance. The instance field initialization expression runs at that point.

注意生命周期。在 JUnit 运行您的@BeforeClass@Before方法之前,它必须创建Flipkart实例。实例字段初始化表达式在该点运行。

Rethink your design. Initialize actionafter driverhas been initialized.

重新考虑您的设计。初始化actiondriver初始化。