2016-07-30 3 views
-1

J'ai plusieurs feuilles dans un classeur, il a lu chaque ligne aussi.Comment lire plusieurs feuilles en continu à partir d'un classeur en utilisant java?

Mais chaque fois qu'il commence à lire la feuille de la première rangée et à cause de cela quand il commence à définir/écrire l'état des cas, il recommence à définir le résultat de la première rangée signifie qu'il chevauche le résultat de chaque cas. même rangée.

Aussi, pour la lecture et l'écriture de feuille j'utilise JXL api.

Voici le code pour la logique peut-on s'il vous plaît laissez-moi savoir comment résoudre ce:

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

méthode handleObjects() est appelée deux fois - est-ce intentionnel? En outre, il semble que tout ce que vous faites est de lire les valeurs dans cette partie de votre code, pourriez-vous poster vos méthodes handleObjects() et generateReport()? –

+0

@UlliSchmid J'ai posté les méthodes handleObjects() et generateReport() à la fois s'il vous plaît vérifier. – SelenyanC2

+0

Merci pour cela.Encore une fois - handleObjects (opération, valeur, framWork); est appelé 2 fois - intentionnel? Peut-être essayer de commenter la ligne 16? –

Répondre

0

Vous avez pas mis en œuvre ce que votre commentaire dans generateReport() fait référence à:

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

S'il vous plaît changer pour:

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

Explication:

Je déduit cela de la documentation que vous avez fournie ici:

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

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

accepte un numéro de ligne, comme troisième argument. Dans

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

vous fournissez j, qui est un "ID de ligne". Ce j vient de

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

il commence toujours à 1 pour chaque nouvel appel de handleScenario(), séries précédentes d'écraser. Vous devez savoir combien de lignes sont déjà présentes. A en juger par votre code (il n'y a aucune référence à cette méthode documentée sur Internet), vous pouvez le faire avec un ExcelHandler et .rowCount()

Veuillez considérer le refactoring et le nettoyage de cette base de code entière, c'est un vrai désordre. En utilisant des bibliothèques obsolètes (jxl), des noms de variables et des commentaires étranges vont faire en sorte que tout étranger puisse comprendre ce qui se passe ici.

+0

J'ai déjà utilisé cette ligne ExcelHandler countRowsHandler = new ExcelHandler (TEST_RESULT); countRowsHandler.setSheetName (testSuiteName); countRowsHandler.columnData(); int existingRowCount = countRowsHandler.rowCount(); j = j + existingRowCount dans la méthode handleScenario(). – SelenyanC2

+0

Veuillez suivre mes instructions, elles sont très complètes. –

+0

pouvez-vous s'il vous plaît partager la solution d'intégration de code selon le scénario de code actuel s'il vous plaît? – SelenyanC2

-1

J'ai obtenu la solution en écrivant 3 lignes et au-dessous, ils sont:

  1. Déclare public int rowNumber = 0;
  2. Voir le ci-dessous handleScenario() Méthode:

    vide handleScenario privé (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); 
            boolean bTestCaseStepStatus = handleObjects(operation, value, 
           framWork); 
         generateReport(bTestCaseStepStatus, scenarioName, sno, 
           testCaseDescription, j+rowNumber); 
    
         // Report 
        } 
        rowNumber = rowWorkBook1; 
    } 
    
+1

Ceci est une alternative à ma réponse. Cela ne fonctionnera que pour un maximum de deux "scénarios". En commençant par un troisième scénario, vous recommencerez à écraser vos entrées précédentes. Changez ceci en rowNumber = rowNumber + rowWorkBook1. –

+0

@UlliSchmid Votre solution ne fonctionne pas non plus lorsqu'elle passe à une autre feuille (dans le même classeur) elle règle correctement le résultat. Mais dans le classeur de résultat de test, il s'échappe d'une rangée entre deux feuilles différentes. – SelenyanC2