Kako čitati/pisati Excel podatke u Selenium Korištenje Apache POI-a
⚡ Pametni sažetak
Pogon za Excel datoteke Selenium testovi temeljeni na podacima, a Apache POI je Java biblioteka koja ih čita i zapisuje. Odjeljci u nastavku pokrivaju ovisnost, osnovne klase, primjere čitanja i pisanja te JXL.
Datotečni IO kritičan je dio svakog softverskog procesa. Često stvaramo datoteku, otvaramo je i ažuriramo nešto ili brišemo na našim računalima. Isti je slučaj sa Selenium Automatizacija. Trebamo proces za manipuliranje datotekama Selenium.
Java nudi nam različite klase za manipulaciju datotekama Selenium. U ovom ćemo vodiču naučiti kako dalje čitati i pisati nadmašiti datoteka uz pomoć Java IO paket i apaš Biblioteka POI.
Apache POI u Selenium
The Apache POI u Selenium je široko korišteni API za Selenium testiranje vođeno podacimaTo je POI biblioteka napisana u Java koji korisnicima daje API za manipuliranje Microsoft dokumente poput .xls i .xlsx. Korisnici mogu jednostavno stvarati, mijenjati i čitati/pisati u Excel datoteke. POI je kratica za „Lošu implementaciju prikrivanja“ (Poor Obfuscation Implementation).
Kako rukovati Excel datotekom pomoću POI-a (Maven POM ovisnost)
Poveznice s točkama interesa Selenium test prema donjoj radnoj bilježnici.
Za čitanje i pisanje Excel datoteke JavaApache pruža vrlo poznatu biblioteku POI. Ova biblioteka je dovoljno sposobna za čitanje i pisanje datoteka u formatu XLS i XLSX programa Excel.
Za čitanje XLS datoteka, POI biblioteka pruža HSSF implementaciju.
Za čitanje XLSX-a, XSSF implementacija POI biblioteke bit će izbor. Proučimo ove implementacije detaljnije.
Ako koristite Maven u svom projektu, Maven ovisnost će biti dodana u pom.xml kao što je prikazano u nastavku.
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Napomena o verziji: 4.1.1 je izvorni primjer; trenutni projekti deklariraju poi-ooxml 5.5.1, što je potrebno za XLSX.
Ili jednostavno možete preuzeti najnoviju verziju POI jara s http://poi.apache.org/download.html & preuzmite najnoviju zip datoteku
Kada preuzmete zip datoteku za ovaj jar, trebate ga raspakirati i dodati sve te jar-ove u put klase vašeg projekta.
Klase i sučelja u POI
Slijedi popis različitih Java Sučelja i klase u POI-ju za čitanje XLS i XLSX datoteka, prikazani u nastavku -
- Radna bilježnica: Klase XSSFWorkbook i HSSFWorkbook implementiraju ovo sučelje.
- XSSFRadna knjiga: Je klasna reprezentacija XLSX datoteke.
- HSSFRadna bilježnica: Je klasna reprezentacija XLS datoteke.
- List: Klase XSSFSheet i HSSFSheet implementiraju ovo sučelje.
- XSSFList: Je klasa koja predstavlja list u XLSX datoteci.
- HSSFS list: Je klasa koja predstavlja list u XLS datoteci.
- Red: Klase XSSFRow i HSSFRow implementiraju ovo sučelje.
- XSSFrow: Je klasa koja predstavlja red u listu XLSX datoteke.
- HSSFRow: Je klasa koja predstavlja red u listu XLS datoteke.
- Cell: Klase XSSFCell i HSSFCell implementiraju ovo sučelje.
- XSSFCelija: Je klasa koja predstavlja ćeliju u retku XLSX datoteke.
- HSSFCell: Je klasa koja predstavlja ćeliju u nizu XLS datoteke.
Read / Write OperaANJE
Za naš primjer, razmotrit ćemo dolje dati Excel format datoteke
Čitanje podataka iz Excel datoteke
Potpuni primjer: Ovdje pokušavamo pročitati podatke iz Excela u 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"); } }
Bilješka: Mi ne koristimo TestNG okvir ovdje. Vodite razred kao Java Aplikacija koja koristi funkciju read excel in Selenium kao što je prikazano u gornjem primjeru.
Konzola zatim ispisuje svaki redak, ćeliju po ćeliju.
Zapisivanje podataka u Excel datoteku
Potpuni primjer: Ovdje pokušavamo pisati podatke iz Excel datoteke dodavanjem novog retka u Excel datoteku.
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); } }
Radna knjiga zatim sadrži dodani redak.
Excel manipulacija pomoću JXL API-ja
JXL je također još jedan poznati jar za čitanje Excel datoteke Java i pisanje datoteka. Danas se POI koristi u većini projekata, ali prije POI-a bio je samo JXL Java API za manipulaciju Excelom. To je vrlo mali i jednostavan API za čitanje programa Excel Selenium.
SAVJETI: Moj prijedlog je da ne koristite JXL ni u jednom novom projektu jer biblioteka nije u aktivnom razvoju od 2010. - 2.6.12 je još uvijek njezino najnovije izdanje - i nedostaje joj ta značajka u usporedbi s POI API-jem.
Preuzmite JXL:
Ako želite raditi s JXL-om, možete ga preuzeti s ove poveznice
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Također možete dobiti demo primjer unutar ove zip datoteke za JXL, kao npr.tracprikazani sadržaji u nastavku.
Neke značajke:
- JXL može čitati Excel datoteku Selenium za 95, 97, 2000, XP, 2003 radna knjižica.
- Možemo raditi s engleskim, francuskim, španjolskim, njemačkim jezikom.
- Kopiranje grafikona i umetanje slike u Excelu je moguće
Nedostatak:
- Možemo pisati samo Excel 97 i novije (pisanje u Excelu 95 nije podržano).
- JXL ne podržava XLSX format excel datoteke.
- Generira proračunsku tablicu u formatu Excel 2000.










