【问题标题】:Why I am getting Data provider mismatch error?为什么我收到数据提供者不匹配错误?
【发布时间】:2020-09-20 16:37:24
【问题描述】:

我正在尝试使用 Data Provider Annotation 读取 excel 文件,但我收到了 Data provider mismatch 错误。我的脚本很简单。我在excel中有一列,那就是用户名。我正在尝试从我的 .xlsx 文件的第 0 行第 0 列读取该数据,并将其加载到我的程序中。下面是两个文件及其对应的屏幕截图。文件 1 是我的主程序,文件 2 是我的 ExcelConfig。我还附上了控制台窗口的屏幕截图。如果我通过 excel 文件对用户名进行硬编码时出错,我的代码可以正常工作。

文件 1

package loginAdmin;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class PersonateUser {
    @Test(dataProvider="testdata") 
    public void login(String username)
    {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\abc\\Downloads\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(200, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(200, TimeUnit.SECONDS);
        driver.get("abc.com/Home.aspx");
        driver.findElement(By.id("M_layout_content_PCDZ_MW2NO7V_ctl00_webInputForm_txtLoginName")).sendKeys("admin");   
        driver.findElement(By.id("M_layout_content_PCDZ_MW2NO7V_ctl00_webInputForm_txtPassword")).sendKeys("Password");    
        driver.findElement(By.id("M_layout_content_PCDZ_MW2NO7V_ctl00_webInputForm_cmdContinue")).click();
        driver.findElement(By.id("M_layout_content_PCDZ_M5QH8YG_ctl00_lblUserName")).click();
        driver.findElement(By.id("M_layout_content_PCDZ_M5QH8YG_ctl00_txtUserName")).sendKeys(username);
        driver.findElement(By.id("M_layout_content_PCDZ_M5QH8YG_ctl00_btnSearch")).click();
        driver.findElement(By.id("M_layout_content_PCDZ_M5QH8YG_ctl00_resultsGrid_ctl02_LogIn")).click();           
        System.out.println("User is able to login successfully");
        driver.findElement(By.xpath("/html/body/form/div[3]/div[3]/div[1]/div[1]/div/div[5]/ul/li[6]/a")).click();        
                                                                                           
}
    @DataProvider(name="testdata")
        public Object[][] TestDataFeed()
        {
            ReadExcelFile config = new ReadExcelFile("C:\\Users\\abc\\eclipse-workspace\\Login\\testdata\\username.xlsx");
            int rows = config.getRowCount(0);
            Object[][] credentials = new Object[rows][2];
            for(int i=0;i<rows;i++);
            {
                int i = 0;
                credentials[i][0] = config.getData(0, i, 0);
                
            }
        return credentials;
        }
    }

截图:

文件 2:

package loginAdmin;

import java.io.File;
import java.io.FileInputStream;

import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFile


{
    XSSFWorkbook wb;
    XSSFSheet sheet;
    
    public ReadExcelFile(String excelPath)
    {
        try
        { 
            File src = new File(excelPath);
            FileInputStream fis = new FileInputStream(src);
            wb =new XSSFWorkbook(fis);
        }
    
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            
        }
    }
    
    public String getData(int sheetnumber, int row, int column)
    
    {
        sheet= wb.getSheetAt(sheetnumber);
        String data = sheet.getRow(row).getCell(column).getStringCellValue();
        return data;
    }
    
    public int getRowCount(int sheetIndex)
    {
        int row = wb.getSheetAt(sheetIndex).getLastRowNum();
        row = row + 1;
        return row;
                
    }
    
    }

屏幕截图 2:

截图:

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

    方法TestDataFeed()中有两句不正确。

    for(int i=0;i<rows;i++); // <-- the ; symbol is weird
    {
        int i = 0;           // <-- Duplicate local variable i with the one in for-loop
        credentials[i][0] = config.getData(0, i, 0);
        
    }
    

    改成

    for (int i = 0; i < rows; i++)
    {
        credentials[i][0] = config.getData(0, i, 0);
    }
    

    【讨论】:

    • 您好,谢谢,如果我进行更改,看起来它正在工作,但我现在收到以下错误。你能看看吗?非常感谢。
    • RemoteTestNG] 在 loginAdmin.PersonateUser.TestDataFeed( PersonateUser.java:41)
    • @Happy 从错误日志中,我猜错误NullPointerException 发生在String data = sheet.getRow(row).getCell(column).getStringCellValue();getData() 方法中。我很难给出更详细的答案,因为我无法在同一个环境中调试。我的建议是在ReadExcelFile.java中写一个main()方法,main()的内容和public Object[][] TestDataFeed(){...}的body一致,然后printlnmain()中的一些信息来调试。
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2019-03-18
    • 1970-01-01
    • 2020-06-15
    • 2013-04-22
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多