Ошибка несоответствия получателю данных - PullRequest
0 голосов
/ 25 мая 2018

Попробовал ниже код, но получил ошибку несоответствия провайдера данных.Может ли кто-нибудь помочь в этом?

package appModules;

import org.testng.annotations.Test;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.testng.annotations.DataProvider;
import org.testng.annotations.BeforeTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;

public class NewTest {
public WebDriver driver;
public WebDriverWait wait;
String appURL = 
"https://dev.agencyport.rsagroup.ca:8443/agencyportal/ProcessLogoff";

//Locators
private By username = By.id("USERID");
private By password = By.id("PASSWORD");

@BeforeClass
public void testSetup() {
    System.setProperty("webdriver.firefox.marionette", 
"C:\\Automation\\geckodriver.exe");
    driver=new FirefoxDriver();
    driver.manage().window().maximize();
    wait = new WebDriverWait(driver, 5);


}

@Test(dataProvider = "login")
public void Login(String Username, String Password) {

  driver.findElement(username).sendKeys(Username);
  driver.findElement(password).sendKeys(Password);

}

@DataProvider (name="login")
public Object[][] dp() throws Exception{
  Object[][] arrayObject = 
getExcelData("C:\\Automation\\testData.xls","New");
  return arrayObject;

}

public String[][] getExcelData(String fileName, String sheetName) throws 
 Exception {
  String[][] arrayExcelData = null;
  try {
      FileInputStream fs = new FileInputStream(fileName);
      Workbook wb = Workbook.getWorkbook(fs);
      Sheet sh = wb.getSheet(sheetName);

      int totalNoOfCols = sh.getColumns();
      System.out.println(totalNoOfCols);
      int totalNoOfRows = sh.getRows();
      System.out.println(totalNoOfRows);
      arrayExcelData = new String[totalNoOfRows-1][totalNoOfCols];

      for (int i=1 ; i <totalNoOfRows; i++) {

          for (int j=0; j <totalNoOfCols; j++) {
              arrayExcelData[i-1][j] = sh.getCell(j, i).getContents();
              System.out.println(arrayExcelData[i-1][j]);
          }

      }
  } catch (FileNotFoundException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
      e.printStackTrace();
  } catch (BiffException e) {
      e.printStackTrace();
  }
  return arrayExcelData;
}

@Test
public void tearDown() {
  driver.quit();
}
}

Получено ниже ошибка -

org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: Login([Parameter{index=0, type=java.lang.String, 
declaredAnnotations=[]}, Parameter{index=1, type=java.lang.String, 
declaredAnnotations=[]}])
Arguments: [(java.lang.String) agent,(java.lang.String) password,
(java.lang.String) ]
atorg.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:982)
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)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
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)`

1 Ответ

0 голосов
/ 28 мая 2018

Вы передаете возвращаемое значение arrayObject с неверным типом данных. Вам необходимо получить строковое значение из файла Excel в методе поставщика данных, и это значение необходимо передать в Object.

См. Пример ниже, для справки:

    @DataProvider
    public Iterator<Object[]> getTestData()
    {
        ArrayList<Object[]> testdata = new ArrayList<Object[]>();

        try {
            reader = new excelUtility(excelTestDataFile);
        } catch (Exception e) {
            e.printStackTrace();
        }

        sheetName = className;
        for (int rowNumber = 2; rowNumber <= reader.getRowCount(sheetName); rowNumber++) {
            String caseNo = reader.getCellData(sheetName, "Case", rowNumber);
            String emailid = reader.getCellData(sheetName, "Email ID", rowNumber);
            String password = reader.getCellData(sheetName, "Password", rowNumber);
            String message = reader.getCellData(sheetName, "Expected Result", rowNumber);

            Object ob[] =
            { caseNo, emailid, password, message };
            testdata.add(ob);
        }
        return testdata.iterator();
    }

И это @Test Получатель поставщика данных:

    @Test(dataProvider = "getTestData")
    public void calllogin(String caseNO, String emailid, String password, String expectedResult) throws Exception
    {
     ******
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...