2016-07-30 40 views
-1

我在一个工作簿中有多个工作表,它也读取每一行。如何使用java从一个工作簿中读取多个工作表中的工作表?

但是,每次它开始读取第一行的表格,并因为它开始设置/写入案例的状态时,它再次开始设置结果从第一行意味着它重叠每个案件的结果同一排。

另外,对于阅读和书写工作表,我使用Jxl api。

下面是逻辑的代码任何人都可以请让我知道如何解决它:

private void handleScenario(String scenarioName) throws Exception { 
     ExcelHandler testScenarios = new ExcelHandler(TEST_SUITE_PATH); 
     testScenarios.setSheetName(scenarioName); 
     testScenarios.columnData();  

     int rowWorkBook1 = testScenarios.rowCount(); 
     System.out.println("Total Rows1: "+ rowWorkBook1); 

     for (int j = 1; j < rowWorkBook1; j++) { 
      String sno = testScenarios.readCell(testScenarios.getCell("Sno"), j); // SendKey 
      String testCaseDescription = testScenarios.readCell(testScenarios.getCell("TestCaseDescription"), j); 
      String framWork = testScenarios.readCell(testScenarios.getCell("FrameworkName"), j); 
      String operation = testScenarios.readCell(testScenarios.getCell("Operation"), j); // SendKey 
      String value = testScenarios.readCell(testScenarios.getCell("Value"), j); 

      handleObjects(operation, value, framWork); 
      boolean bTestCaseStepStatus = handleObjects(operation,value, framWork); 

      generateReport(bTestCaseStepStatus, scenarioName, sno,testCaseDescription, j); 
     } 
    } 

private boolean generateReport(boolean bTestCaseStepStatus, 
      String testSuiteName, String SNO, String testCaseDescription, int j) 
      throws RowsExceededException, WriteException, IOException { 

     WritableData writableData = new WritableData(TEST_RESULT, testSuiteName, j, 2); 

     // If sheet name is already exist then .... write data at row = row +1 
     // else write directly .. means row = 1 

     if (bTestCaseStepStatus) { 
      //System.out.println("--------------"+bTestCaseStepStatus+"------------"); 
      System.out.println("SNo=" +SNO+ ",Test description=" + testCaseDescription + "Row ID: " + j); 

      writableData.shSheet("Result", 2, j, "Pass"); 
      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
     } else { 
     // System.out.println("--------------"+bTestCaseStepStatus+"------------");  
      System.out.println("SNo=" +SNO+ ",Test description=" + testCaseDescription + "Row ID: "+ j);    

      writableData.shSheet("Result", 2, j, "Fail"); 
      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
     } 

     return bTestCaseStepStatus; 

     // Finally .... close Report file ... 
    } 

    private boolean handleObjects(String operation, String value, 
      String framWork) throws Exception { 
     // Return true/False 
     ExcelHandler objectRepository = new ExcelHandler(OBJECT_REPOSITORY_PATH, "OR"); 
     objectRepository.columnData(); 
     int rowCount = objectRepository.rowCount(); 
     //System.out.println("Total Rows in hadleObject=" + rowCount); 
     boolean testStepStatus = false; 

     for (int k = 1; k < rowCount; k++) { 
      String frameWorkName = objectRepository.readCell(
        objectRepository.getCell("FrameworkName"), k); 
      String ObjectName = objectRepository.readCell(
        objectRepository.getCell("ObjectName"), k); 
      String Locator = objectRepository.readCell(
        objectRepository.getCell("Locator"), k); // SendKey 

      //System.out.println("FrameWorkNameV=" + frameWorkName 
      //  + ",ObjectName=" + ObjectName + ",Locator=" + Locator); 

      if (framWork.equalsIgnoreCase(frameWorkName)) { 
       testStepStatus = operateWebDriver(operation, Locator, value, 
         ObjectName); 

      } 
     } 

     return testStepStatus; 
    } 
+0

你的方法handleObjects()被调用两次 - 是故意的吗? 另外,它看起来像你所做的只是读取这部分代码中的值,你可以发布你的handleObjects()和generateReport()方法吗? –

