Please help me to resolve this issue. I am trying to extract data from Json using data provider for one of my test case. I have done the below code.
This below method is in base class :
public List<HashMap<String, String>> getJsonDataToMap(String filePath) throws IOException {
String jsonContent = FileUtils.readFileToString(new File(filePath), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
List<HashMap<String, String>> data = mapper.readValue(jsonContent, new TypeReference<List<HashMap<String, String>>>() {
});
return data;
}
Now Login.Test class is extending Base class and i have created these methods to extract the data from json and use in in test case :
public class LoginTest extends BaseClass {
public static String dataPath="src/test/java/com/automationqa/testData/LoginData.json";
@DataProvider(name = "testdatalogin")
public Object[][] getData() throws IOException {
List<HashMap<String, String>> data = getJsonDataToMap(dataPath);
return new Object[][] {{data.get(0), data.get(1)}};
}
@Test(dataProvider = "testdatalogin")
public void loginTest(HashMap<String, String> input) {
loginPage.enterUserName(input.get("userid"));
loginPage.enterPassword(input.get("password"));
loginPage.clickOnLogin();
String pageTitle = driver.getTitle();
Assertions.assertThat(pageTitle).isEqualTo("Guru99 Bank Manager HomePage");
}
JSon file :
[
{
"userid": "mngr452488",
"password": "davysav"
},
{
"userid": "mgr45248xyz",
"password": "heavyset"
}
]
but getting below error:
org.testng.internal.reflect.MethodMatcherException:
Data provider mismatch
Method: loginTest([Parameter{index=0, type=java.util.HashMap, declaredAnnotations=[]}])
Arguments: [(java.util.HashMap) {password=davysav, userid=mngr452488},(java.util.HashMap) {password=heavyset, userid=mgr45248xyz}]
at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:45)
at org.testng.internal.Parameters.injectParameters(Parameters.java:796)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:983)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
JSon file :
[
{
"userid": "mngr452488",
"password": "davysav"
},
{
"userid": "mgr45248xyz",
"password": "heavyset"
}
]
but getting below error:
org.testng.internal.reflect.MethodMatcherException:
Data provider mismatch
Method: loginTest([Parameter{index=0, type=java.util.HashMap, declaredAnnotations=[]}])
Arguments: [(java.util.HashMap) {password=davysav, userid=mngr452488},(java.util.HashMap) {password=heavyset, userid=mgr45248xyz}]
at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:45)
at org.testng.internal.Parameters.injectParameters(Parameters.java:796)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:983)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
Your provider provides two arguments for each iteration but test method takes only one.
I think you want to do something like