【问题标题】:Testng data provider Getting error "Data provider mismatch"Testng 数据提供者出现错误“数据提供者不匹配”
【发布时间】:2021-12-24 01:45:40
【问题描述】:

我在这里分配数据

public static Object[][][] SiteUrlForSignin = {
    {{"https://google.com"},{"username"},{"mypassword"}}
};

这是我的测试课

public class SignInTest{

    @DataProvider(name = "SigninLink")
    public Object[][] getData() {
        Object[][][] data = SiteConfig.SiteUrlForSignin;
        return data;
    }    

    @Test(priority = 1, alwaysRun = true, dataProvider = "SigninLink")
    public void mytest(String url,String username,String password,Method method,ITestContext ctx) throws InterruptedException, IOException {

        System.out.println(url+"-"+username+"-"+password);
    }
}

出现以下错误

未定义参数,但发现使用了数据提供者 (明确指定或从类级别继承 注解)。数据提供者不匹配

我不知道我错过了哪里

【问题讨论】:

    标签: java selenium selenium-webdriver testng testng-dataprovider


    【解决方案1】:

    我能够重现该问题。以下错误...

      Data provider mismatch
      Method: mytest([Parameter{index=0, type=java.lang.String, 
        declaredAnnotations=[]}, Parameter{index=1, type=java.lang.String,   
        declaredAnnotations=[]}, Parameter{index=2, type=java.lang.String, 
        declaredAnnotations=[]}, Parameter{index=3, ype=java.lang.reflect.Method, 
        declaredAnnotations=[]}, Parameter{index=4, type=org.testng.ITestContext, declaredAnnotations=[]}])
        
      Arguments: 
       [([Ljava.lang.Object;) [https://google.com],
       ([Ljava.lang.Object;) [username],
       ([Ljava.lang.Object;) [mypassword]]
            
    

    ...正在说“该方法需要 {String, String, String} 输入,但您正在传递 {Object, Object, Object}

    工作代码

    @Test(priority = 1, alwaysRun = true, dataProvider = "SigninLink")
    public void mytest(Object url, Object username, Object password, Method method, ITestContext ctx)
            throws InterruptedException, IOException {
        System.out.println(Array.get(url, 0) + "-" + Array.get(username, 0) + "-" + Array.get(password, 0));
    }
    

    输出

    https://google.com-username-mypassword
    

    您可以像下面这样简单地传递数据。

    @DataProvider(name = "SigninLink")
        public Object[][] getData() {
            return new Object[][] { { "https://google.com", "username", "mypassword" } };
        }
    
    @Test(priority = 1, alwaysRun = true, dataProvider = "SigninLink")
    public void mytest(String url, String username, String password, Method method, ITestContext ctx)
            throws InterruptedException, IOException {
        System.out.println(url + "-" + username + "-" + password);
    }
    

    【讨论】:

      【解决方案2】:

      代码中的问题很少。

      1. 您的单个​​测试用例需要 url、用户名和密码。所以应该是单个数组{"https://google.com","username","mypassword"}
      2. 数据提供者也需要二维数组,但您的 SiteUrlForSignin 是一个 3 维数组。将其转换为:
      public static Object[][] SiteUrlForSignin = {{"https://google.com","username","mypassword"}};
      

      注意:根据文档,您不能将Method 注入使用@Test 注释的方法中。它仅适用于@BeforeMethod@AfterMethod@DataProvider,但现在可以了:-)

      不确定是错误还是文档未更新。

      【讨论】:

      • @ZakariaShahed 那是个错误。更新
      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多