+0

@UlliSchmid我已经发布了handleObjects()和generateReport()方法,请检查。 – SelenyanC2

+0

谢谢你。再次 - handleObjects(操作,值,framWork);被称为2次 - 故意?也许尝试评论第16行? –

回答

0

您还没有实现什么generateReport()您的评论是指:

// If sheet name is already exist then .... write data at row = row +1 
// else write directly .. means row = 1 

请更改为:

ExcelHandler countRowsHandler = new ExcelHandler(TEST_RESULT); 
countRowsHandler.setSheetName(testSuiteName); 
countRowsHandler.columnData(); 
int existingRowCount= countRowsHandler.rowCount(); 
j = j + existingRowCount 

说明:

我推断这从您在此处提供的文档:

How to check in workbook sheet exist or not using JXL in selenium webdriver?

WritableData.shSheet(String strSheetName, int iColumnNumber, int iRowNumber, String strData) 

接受一个行号,作为第三个参数。在

writableData.shSheet("Result", 2, j, "Pass"); 
writableData.shSheet("Result", 2, j, "Fail"); 

你提供j,这是一个“行ID”。这j来自

for (int j = 1; j < rowWorkBook1; j++) { 

所以它将始终从handleScenario()的每个新的调用开始1,覆盖以前的运行。你需要找出已经有多少行。从你的代码判断(这里没有提到Internet上记录的这种方法),你可以用ExcelHandler和.rowCount()来做到这一点。请考虑重构和清理整个代码库,这是相当混乱的。使用过时的库(jxl),奇怪的变量命名和注释会让任何局外人理解这里发生的事情。

+0

我已经使用这一行 ExcelHandler countRowsHandler = new ExcelHandler(TEST_RESULT); countRowsHandler.setSheetName(testSuiteName); countRowsHandler.columnData(); int existingRowCount = countRowsHandler.rowCount(); j = j + existingRowCount handleScenario()方法。 – SelenyanC2

+0

请按照我的指示,它们非常广泛。 –

+0

请问您可以根据当前的代码情况分享代码集成的解决方案吗? – SelenyanC2

-1

我通过写3行得到了溶液和下面,他们是:

  1. 声明公众诠释ROWNUMBER = 0;
  2. 见下handleScenario()方法:

    私人无效handleScenario(字符串scenarioName)抛出异常{

    ExcelHandler testScenarios = new ExcelHandler(TEST_SUITE_PATH); 
        testScenarios.setSheetName(scenarioName); 
        testScenarios.columnData(); 
        int rowWorkBook1 = testScenarios.rowCount(); 
        System.out.println("Total Rows1: "+ rowWorkBook1); 
    
        for (int j = 1; j < rowWorkBook1; j++) { 
         String sno = testScenarios 
           .readCell(testScenarios.getCell("Sno"), j); // SendKey 
         String testCaseDescription = testScenarios.readCell(
           testScenarios.getCell("TestCaseDescription"), j); 
    
         String framWork = testScenarios.readCell(
           testScenarios.getCell("FrameworkName"), j); 
         String operation = testScenarios.readCell(
           testScenarios.getCell("Operation"), j); // SendKey 
         String value = testScenarios.readCell(
           testScenarios.getCell("Value"), j); 
            boolean bTestCaseStepStatus = handleObjects(operation, value, 
           framWork); 
         generateReport(bTestCaseStepStatus, scenarioName, sno, 
           testCaseDescription, j+rowNumber); 
    
         // Report 
        } 
        rowNumber = rowWorkBook1; 
    } 
    
+1

这是我的答案的替代方案。它最多只能用于两种“情景”。从第三个场景开始,您将重新覆盖之前的条目。将其更改为rowNumber = rowNumber + rowWorkBook1。 –

+0

@UlliSchmid无论何时切换到另一个工作表(在同一工作簿中),此解决方案也无法正常工作,因此它会正确设置结果。 但是在测试结果工作簿中,它在两个不同的工作表案件之间转义了一行。 – SelenyanC2

相关问题