在同一会话中最有效地实现重复浏览器自动化

时间:2015-09-12 16:54:59

标签: java selenium-webdriver junit apache-poi

由于缺乏技术知识,我开始使用Java中的Selenium Webdriver实现浏览器自动化。我也在使用Apache POI从excel文件中读取数据。我已经能够实现我想要的但是有一个问题。我打算做的是有一个带有一列的excel表,并且' n'行数,这些单元格中的每一个都是10位数字。使用selenium Webdriver我能够登录到一个网站,从Excel中一次一个单元格中取出每个数字,填写网站中的表格并生成所需的输出。我的问题是当我选择第二个号码而不是回到主页并重新输入号码并重复任务时,会打开一个新的浏览器,然后登录等等。我用谷歌搜索找到了解决这个问题的方法,并且很多时候提到了JUnit。我想知道的是,JUnit是唯一的解决方案吗?由于我对Java的了解相当有限,Java中的实用程序是否可以帮助我实现这个或任何其他我可能不知道的更好的解决方案?

谢谢你,很抱歉这篇长篇文章。

public class test {
public static void main(String[] args) throws Exception {

    int[][] data;
    data = excelRead();
    for (int i = 0; i < data.length; i++) {

        formfill(data[i][0]);

    }
public static void formfill(int number) throws Exception {

    WebDriver wd = new FirefoxDriver();
    wd.get("URL");
    // wd.get("Login Page")).click();
    wd.findElement(By.xpath(xpath)).sendKeys("username");
    wd.findElement(By.xpath(xpath)).sendKeys("password");
    wd.findElement(By.xpath(xpath)).click();

    wd.findElement(By.xpath(xpath)).sendKeys(String.valueOf(number));

            Set<String> windowId = wd.getWindowHandles();
    Iterator<String> itererator = windowId.iterator();
    String mainWinID = itererator.next();
    String newAdwinID = itererator.next();
    wd.switchTo().window(newAdwinID);
    wd.switchTo().window(mainWinID);
    wd.findElement(By.xpath(xpath to go back to homepage again to enter the next number)).click();
}
public static int[][] excelRead() throws Exception {
    File excel = new File("C:\\testing.xls");
    FileInputStream fis = new FileInputStream(excel);
    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet ws = wb.getSheet("Sheet1");
    int rowNum = ws.getLastRowNum()+1;
    int colNum = ws.getRow(0).getLastCellNum();
    int[][] data = new int[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);
            int value = cellToString(cell);
            data[i][j] = value;
        }
    }
    return data;
}
public static int 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");
    }
    double z = (double) result;
    int y = (int) z;
    return y;
}

}

1 个答案:

答案 0 :(得分:1)

每次调用formfill(...)方法时都会创建一个新的FireFox浏览器实例,这是因为这一行:

 WebDriver wd = new FirefoxDriver();

要重用相同的浏览器实例,您只能创建一个FirefoxDriver实例,例如:

public class test {
    WebDriver wd = new FirefoxDriver();
    ......
    public static void formfill(int number) throws Exception {
         wd.get(...);
    }
}