Excel-tietojen lukeminen/kirjoittaminen Selenium Apachen POI-kohdealueen käyttö

⚡ Älykäs yhteenveto

Excel-tiedostojen asema Selenium datalähtöiset testit, ja Apache POI on Java kirjasto, joka lukee ja kirjoittaa niitä. Alla olevat osiot käsittelevät riippuvuuksia, ydinluokkia, luku- ja kirjoitusesimerkkejä sekä JXL:ää.

  • 🔘 Kaksi formaattia: HSSF-luokat käsittelevät .xls-tiedostoja ja XSSF-luokat .xlsx-tiedostoja.
  • Ydinrajapinnat: Työkirja, taulukko, rivi ja solu peilaavat laskentataulukon.
  • 🧪 Reading: FileInputStream ja getLastRowNum toistavat jokaisen rivin ja solun.
  • 🛠️ Kirjoittaminen: createRow ja setCellValue lisäävät tiedot, FileOutputStream tallentaa ne.
  • 📊 Perintö: JXL lukee vanhoja työkirjoja, mutta ei XLSX-tiedostoja.

Excel-tietojen lukeminen ja kirjoittaminen Selenium Apache POI:n kanssa

Tiedoston IO on tärkeä osa mitä tahansa ohjelmistoprosessia. Luomme usein tiedoston, avaamme sen ja päivitämme jotain tai poistamme sen tietokoneistamme. Sama on asian kanssa Selenium Automaatio. Tarvitsemme prosessin tiedostojen käsittelyyn Selenium.

Java tarjoaa meille erilaisia ​​luokkia tiedostojen käsittelyyn Selenium. Tässä opetusohjelmassa opimme, kuinka voimme lukea ja kirjoittaa kunnostautua tiedosto avulla Java IO-paketti ja Apache POI-kirjasto.

Apache POI sisään Selenium

Apache POI sisään Selenium on laajalti käytetty API Selenium datalähtöinen testausSe on POI-kirjasto, joka on kirjoitettu Java joka antaa käyttäjille APIn manipulointia varten Microsoft asiakirjoja, kuten .xls ja .xlsx. Käyttäjät voivat helposti luoda, muokata ja lukea/kirjoittaa Excel-tiedostoja. POI on lyhenne sanoista ”Poor Obfuscation Implementation” (huono obfuskaatiototeutus).

Excel-tiedoston käsittely POI:n avulla (Maven POM -riippuvuus)

POI-linkit Selenium testi alla olevaan työkirjaan.

Apache POI toimii siltana a:n ja Selenium testi ja Excel-työkirja

Excel-tiedoston lukemiseen ja kirjoittamiseen JavaApache tarjoaa erittäin kuuluisan POI-kirjaston. Tämä kirjasto pystyy lukemaan ja kirjoittamaan Excelin XLS- ja XLSX-tiedostomuotoja.

XLS-tiedostojen lukemiseen POI-kirjasto tarjoaa HSSF-toteutuksen.

XLSX-tiedostojen lukemiseen valitaan POI-kirjaston XSSF-toteutus. Tarkastellaan näitä toteutuksia tarkemmin.

Jos käytät projektissasi Mavenia, Maven-riippuvuus lisätään pom.xml-tiedostoon alla olevan mukaisesti.

Maven-projektin pom.xml-tiedostoon lisätty POI-riippuvuusmerkintä

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

Versiohuomautus: 4.1.1 on alkuperäinen esimerkki; nykyiset projektit ilmoittavat poi-ooxml 5.5.1, joka vaaditaan XLSX:lle.

Tai voit yksinkertaisesti ladata uusimman version POI-purkit osoitteesta http://poi.apache.org/download.html & lataa uusin zip-tiedosto

Apachen POI-lataussivu, jossa luetellaan binääri- ja lähdekoodijakeluarkistot

Kun lataat tämän purkin zip-tiedoston, sinun on purettava se ja lisättävä nämä kaikki purkit projektisi luokkapolkuun.

Puratut POI-jar-tiedostot lisätty kansioon Java projektin rakennuspolku

Luokat ja käyttöliittymät POI:ssa

Seuraavassa on luettelo erilaisista Java POI-rajapinnat ja -luokat XLS- ja XLSX-tiedostojen lukemiseen, esitetty alla-

POI-luokkahierarkia työkirjasta taulukkoon, riviin ja soluun

  • työkirja: XSSFWorkbook- ja HSSFWorkbook-luokat toteuttavat tämän rajapinnan.
  • XSSF-työkirja: On XLSX-tiedoston luokkaesitys.
  • HSSF-työkirja: On XLS-tiedoston luokkaesitys.
  • Arkki: XSSFSheet- ja HSSFSheet-luokat toteuttavat tämän rajapinnan.
  • XSSFS-taulukko: On luokka, joka edustaa XLSX-tiedostossa olevaa taulukkoa.
  • HSSF-arkki: On luokka, joka edustaa XLS-tiedostossa olevaa taulukkoa.
  • Rivi: XSSFRow- ja HSSFRow-luokat toteuttavat tämän rajapinnan.
  • XSSFRow: Onko luokka, joka edustaa riviä XLSX-tiedoston arkilla.
  • HSSFRow: Onko luokka, joka edustaa riviä XLS-tiedoston arkilla.
  • Cell: XSSFCell- ja HSSFCell-luokat toteuttavat tämän rajapinnan.
  • XSSFCell: On luokka, joka edustaa solua XLSX-tiedoston rivillä.
  • HSSFCell: Onko luokka, joka edustaa XLS-tiedoston rivin solua.

