Como ler/escrever dados do Excel em Selenium Usando Apache POI

⚡ Resumo Inteligente

Unidade de arquivos do Excel Selenium testes orientados por dados, e o Apache POI é o Java Biblioteca que lê e escreve esses dados. As seções abaixo abordam a dependência, as classes principais, exemplos de leitura e escrita e o JXL.

  • 🔘 Dois formatos: As classes HSSF lidam com arquivos .xls, enquanto as classes XSSF lidam com arquivos .xlsx.
  • Interfaces principais: Workbook, Sheet, Row e Cell são elementos semelhantes a uma planilha.
  • 🧪 Leitura: FileInputStream mais getLastRowNum percorre cada linha e célula.
  • 🛠️ Escrevendo: createRow e setCellValue adicionam dados, e FileOutputStream os salva.
  • 📊 Legado: O JXL lê planilhas antigas, mas não o XLSX.

Leitura e escrita de dados do Excel em Selenium com Apache POI

File IO é uma parte crítica de qualquer processo de software. Freqüentemente criamos um arquivo, abrimos e atualizamos algo ou excluímos em nossos computadores. O mesmo acontece com Selenium Automação. Precisamos de um processo para manipular arquivos com Selenium.

Java nos fornece diferentes classes para manipulação de arquivos com Selenium. Neste tutorial, aprenderemos como podemos ler e escrever em Excel arquivo com a ajuda de Java Pacote IO e apache Biblioteca de POIs.

Ponto de interesse do Apache em Selenium

O Ponto de interesse do Apache em Selenium é uma API amplamente utilizada para Selenium testes baseados em dadosÉ uma biblioteca de Pontos de Interesse (POI) escrita em Java que fornece aos usuários uma API para manipular Microsoft Documentos como .xls e .xlsx. Os usuários podem facilmente criar, modificar e ler/gravar em arquivos do Excel. POI significa "Implementação de Ofuscação Inadequada".

Como manipular arquivos do Excel usando POI (dependência do Maven POM)

Links de POI Selenium teste com a planilha abaixo.

Apache POI atuando como ponte entre um Selenium teste e uma planilha do Excel

Para ler e gravar arquivos do Excel em JavaA Apache fornece a famosa biblioteca POI. Essa biblioteca é capaz de ler e gravar arquivos Excel nos formatos XLS e XLSX.

Para ler arquivos XLS, a biblioteca POI fornece uma implementação HSSF.

Para ler arquivos XLSX, a implementação XSSF da biblioteca POI será a escolha ideal. Vamos estudar essas implementações em detalhes.

Se você estiver usando o Maven em seu projeto, a dependência do Maven será adicionada ao pom.xml conforme mostrado abaixo.

A entrada de dependência POI foi adicionada ao arquivo pom.xml de um projeto Maven.

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

Nota de versão: 4.1.1 é o exemplo original; os projetos atuais declaram poi-ooxml 5.5.1, que é necessário para XLSX.

Ou você pode simplesmente baixar a versão mais recente dos frascos de POI em http://poi.apache.org/download.html & baixe o arquivo zip mais recente

Página de download do Apache POI listando os arquivos de distribuição binários e de código-fonte.

Ao baixar o arquivo zip deste jar, você precisa descompactá-lo e adicionar todos esses jars ao caminho de classe do seu projeto.

Arquivos JAR de POI descompactados adicionados ao Java caminho de construção do projeto

Classes e interfaces em POI

A seguir está uma lista de diferentes Java Interfaces e classes em POI para leitura de arquivos XLS e XLSX, mostradas abaixo.

Hierarquia de classes POI desde Workbook até Sheet, Row e Cell.

  • Pasta de trabalho: As classes XSSFWorkbook e HSSFWorkbook implementam essa interface.
  • XSSFWorkbook: É uma representação de classe de um arquivo XLSX.
  • Manual HSSF: É uma representação de classe de um arquivo XLS.
  • Folha: As classes XSSFSheet e HSSFSheet implementam essa interface.
  • XSSFSheet: É uma classe que representa uma planilha em um arquivo XLSX.
  • Folha HSSF: É uma classe que representa uma planilha em um arquivo XLS.
  • Linha: As classes XSSFRow e HSSFRow implementam essa interface.
  • XSSFRow: É uma classe que representa uma linha na planilha de um arquivo XLSX.
  • HSSFRow: É uma classe que representa uma linha na planilha de um arquivo XLS.
  • Célula: As classes XSSFCell e HSSFCell implementam essa interface.
  • XSSFCell: É uma classe que representa uma célula em uma linha de um arquivo XLSX.
  • Célula HSSF: É uma classe que representa uma célula em uma linha do arquivo XLS.

Ler escrever Operação

Para nosso exemplo, consideraremos abaixo o formato de arquivo Excel fornecido

Exemplo de exportação: Pasta de trabalho do Excel com o ExcelGuruFolha de demonstração 99 usada em ambos os exemplos

Ler dados do arquivo Excel

Exemplo completo: Aqui estamos tentando ler dados do Excel em 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");

    }

}

Observação: Não estamos usando o TestNG quadro aqui. Execute a classe como Java Aplicativo usando função ler excel em Selenium como mostrado no exemplo acima.

Em seguida, o console imprime cada linha, célula por célula.

Saída do console mostrando cada linha do Excel impressa com os valores das células separados por barras verticais.

Escrever dados em arquivo Excel

Exemplo completo: Aqui, estamos tentando escrever dados de um arquivo Excel adicionando uma nova linha ao arquivo.

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);

    }

}

A planilha então inclui a linha adicionada.

Planilha do Excel após a inclusão da nova linha com o Sr. E e Noida.

Manipulação do Excel usando API JXL

JXL também é outro jar famoso para ler arquivos Excel Java e escrever arquivos. Hoje em dia o POI é utilizado na maioria dos projetos, mas antes do POI o JXL era apenas Java API para manipulação do Excel. É uma API muito pequena e simples para leitura do Excel em Selenium.

O arquivo JAR JXL está listado entre as bibliotecas do projeto.

DICAS: Minha sugestão é não usar JXL em nenhum projeto novo, pois a biblioteca não está em desenvolvimento ativo desde 2010 — a versão 2.6.12 ainda é a mais recente — e carece de recursos em comparação com a API POI.

Baixe JXL:

Se quiser trabalhar com JXL, você pode baixá-lo neste link

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

Você também pode obter um exemplo de demonstração dentro deste arquivo zipado para JXL, como o extracO conteúdo abaixo é exibido.

ExtracArquivo JXL contendo o arquivo JAR, a documentação e as pastas de demonstração.

Alguns dos recursos:

  • JXL é capaz de ler arquivos Excel em Selenium para pasta de trabalho 95, 97, 2000, XP, 2003.
  • Podemos trabalhar com inglês, francês, espanhol, alemão.
  • É possível copiar um gráfico e inserir imagens no Excel

Recua:

  • Podemos escrever apenas no Excel 97 e posterior (não há suporte para escrever no Excel 95).
  • JXL não suporta o formato XLSX de arquivo Excel.
  • Gera planilha no formato Excel 2000.

Perguntas Frequentes

Declarar poi-ooxmlNão utiliza apenas o poi. Ele importa o poi transitivamente e fornece as classes XSSF que o XLSX precisa. A versão atual é a 5.5.1.

A parte OOXML do POI está ausente ou incompatível. Adicione o poi-ooxml e mantenha todos os artefatos do POI em uma única versão, já que versões mistas deixam as classes de esquema fora do caminho.

A função getStringCellValue só funciona em células de texto. Use DataFormatter para ler qualquer célula como uma string ou verifique getCellType e chame FormulaEvaluator em fórmulas.

Uma linha ou célula ausente retorna nulo, portanto o loop lança uma NullPointerException. Verifique primeiro se é nulo ou se CellType.BLANK, ou defina uma MissingCellPolicy para que células em branco retornem células vazias.

Os modelos de aprendizado de máquina geram linhas realistas, sinalizam duplicatas e classificam as combinações que melhor expõem os defeitos, eliminando o excesso de dados. testes baseados em dados folhas.

Copiloto do GitHub Rascunhos de texto padrão para leitor e escritor extraídos de um comentário. RevVeja, pois frequentemente sugere constantes de tipo de célula obsoletas de versões antigas do POI.

O SXSSFWorkbook transmite as linhas para o disco em vez de manter a planilha na memória, portanto, grandes exportações não gerarão mais erros OutOfMemoryError. Ao ler, processe as linhas dentro do loop.

Mantenha o arquivo em src/test/resources e construa o caminho a partir de System.getProperty(“user.dir”). Caminhos absolutos deixam de funcionar quando o conjunto de testes é executado em outro local ou em um diretório específico. Jenkins agente.

Resuma esta postagem com: