Comment lire/écrire des données Excel dans Selenium Utilisation d'Apache POI

⚡ Résumé intelligent

Lecteur de fichiers Excel Selenium tests basés sur les données, et Apache POI est le Java Bibliothèque permettant de lire et d'écrire ces fichiers. Les sections suivantes abordent les dépendances, les classes principales, des exemples de lecture et d'écriture, ainsi que JXL.

  • (I.e. Deux formats : Les classes HSSF gèrent les fichiers .xls, les classes XSSF gèrent les fichiers .xlsx.
  • Interfaces principales : Les éléments classeur, feuille, ligne et cellule sont l'équivalent d'une feuille de calcul.
  • 🧪 En train de lire: FileInputStream plus getLastRowNum parcourt chaque ligne et chaque cellule.
  • L'écriture: Les fonctions createRow et setCellValue ajoutent des données, FileOutputStream les enregistre.
  • (I.e. Héritage: JXL lit les anciens cahiers d'exercices, mais pas les XLSX.

Lecture et écriture de données Excel dans Selenium avec Apache POI

Les E/S de fichiers sont un élément essentiel de tout processus logiciel. Nous créons fréquemment un fichier, l'ouvrons et mettons à jour quelque chose ou le supprimons sur nos ordinateurs. Il en est de même avec Selenium Automatisation. Nous avons besoin d'un processus pour manipuler les fichiers avec Selenium.

Java nous fournit différentes classes pour la manipulation de fichiers avec Selenium. Dans ce tutoriel, nous allons apprendre comment lire et écrire sur Excel fichier à l'aide de Java Paquet IO et Apache Bibliothèque de POI.

POI Apache dans Selenium

Le POI Apache dans Selenium est une API largement utilisée pour Selenium test basé sur les donnéesIl s'agit d'une bibliothèque de points d'intérêt écrite en Java qui donne aux utilisateurs une API pour manipuler Microsoft Les documents tels que les fichiers .xls et .xlsx sont facilement accessibles. Les utilisateurs peuvent les créer, les modifier et les lire/écrire dans des fichiers Excel. POI signifie « Meilleure implémentation d'obfuscation ».

Comment gérer un fichier Excel à l'aide de POI (dépendance Maven POM)

POI relie un Selenium testez le classeur ci-dessous.

Apache POI faisant office de pont entre un Selenium test et un classeur Excel

Pour lire et écrire un fichier Excel dans JavaApache propose la bibliothèque POI, très réputée. Cette bibliothèque permet de lire et d'écrire des fichiers Excel aux formats XLS et XLSX.

Pour lire les fichiers XLS, une implémentation HSSF est fournie par la bibliothèque POI.

Pour lire les fichiers XLSX, l'implémentation XSSF de la bibliothèque POI sera privilégiée. Examinons ces implémentations en détail.

Si vous utilisez Maven dans votre projet, la dépendance Maven sera ajoutée au fichier pom.xml comme indiqué ci-dessous.

Une entrée de dépendance POI a été ajoutée au fichier pom.xml d'un projet Maven.

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>

Note de version : 4.1.1 est l'exemple original ; les projets actuels déclarent poi-ooxml 5.5.1, qui est requis pour XLSX.

Ou vous pouvez simplement télécharger la dernière version des pots POI à partir de http://poi.apache.org/download.html & téléchargez le dernier fichier zip

Page de téléchargement d'Apache POI répertoriant les archives de distribution binaire et source

Lorsque vous téléchargez le fichier zip de ce fichier jar, vous devez le décompresser et ajouter tous ces fichiers jar au chemin de classe de votre projet.

Fichiers jar POI décompressés ajoutés au Java chemin de construction du projet

Classes et interfaces dans POI

Voici une liste de différents Java Interfaces et classes du POI pour la lecture des fichiers XLS et XLSX, présentées ci-dessous :

Hiérarchie des classes POI, du classeur jusqu'à la feuille, la ligne et la cellule.

  • Cahier de travail: Les classes XSSFWorkbook et HSSFWorkbook implémentent cette interface.
  • Cahier d'exercices XSSF : Il s'agit d'une représentation de classe d'un fichier XLSX.
  • Cahier d'exercices HSSF : Il s'agit d'une représentation de classe d'un fichier XLS.
  • Drap: Les classes XSSFSheet et HSSFSheet implémentent cette interface.
  • Feuille XSSF : Il s'agit d'une classe représentant une feuille dans un fichier XLSX.
  • Feuille HSSF : Il s'agit d'une classe représentant une feuille dans un fichier XLS.
  • Rangée: Les classes XSSFRow et HSSFRow implémentent cette interface.
  • XSSFRow : Il s'agit d'une classe représentant une ligne dans la feuille d'un fichier XLSX.
  • HSSFRow : Il s'agit d'une classe représentant une ligne dans la feuille d'un fichier XLS.
  • Cellulaire: Les classes XSSFCell et HSSFCell implémentent cette interface.
  • Cellule XSS : Il s'agit d'une classe représentant une cellule dans une ligne d'un fichier XLSX.
  • Cellule HSSFC : Est une classe représentant une cellule dans une ligne d'un fichier XLS.

Lire écrire Operaproduction

Pour notre exemple, nous considérerons ci-dessous le format de fichier Excel donné

Exemple de classeur Excel exporté avec ExcelGuruFeuille de démonstration 99 utilisée par les deux exemples

Lire les données d'un fichier Excel

Exemple complet : Nous essayons ici de lire des données depuis Excel. Selenium:

package excelExportAndFileIO;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadGuru99ExcelFile {

    public void readExcel(String filePath,String fileName,String sheetName) throws IOException{

    //Create an object of File class to open xlsx file

    File file =    new File(filePath+"\\"+fileName);

    //Create an object of FileInputStream class to read excel file

    FileInputStream inputStream = new FileInputStream(file);

    Workbook guru99Workbook = null;

    //Find the file extension by splitting file name in substring  and getting only extension name

    String fileExtensionName = fileName.substring(fileName.indexOf("."));

    //Check condition if the file is xlsx file

    if(fileExtensionName.equals(".xlsx")){

    //If it is xlsx file then create object of XSSFWorkbook class

    guru99Workbook = new XSSFWorkbook(inputStream);

    }

    //Check condition if the file is xls file

    else if(fileExtensionName.equals(".xls")){

        //If it is xls file then create object of HSSFWorkbook class

        guru99Workbook = new HSSFWorkbook(inputStream);

    }

    //Read sheet inside the workbook by its name

    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);

    //Find number of rows in excel file

    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();

    //Create a loop over all the rows of excel file to read it

    for (int i = 0; i < rowCount+1; i++) {

        Row row = guru99Sheet.getRow(i);

        //Create a loop to print cell values in a row

        for (int j = 0; j < row.getLastCellNum(); j++) {

            //Print Excel data in console

            System.out.print(row.getCell(j).getStringCellValue()+"|| ");

        }

        System.out.println();
    } 

    }  

    //Main function is calling readExcel function to read data from excel file

    public static void main(String...strings) throws IOException{

    //Create an object of ReadGuru99ExcelFile class

    ReadGuru99ExcelFile objExcelFile = new ReadGuru99ExcelFile();

    //Prepare the path of excel file

    String filePath = System.getProperty("user.dir")+"\\src\\excelExportAndFileIO";

    //Call read file method of the class to read data

    objExcelFile.readExcel(filePath,"ExportExcel.xlsx","ExcelGuru99Demo");

    }

}

À noter: Nous n'utilisons pas le TestNG cadre ici. Exécutez la classe comme Java Application utilisant la fonction lire Excel dans Selenium comme le montre l'exemple ci-dessus.

La console affiche ensuite chaque ligne, cellule par cellule.

Sortie de la console affichant chaque ligne Excel imprimée, les valeurs des cellules étant séparées par des barres verticales.

Écrire des données dans un fichier Excel

Exemple complet : Nous essayons ici d'écrire des données à partir d'un fichier Excel en ajoutant une nouvelle ligne dans ce fichier.

package excelExportAndFileIO;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class WriteGuru99ExcelFile {

    public void writeExcel(String filePath,String fileName,String sheetName,String[] dataToWrite) throws IOException{

        //Create an object of File class to open xlsx file

        File file =    new File(filePath+"\\"+fileName);

        //Create an object of FileInputStream class to read excel file

        FileInputStream inputStream = new FileInputStream(file);

        Workbook guru99Workbook = null;

        //Find the file extension by splitting  file name in substring and getting only extension name

        String fileExtensionName = fileName.substring(fileName.indexOf("."));

        //Check condition if the file is xlsx file

        if(fileExtensionName.equals(".xlsx")){

        //If it is xlsx file then create object of XSSFWorkbook class

        guru99Workbook = new XSSFWorkbook(inputStream);

        }

        //Check condition if the file is xls file

        else if(fileExtensionName.equals(".xls")){

            //If it is xls file then create object of XSSFWorkbook class

            guru99Workbook = new HSSFWorkbook(inputStream);

        }    

    //Read excel sheet by sheet name    

    Sheet sheet = guru99Workbook.getSheet(sheetName);

    //Get the current count of rows in excel file

    int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();

    //Get the first row from the sheet

    Row row = sheet.getRow(0);

    //Create a new row and append it at last of sheet

    Row newRow = sheet.createRow(rowCount+1);

    //Create a loop over the cell of newly created Row

    for(int j = 0; j < row.getLastCellNum(); j++){

        //Fill data in row

        Cell cell = newRow.createCell(j);

        cell.setCellValue(dataToWrite[j]);

    }

    //Close input stream

    inputStream.close();

    //Create an object of FileOutputStream class to create write data in excel file

    FileOutputStream outputStream = new FileOutputStream(file);

    //write data in the excel file

    guru99Workbook.write(outputStream);

    //close output stream

    outputStream.close();
	
    }

    public static void main(String...strings) throws IOException{

        //Create an array with the data in the same order in which you expect to be filled in excel file

        String[] valueToWrite = {"Mr. E","Noida"};

        //Create an object of current class

        WriteGuru99ExcelFile objExcelFile = new WriteGuru99ExcelFile();

        //Write the file using file name, sheet name and the data to be filled

        objExcelFile.writeExcel(System.getProperty("user.dir")+"\\src\\excelExportAndFileIO","ExportExcel.xlsx","ExcelGuru99Demo",valueToWrite);

    }

}

Le classeur contient alors la ligne ajoutée.

Feuille Excel après l'ajout de la nouvelle ligne avec M. E et Noida

Manipulation d'Excel à l'aide de l'API JXL

JXL est également un autre pot célèbre pour lire un fichier Excel Java et écrire des fichiers. De nos jours, POI est utilisé dans la plupart des projets, mais avant POI, JXL n'était que Java API pour la manipulation d'Excel. Il s'agit d'une API très petite et simple pour la lecture d'Excel dans Selenium.

Le fichier JAR JXL figure parmi les bibliothèques du projet

CONSEILS: Je suggère de ne pas utiliser JXL dans un nouveau projet car la bibliothèque n'est plus activement développée depuis 2010 (la version 2.6.12 est sa dernière version) et elle manque de fonctionnalités par rapport à l'API POI.

Téléchargez JXL :

Si vous souhaitez travailler avec JXL, vous pouvez le télécharger à partir de ce lien

https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/

Vous pouvez également trouver un exemple de démonstration pour JXL dans ce fichier zip, comme l'exempletracLe contenu ci-dessous s'affiche.

ExtracArchive JXL contenant les dossiers jar, documentation et démo

Quelques fonctionnalités:

  • JXL est capable de lire un fichier Excel dans Selenium pour le classeur 95, 97, 2000, XP, 2003.
  • Nous pouvons travailler en anglais, français, espagnol et allemand.
  • La copie d'un graphique et l'insertion d'images dans Excel sont possibles

Inconvénient:

  • Nous pouvons écrire Excel 97 et versions ultérieures uniquement (l'écriture dans Excel 95 n'est pas prise en charge).
  • JXL ne prend pas en charge le format XLSX du fichier Excel.
  • Il génère une feuille de calcul au format Excel 2000.

FAQ

Déclarer poi-ooxmlIl ne s'agit pas uniquement de poi. Il intègre les poi de manière transitive et fournit les classes XSSF nécessaires à XLSX. La version 5.5.1 est la plus récente.

La partie OOXML de POI est manquante ou incompatible. Ajoutez poi-ooxml et assurez-vous que tous les artefacts POI utilisent une seule version, car les versions mixtes excluent les classes de schéma du chemin d'accès.

La méthode getStringCellValue ne fonctionne que sur les cellules de texte. Utilisez DataFormatter pour lire n'importe quelle cellule comme une chaîne de caractères, ou vérifiez le type de cellule (getCellType) et appelez FormulaEvaluator sur les formules.

Une ligne ou une cellule manquante renvoie la valeur nulle, ce qui provoque une exception NullPointerException. Il est donc nécessaire de vérifier au préalable si la valeur est nulle ou si CellType.BLANK, ou de définir une stratégie MissingCellPolicy afin que les cellules vides renvoient des cellules vides.

Les modèles d'apprentissage automatique génèrent des lignes réalistes, signalent les doublons et classent les combinaisons qui révèlent le mieux les défauts, en éliminant les lignes superflues. test basé sur les données feuilles.

Copilote GitHub récapitule le texte standard du lecteur et de l'auteur à partir d'un commentaire. RevConsultez-le, car il suggère souvent des constantes de type cellulaire obsolètes provenant d'anciennes versions de POI.

SXSSFWorkbook écrit les lignes sur le disque au lieu de stocker le classeur en mémoire, ce qui évite les erreurs de type OutOfMemoryError lors des exportations volumineuses. Lors de la lecture, traitez les lignes à l'intérieur de la boucle.

Placez-le dans src/test/resources et construisez le chemin à partir de System.getProperty("user.dir"). Les chemins absolus ne fonctionnent plus lorsque la suite s'exécute ailleurs ou sur un autre système. Jenkins l'agent.

Résumez cet article avec :