Lukea kirjoittaa OperaTUKSEN

Esimerkissämme tarkastelemme alla annettua Excel-tiedostomuotoa

Esimerkki ExportExcel-työkirjasta Excelin kanssaGuruMolemmissa esimerkeissä käytetty 99Demo-arkki

Lue tiedot Excel-tiedostosta

Täydellinen esimerkki: Tässä yritetään lukea tietoja Excelistä 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");

    }

}

Huomautus: Emme käytä TestNG puitteet täällä. Suorita luokka nimellä Java Sovellus, joka käyttää toimintoa read excel in Selenium kuten yllä olevassa esimerkissä näkyy.

Konsoli tulostaa sitten jokaisen rivin solu solulta.

Konsolin tuloste, jossa näkyy jokainen Excel-rivi tulostettuna solujen arvoilla erotettuna pystyviivoilla

Kirjoita tiedot Excel-tiedostoon

Täydellinen esimerkki: Tässä yritämme kirjoittaa tietoja Excel-tiedostosta lisäämällä uuden rivin Excel-tiedostoon.

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

    }

}

Työkirja sisältää sitten liitetyn rivin.

Excel-taulukko uuden rivin liittämisen jälkeen, jossa näkyvät herra E ja Noida

Excel-manipulaatio JXL API:lla

JXL on myös toinen kuuluisa purkki Excel-tiedoston lukemiseen Java ja tiedostojen kirjoittaminen. Nykyään POI on käytössä useimmissa projekteissa, mutta ennen POI:ta JXL oli vain Java API Excelin käsittelyyn. Se on erittäin pieni ja yksinkertainen API Excelin lukemiseen Selenium.

JXL-jar-tiedosto listattu projektikirjastojen joukossa

VINKKI: Ehdotukseni on, ettei JXL:ää käytetä missään uusissa projekteissa, koska kirjasto ei ole aktiivisessa kehityksessä vuodesta 2010 lähtien – 2.6.12 on edelleen sen uusin julkaisu – ja ominaisuus puuttuu POI API:sta poiketen.

Lataa JXL:

Jos haluat työskennellä JXL:n kanssa, voit ladata sen tästä linkistä

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

Voit myös saada demoesimerkin tästä zip-tiedostosta JXL:lle, kuten esimerkkinätracTedin sisältö alla näkyy.

Extracted JXL -arkisto, jossa näkyy jar-tiedosto, dokumentaatio ja demokansiot

Jotkut ominaisuuksista:

  • JXL pystyy lukemaan Excel-tiedoston sisään Selenium 95, 97, 2000, XP, 2003 työkirjalle.
  • Pystymme työskentelemään englannin, ranskan, espanjan ja saksan kielellä.
  • Kaavion ja kuvan lisäys Excelissä on mahdollista

Haittapuoli:

  • Voimme kirjoittaa vain Excel 97:ssä ja uudemmissa (Excel 95:ssä kirjoittamista ei tueta).
  • JXL ei tue excel-tiedoston XLSX-muotoa.
  • Se luo laskentataulukon Excel 2000 -muodossa.

UKK

Julistaa poi-ooxml, ei pelkästään poi:ta. Se hakee poi:t transitiivisesti ja toimittaa XSSF-luokat, joita XLSX tarvitsee. Versio 5.5.1 on ajankohtainen.

POI:n OOXML-puoli puuttuu tai ei vastaa toisiaan. Lisää poi-ooxml ja pidä jokainen POI-artefakti yhdessä versiossa, koska sekaversiot jättävät skeemaluokat pois polulta.

getStringCellValue toimii vain tekstisoluissa. Käytä DataFormatteria lukeaksesi minkä tahansa solun merkkijonona tai tarkista getCellType ja kutsu FormulaEvaluatoria kaavoille.

Puuttuva rivi tai solu palauttaa null-arvon, joten silmukka heittää NullPointerException-poikkeuksen. Testaa ensin null- tai CellType.BLANK-arvoa tai aseta MissingCellPolicy-asetus niin, että tyhjät arvot palauttavat tyhjiä soluja.

Koneoppimismallit luovat realistisia rivejä, merkitsevät kaksoiskappaleita ja luokittelevat ne yhdistelmät, jotka paljastavat parhaiten vikoja, karsien turvonneita rivejä. datalähtöinen testaus levyt.

GitHub Copilot laatii lukijan ja kirjoittajan kaavamaisen tekstin kommentista. RevKatso sitä, koska se usein ehdottaa vanhentuneita solutyyppivakioita vanhemmista POI-julkaisuista.

SXSSFWorkbook suoratoistaa rivit levylle sen sijaan, että se säilyttäisi työkirjaa muistissa, joten suuret viennit eivät enää aiheuta OutOfMemoryError-virheitä. Luettaessa käsittele rivit silmukan sisällä.

Pidä se hakemistossa src/test/resources ja rakenna polku kohdasta System.getProperty("user.dir"). Absoluuttiset polut katkeavat, kun ohjelmistopaketti suoritetaan muualla tai Jenkins agentti.

Tiivistä tämä viesti seuraavasti: