0

EclipseでIUnitを使用してSeleniumWebDriverを使用しています。Excelファイルからデータを読み取るコードがあります。すべての列は配列として表示されます。これはコードです:

class ReadExcel {
ArrayList path_name = new ArrayList();
        ArrayList field_key = new ArrayList();
        ArrayList field_name = new ArrayList();
        ArrayList window_new = new ArrayList();
        ArrayList link = new ArrayList();
        lov_name = new ArrayList();
    public void mai() {
        int i = 0;


        String path_namel = "", field_keyl = "", field_namel = "", window_newl = "", linkl = "", lov_namel = "";
        String filename = "E:/data.xls";
        if (filename != null && !filename.equals("")) {
            FileInputStream fs = new FileInputStream(filename);
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            for (int k = 0; k < wb.getNumberOfSheets(); k++) {
                int j = i + 1;
                HSSFSheet sheet = wb.getSheetAt(k);
                int rows = sheet.getPhysicalNumberOfRows();
                for (int r = 1; r < rows; r++) {
                    HSSFRow row = sheet.getRow(r);
                    int cells = row.getPhysicalNumberOfCells();
                    HSSFCell cell1 = row.getCell(0);
                    path_namel = cell1.getStringCellValue();
                    HSSFCell cell2 = row.getCell(1);
                    field_keyl = cell2.getStringCellValue();
                    HSSFCell cell3 = row.getCell(2);
                    field_namel = cell3.getStringCellValue();
                    HSSFCell cell4 = row.getCell(3);
                    window_newl = cell4.getStringCellValue();
                    HSSFCell cell5 = row.getCell(4);
                    linkl = cell5.getStringCellValue();
                    HSSFCell cell6 = row.getCell(5);
                    lov_namel = cell6.getStringCellValue();

                    path_name.add(path_namel);
                    field_key.add(field_keyl);
                    field_name.add(linkl);
                    window_new.add(window_newl);
                    link.add(linkl);
                    lov_name.add(lov_namel);
                }
                i++;
            }
        }
    }
}

私のセレンテストでは、そのようなサイクルがあります:

for (int i=0; i<path_name.length; i++){
         driver.findElement(By.xpath(path_name[i])).click();
}

ここでは、配列であり、 ReadExcelクラスpath_nameと等しくなければならない変数を使用します。path_name実際、Excelのこの値を配列として使用したいと思います。ReadExcelから変数を呼び出すにはどうすればよいですか?

編集 私はgetterメソッドとsetterメソッドを使用してみます。

int q;
String g;
public String getG() {
    return g;}
public void setG(String g) {
    this.g = g;}
public int getQ() {
    return q;}
public void setQ(int q) {
    this.q = q;}

q=path_name.size();
g=path_name.get(i).toString();

私のテストでは、このように変数を呼び出します

ReadExcel h = new ReadExcel();
String k=   h.getG();
ReadExcel p = new ReadExcel();
int n=  p.getQ();

for (int j=0; j<n; j++){
driver.findElement(By.xpath(k)).click();}

エディタにエラーはありませんが、サイクルは機能しません。リンク(k)をクリックする必要がありますが、効果はありません。また、私はこれを試します(最初の回答で提案されました)

ReadExcel readExcel = new ReadExcel();
    ArrayList<String> path_name = readExcel.getPath_name();

    for(String pathName: path_name){
        driver.findElement(By.xpath(pathName)).click();
    }

同じ効果。リンクをクリックしません

4

2 に答える 2

0

1 つの方法は、アクセスする変数の ReadExcel クラスにsetter()andメソッドを実装することです。getter()そして、それらは明らかにパブリックメソッドになります。

編集:

あなたが更新しようとしたことと私の理解から推測すると、あなたは多くのことを間違っています。別のクラスからコードの最後の部分を呼び出していると仮定すると、実際に行うべきことは次のとおりです。

また、ReadExcelクラスを次のように変更したと仮定しています

public class ReadExcel {

    ArrayList<String> pathName      = new ArrayList<String>();
    ArrayList<String> fieldKey      = new ArrayList<String>();
    ArrayList<String> fieldName     = new ArrayList<String>();
    ArrayList<String> windowNew     = new ArrayList<String>();
    ArrayList<String> link          = new ArrayList<String>();

    public ReadExcel() {
        pathName = new ArrayList<String>();
        fieldKey = new ArrayList<String>();
        fieldName = new ArrayList<String>();
        windowNew = new ArrayList<String>();
        link      = new ArrayList<String>();
    }

    /**
    * Not so sure of this method name. But make sure that this method is called before
    * you try to call getXX() methods
    */
    public void mai() {
        String filename = "E:/data.xls";

        if(fileName == null || "".equals(fileName))
            return;

        HSSFWorkbook workBook = null;
        FileInputStream fileInputStream = null;
        HSSFSheet sheet;
        HSSFRow row;

        int rows;

        try{
            fileInputStream = new FileInputStream(new File(fileName));
            workBook = new HSSFWorkbook(fileInputStream);

            for(int sheetIndex = 0; sheetIndex < workBook.getNumberOfSheets(); sheetIndex++){
                sheet = workBook.getSheetAt(sheetIndex);

                rows = sheet.getPhysicalNumberOfRows();

                for(int rowIndex = 0; rowIndex < rows; rowIndex++){
                    /**
                     * Update with your own logic for retrieval
                     */
                    row = sheet.getRow(rowIndex);
                    if(row.getPhysicalNumberOfCells() < 6)
                        continue;

                    pathName.add(row.getCell(0).getStringCellValue());
                    fieldKey.add(row.getCell(0).getStringCellValue());
                    fieldName.add(row.getCell(0).getStringCellValue());
                    windowNew.add(row.getCell(0).getStringCellValue());
                    link.add(row.getCell(0).getStringCellValue());
                }
            }

        } catch (FileNotFoundException fileNotFoundException) {
            fileNotFoundException.printStackTrace();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }finally{
            if(fileInputStream != null){
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            workBook = null;
        }
        }
    }

    /**
    * The getter/setter methods for the variables
    */
    public ArrayList<String> getPathName() {
        return pathName;
    }

    public void setPathName(ArrayList<String> pathName) {
        this.pathName = pathName;
    }

    public ArrayList<String> getFieldKey() {
        return fieldKey;
    }

    public void setFieldKey(ArrayList<String> fieldKey) {
        this.fieldKey = fieldKey;
    }

    public ArrayList<String> getFieldName() {
        return fieldName;
    }

    public void setFieldName(ArrayList<String> fieldName) {
        this.fieldName = fieldName;
    }

    public ArrayList<String> getWindowNew() {
        return windowNew;
    }

    public void setWindowNew(ArrayList<String> windowNew) {
        this.windowNew = windowNew;
    }

    public ArrayList<String> getLink() {
        return link;
    }

    public void setLink(ArrayList<String> link) {
        this.link = link;
    }
}

そして、次のコードを呼び出す前に、どこかでmai()メソッド (この名前は非常に奇妙に聞こえます) を呼び出して、Excel からデータを取得し、それらを保存することを願っています。ArrayList

ReadExcel readExcel = new ReadExcel();
ArrayList<String> path_name = readExcel.getPath_name();

for(String pathName: path_name){
    driver.findElement(By.xpath(pathName).click();
}

あなたのコードへのいくつかのポインタ:

  • ジェネリックを使用します。ArrayList pathNameList考慮を拒否する代わりに、ArrayList<String> pathNameList

  • コーディング時にJava命名規則を使用すると見栄えがします。そのうちの 1 つは、小文字で始まり、後続の各単語が大文字で始まる、大文字と小文字の混合を使用してメソッド名を作成することです。したがって、 を使用する代わりに、またはgetPath_name()のようなものを使用することを検討してください(ただし、ほとんどの人は最初のものを好むでしょう)。これに役立つリンクを次に示します。getPathName()getPath_Name()

于 2012-07-20T16:15:33.257 に答える
0

変数をそのクラスのフィールドに変換できますか? そして、そこにメソッドを追加して、そのフィールドの値を興味のある人に返します。

于 2012-07-20T16:19:37.407 に答える