【问题标题】:Error calling a java class (Selenium WebDriver, TestNG)调用 java 类时出错(Selenium WebDriver、TestNG)
【发布时间】:2013-11-26 21:39:48
【问题描述】:

我正在尝试创建一个用于读取 excel 文件的 java 类。我想在 Selenium WebDriver(使用 Eclipse IDE)中使用它来做测试驱动脚本。

我有一句话难倒我:

//这里出错---->>>>Object[][] retObjArr = data("C:\ExcelFiles\LoginData.xls");

此行正在生成错误“未定义登录类型的方法数据(字符串)” 我对 OOP 还很陌生,但我想我可以像上面那样调用 ExcelRead 类并传入一个 arg 字符串……但显然不是!

我相信你们中的许多人都知道 TestNG DataProviders 注释是如何工作的,这正是我在这里尝试做的。有很多这样的例子,但它们都将 ExcelRead 代码拉入主 TestNG 项目(在本例中为登录)类。我想我会将 excelRead 类设为一个单独的类文件,我可以从我将来创建的任何测试类中调用它。

import org.openqa.selenium.WebElement;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class Login {
    @DataProvider(name = "ExcelInput")
    public Object[][] createData() throws Exception{
        ExcelRead data = new ExcelRead();

//这里出错---->>>>Object[][] retObjArr = data("C:\ExcelFiles\LoginData.xls"); 返回(retObjArr); }

    @Test(dataProvider = "ExcelInput")
    public void LoginTest(String Username, String Password) throws InterruptedException{
    System.out.println("test");
    }
}

// code in its own Class file
import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelRead {
public static Object[][] main( String[] args) throws Exception{
    File excel = new File(args[1]);
    FileInputStream fis = new FileInputStream(excel);
    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet ws = wb.getSheet("Input") ;

        int rowNum = ws.getLastRowNum() + 1 ;
        int colNum = ws.getRow(0).getLastCellNum() ;
    String[][] data = new String[rowNum][colNum] ;

    for  ( int i = 0 ; i < rowNum ; i++) {
        HSSFRow row = ws.getRow(i) ;
            for ( int j = 0 ; j < colNum ; j++) {
                HSSFCell cell = row.getCell(j) ;
                String value = cellToString(cell);
                data[i][j] = value ;
                System.out.println("the value is " + value);
            }
        }
    return data;
}
public static String cellToString(HSSFCell cell) {

            int type ;
            Object result ;
            type = cell.getCellType() ;
            switch (type) {
                case 0 : // numeric value in Excel
                    result = cell.getNumericCellValue() ;
                    break ;
                case 1 : // String Value in Excel 
                    result = cell.getStringCellValue() ;
                    break ;
                default :  
                    throw new RuntimeException("There are no support for this type of cell") ;                      
            }
            return result.toString() ;
        }
}

【问题讨论】:

    标签: java class selenium testng


    【解决方案1】:

    试试这个:

    Object[][] retObjArr = data.fileRead("C:\ExcelFiles\LoginData.xls");
    

    修改main如下: 将 main 更改为 fileRead

    public static Object[][] fileRead( String args) throws Exception{
        File excel = new File(args);
    

    【讨论】:

    • 这给出:方法数据(字符串)未定义类型登录
    • 你是调用data.main()还是data()?
    • 代码 data.main() 错误信息:ExcelRead 类型中的方法 main(String[]) 不适用于参数 (String)
    • 解决方案:Object[][] retObjArr = data.main(new String[] {"C:\\ExcelFiles\\LoginData.xls","LoginData"});
    猜你喜欢
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2015-10-23
    相关资源
    最近更新 更多