java - TestNG 与 DataProviders 的参数数量错误

标签 java excel testng

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="tests" configfailurepolicy="continue" thread-count = "10" verbose="1">
<parameter name="dev" value="true"></parameter>
    <test name ="Chrome" parallel="methods">
        <parameter name="myBrowser" value="chrome" /> 
            <classes>
                <class name="package.TestClass"></class>
                </classes>
            </test>

            <test name ="Firefox" parallel="methods">
        <parameter name="myBrowser" value="firefox" /> 
            <classes>
                <class name="package.TestClass"></class>
                </classes>
            </test>
</suite>

在这个 .xml 文件中,我将名为“dev”的参数设置为 true。我正在尝试让我的数据提供者读取此变量,如果为真,则使用不同的 Excel 工作表。

@Parameters("dev")
@DataProvider(parallel = true)
public Object[][] testData(String dev) {
    String path;
    if(dev.equals(true)){
        path =  System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx";
    }
    else{
        path =  System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx";
    }
    ExcelReader reader = new ExcelReader(path);
    Object[][] obj = new Object[reader.getSheetRows("url")][reader.getSheetColumns("url")]; //four test, one argument
    for(int i = 0; i < reader.getSheetRows("url"); i++){
        for(int j = 0; j < reader.getSheetColumns("url"); j++){
            obj[i][j] = reader.getCellData("url", j, i);
        }
    }

    return obj;
}

问题是这些方法说我传递的参数数量不正确

@Test (dataProvider="testData")
public void test1(String url)
{}

java.lang.IllegalArgumentException: 参数数量错误

最佳答案

@DataProvider 注释数据提供者 AFAIK,无法通过 @Parameters 注释读取参数。

您应该按照以下方式进行操作:

@DataProvider(parallel = true)
public Object[][] testData(ITestContext context) {
    //Here We are trying to read the value of
    // <parameter name="dev" value="true"/> 
    //from the suite xml file.
    String dev = context.getCurrentXmlTest().getAllParameters().get("dev");
    String path;
    if (dev.equals("true")) {
        path = System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx";
    } else {
        path = System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx";
    }
    //Rest of the data provider code goes here.
    return new Object[][] {{}};
}

关于java - TestNG 与 DataProviders 的参数数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173058/

相关文章:

java - 如何从 Intellij IDEA 项目(Selenium 和 TestNG)创建 java 批处理文件

Java iterate/foreach 包含 hashmap/map<Int, Int> 的 ArrayList

excel - 如何使用VBA仅格式化单元格中字符串的一部分

excel - 两列的输出差异具有排除标准

java - 使用 Apache POI 将工作簿的日期系统设置为 1904

java - 如何使用TestNG创建多用户测试场景?

java - list.add() 不向 ArrayList 添加数据

java - 为什么Java中没有全局变量?

java - 捕获括号是否会影响单独的负前瞻?

java - Maven、testng、surefire : not running AfterClass