【问题标题】:Cannot Instantiate class error - Selenium WebDriver无法实例化类错误 - Selenium WebDriver
【发布时间】:2015-09-11 14:24:38
【问题描述】:

在使用 java 在 selenium webdriver 中运行我的一个测试用例时,我遇到了“无法实例化类”错误。

下面是测试的功能类,

package Pages;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

import Lib.lib;

public class KnowledgeBase extends lib{

    By sortBylink = By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/div");
    By featuredOption = By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/ul/li[1]");
    By mostRcnt = By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/ul/li[2]");

    String featOption = driver.findElement(By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/ul/li[1]")).getText();

    String mostRecent = driver.findElement(By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/ul/li[2]")).getText();

    public void initSBy() throws Exception
    {
        driver.findElement(sortBylink).click();
        Thread.sleep(1500);
    }

    public void selectfO() throws Exception
    {
        driver.findElement(featuredOption).click();
        Thread.sleep(5000);
    }

    public void selectMr() throws Exception
    {
        driver.findElement(mostRcnt).click();
        Thread.sleep(5000);
    }

    public void sortBy(String sProp) throws Exception
    {
        this.initSBy();

        if (sProp == featOption) {

            this.selectfO();

        }

        else if (sProp == mostRecent){

            this.selectMr();
        }

        else {

            System.out.println("Incorrect option. Test failed.");
        }
    }


}

下面是我的测试用例类

package TestCases;

import org.testng.annotations.Test;

import Lib.lib;
import Pages.KnowledgeBase;
import Pages.LoginPage;

public class sortingTextKB extends lib {

    LoginPage uLogin = new LoginPage();
    KnowledgeBase sortObj = new KnowledgeBase();

    //Logging In
    @Test (priority = 1)
    public void loggingIn() throws Exception
    {
        uLogin.loginToKB("uzii@test.com", "uziiiii");
    }

    //Sorting
    @Test (priority = 2)
    public void sortIn() throws Exception
    {
        sortObj.sortBy("Most Recent");
    }

}

下面是我的 Lib 类,其中包含 chrome 驱动配置

package Lib;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;

public class lib {

    protected static WebDriver driver = null;

    @BeforeTest
    public void chrome_extension()
    {
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--start-maximized");
        driver = new ChromeDriver(options);
        driver.get("http://www.testsite.com");
    }


    @AfterTest
    public void quit()
    {
        driver.quit();
    }

}

当我运行我的测试用例类时,我收到以下错误,

org.testng.TestNGException: 
Cannot instantiate class TestCases.sortingTextKB
    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$1.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 Pages.KnowledgeBase.<init>(KnowledgeBase.java:22)
    at TestCases.sortingTextKB.<init>(sortingTextKB.java:12)
    ... 26 more

以下是知识库类的第22行,

String featOption = driver.findElement(By.xpath("html/body/div[1]/featured-studies-grid/div[2]/featured-studies-toolbar/div/div[2]/div[2]/div/ul/li[1]")).getText();

请告诉我为什么我会遇到“无法实例化类”错误。谢谢

【问题讨论】:

  • 您知道是哪一行导致了问题...您尝试过什么解决方法?
  • @JeffC 我无法弄清楚为什么这不是实例化类。如果我不使用上面第 22 行,那么它可能会起作用,但我需要获取文本,所以我可以将它与我在运行时给出的文本进行比较。
  • Caused by: java.lang.NullPointerException 你试过用谷歌搜索NullPointerException 是什么吗?然后查看第 22 行并进行一些故障排除。发布您尝试过的代码以及没有用的代码。
  • @JeffC 这里的情况是,在我的 KnowledgeBase 类中的函数 sortBy(String sProp) 中,如果我在“if statements”中为“sProp”提供硬编码值,那么我的情况就可以正常工作,但是如果我使用 driver.find....getText(); 在其中传递字符串声明然后我得到无法实例化类错误。如果我在 if 语句中传递一个字符串变量,我不知道有什么问题。
  • 驱动程序没有被初始化也许你的@BeforeTest public void chrome_extension()没有被执行

标签: java selenium-webdriver testng pageobjects


【解决方案1】:

您可以下载“chromedriver.exe”,然后将其添加到您的项目中。您无需使用此System.setProperty("webdriver.chrome.driver", "chromedriver.exe");。您可以使用ChromeDriver driver = new ChromeDriver(); 如果仍然报错,请提供文件“chromedrive.exe”的权限。

【讨论】:

    【解决方案2】:

    您应该尝试实例化您的对象。这应该会消除出现的错误。

    【讨论】:

      【解决方案3】:

      把代码改成这样,可能行得通。

      @Test (priority = 2)
          public void sortIn() throws Exception
          { `enter code here
              sortObj = new KnowledgeBase();
              sortObj.sortBy("Most Recent");
          }
      

      【讨论】:

        【解决方案4】:

        试试下面的方法。 我在@Test 注解之外创建了WebDriver 对象,并在@Test as 中将其实例化。

        public class TestNGClass
        {
            WebDriver driver;
            public String baseUrl = "http://newtours.demoaut.com/"; 
            @Test
            public void verifyHomepageTitle()
            {
                driver = new ChromeDriver();
                driver.get(baseUrl);
                String expectedTitle = "Welcome: Mercury Tours";
                String actualTitle = driver.getTitle();
                Assert.assertEquals(actualTitle, expectedTitle);
                driver.quit();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          • 2017-07-04
          • 2014-03-16
          • 1970-01-01
          • 1970-01-01
          • 2023-02-10
          相关资源
          最近更新 更多