【问题标题】:org.testng.TestNGException: Parameter By ITestContext In Data providerorg.testng.TestNGException:数据提供程序中的 ITestContext 参数
【发布时间】:2018-06-04 16:43:33
【问题描述】:

测试

    public class ParameterByITestContextInDataprovider 
    {
    WebDriver driver;

 @BeforeTest(groups={"A","B"})
 public void setup()
  {
    //Create gc driver object
    System.out.println("In  ParameterByMethodInDataprovider....");
    String drivePath="E:\\Software_Testing\\Softwars-Jars\\BrowsersWithDrivers\\Chrome"
            + "\\chromedriver_win32_V2.38_supports_Chrome_65_67.exe";
    String driverComponent="webdriver.chrome.driver"; 
    System.setProperty(driverComponent,drivePath);

    driver = new ChromeDriver();                
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("https://google.com");
}// setup

@Test(dataProvider="SearchProvider",groups="A")
public void testMethodA(String author,String searchKey) throws InterruptedException
{
    {
        //search google textbox
        WebElement searchText = driver.findElement(By.name("q"));
        //search a value on it
        searchText.sendKeys(searchKey);
        System.out.println("Welcome ->"+author+" Your search key is->"+searchKey);
        Thread.sleep(3000);
        String testValue = searchText.getAttribute("value");
        System.out.println(testValue +"::::"+searchKey);
        searchText.clear();
        //verify correct value in searchbox
        Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
    }//tp
}//tc

@Test(dataProvider="SearchProvider",groups="B")
public void testMethodB(String searchKey) throws InterruptedException
{
    {
        //find google search box
        WebElement searchText = driver.findElement(By.name("q"));
        //search a value on it
        searchText.sendKeys(searchKey);
        System.out.println("Welcome ->Unknown user Your search key is->"+searchKey);
        Thread.sleep(3000);
        String testValue = searchText.getAttribute("value");
        System.out.println(testValue +"::::"+searchKey);
        searchText.clear();
        //verify correct value in searchbox
        Assert.assertTrue(testValue.equalsIgnoreCase(searchKey));
    }// time pass
}//tc

/*
 * Here the DAtaProvider will provide Object array on the basis on ITestContext
 * @param c
 * @return
 */

@DataProvider(name="SearchProvider")
public Object[][] getDataFromDataprovider(ITestContext c)
{
    Object[][] groupArray = null;
    for (String group : c.getIncludedGroups()) 
    {
        if(group.equalsIgnoreCase("A"))
        {
            groupArray = new Object[][] 
                    { 
                { "Guru99", "India" }, 
                { "Krishna", "UK" }, 
                { "Bhupesh", "USA" } 
                    };
                    break;  
        }//if if(group.equalsIgnoreCase("A"))

        else if(group.equalsIgnoreCase("B"))
        {
            groupArray = new Object[][] 
                    { 
                {  "Canada" }, 
                {  "Russia" }, 
                {  "Japan" } 
                    };

        }// else if(group.equalsIgnoreCase("B"))
        break;

      }// for (String group : c.getIncludedGroups())

        return groupArray;      
    }//dp

    }//class

错误

[Error] org.testng.TestNGException: 
Data Provider public java.lang.Object[][] DP_ParameterTypes.ParameterByITestContextInDataprovider.getDataFromDataprovider(org.testng.ITestContext) must return either Object[][] or Iterator<Object>[], not class [[Ljava.lang.Object;
    at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:133)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:509)
    at org.testng.internal.Invoker.handleParameters(Invoker.java:1293)
    at org.testng.internal.Invoker.createParameters(Invoker.java:1020)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1110)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:756)
    at org.testng.TestRunner.run(TestRunner.java:610)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
    at org.testng.TestNG.runSuites(TestNG.java:1133)
    at org.testng.TestNG.run(TestNG.java:1104)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

【问题讨论】:

  • 你的问题是什么?
  • Error As org.testng.TestNGException 和 Data Provider public java.lang.Object[][] DP_ParameterTypes.ParameterByITestContextInDataprovider.getDataFromDataprovider(org.testng.ITestContext) 必须返回 Object[][] 或 Iterator&lt ;Object>[],不是类 [[Ljava.lang.Object;

标签: java selenium testng dataprovider


【解决方案1】:

问题的根本原因基本上是因为您的 @DataProvider 注释方法返回的是 null 值,而不是正确的二维对象数组。

该错误具有误导性。这已在较新版本的 TestNG 中得到解决,如果您要转而使用 TestNG 6.14.3(截至今天最新发布的 TestNG 版本),您应该会看到如下所示的错误消息

Data Provider public java.lang.Object[][] DP_ParameterTypes.ParameterByITestContextInDataprovider.getDataFromDataprovider(org.testng.ITestContext) returned a null value

所以请执行以下操作:

  • 升级到TestNG 6.14.3
  • 初始化您的二维数组,即在您的数据提供者方法中,您需要这样做Object[][] groupArray = new Object[0][0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多