Sådan læser/skriver du Excel-data i Selenium Brug af Apache POI
⚡ Smart opsummering
Excel-filer drev Selenium datadrevne tests, og Apache POI er Java bibliotek, der læser og skriver til dem. Afsnittene nedenfor dækker afhængigheden, kerneklasserne, læse- og skriveeksemplerne og JXL.
Fil IO er en kritisk del af enhver softwareproces. Vi opretter ofte en fil, åbner den og opdaterer noget eller sletter den på vores computere. Det samme er tilfældet med Selenium Automatisering. Vi har brug for en proces til at manipulere filer med Selenium.
Java giver os forskellige klasser til filmanipulation med Selenium. I denne tutorial skal vi lære, hvordan vi kan læse og skrive videre Excel fil ved hjælp af Java IO-pakke og Apache POI-bibliotek.
Apache POI ind Selenium
Apache POI ind Selenium er et udbredt API til Selenium datadrevet testDet er et POI-bibliotek skrevet i Java der giver brugerne en API til at manipulere Microsoft dokumenter som .xls og .xlsx. Brugere kan nemt oprette, ændre og læse/skrive til Excel-filer. POI står for "Poor Obfuscation Implementation" (Dårlig Implementering af Obfuscation).
Sådan håndterer du en Excel-fil ved hjælp af POI (Maven POM-afhængighed)
POI-links Selenium test til arbejdsbogen nedenfor.
At læse og skrive Excel-fil i JavaApache leverer et meget berømt biblioteks-POI. Dette bibliotek er kapabelt nok til at læse og skrive til både XLS- og XLSX-filformater i Excel.
For at læse XLS-filer leveres en HSSF-implementering af POI-biblioteket.
For at læse XLSX vil XSSF-implementeringen af POI-biblioteket være det foretrukne valg. Lad os studere disse implementeringer i detaljer.
Hvis du bruger Maven i dit projekt, vil Maven-afhængigheden blive tilføjet til pom.xml som vist nedenfor.
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Versionsnotat: 4.1.1 er det originale eksempel; nuværende projekter erklærer poi-ooxml 5.5.1, som er påkrævet for XLSX.
Eller du kan blot downloade den seneste version af POI-krukker fra http://poi.apache.org/download.html & download den seneste zip-fil
Når du downloader zip-filen til denne krukke, skal du pakke den ud og tilføje alle disse krukker til klassestien til dit projekt.
Klasser og grænseflader i POI
Følgende er en liste over forskellige Java Grænseflader og klasser i POI til læsning af XLS- og XLSX-filer, vist nedenfor:
- projektmappe: XSSFWorkbook- og HSSFWorkbook-klasser implementerer denne grænseflade.
- XSSF-arbejdsbog: Er en klasserepræsentation af en XLSX-fil.
- HSSF-arbejdsbog: Er en klasserepræsentation af en XLS-fil.
- Ark: XSSFheet- og HSSFheet-klasserne implementerer denne grænseflade.
- XSSFSheet: Er en klasse, der repræsenterer et ark i en XLSX-fil.
- HSSF-ark: Er en klasse, der repræsenterer et ark i en XLS-fil.
- Række: XSSFRow- og HSSFRow-klasserne implementerer denne grænseflade.
- XSSF-strækning: Er en klasse, der repræsenterer en række i arket i en XLSX-fil.
- HSSFRow: Er en klasse, der repræsenterer en række i arket i en XLS-fil.
- Celle: XSSFCell- og HSSFCell-klasserne implementerer denne grænseflade.
- XSSFCelle: Er en klasse, der repræsenterer en celle i en række i en XLSX-fil.
- HSSFCell: Er en klasse, der repræsenterer en celle i en række af XLS-fil.
Læse skrive Operation
For vores eksempel vil vi overveje nedenfor givet Excel-filformat
Læs data fra Excel-fil
Komplet eksempel: Her prøver vi at læse data fra 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"); } }
Bemærk: Vi bruger ikke TestNG rammer her. Kør klassen som Java Applikation, der bruger funktion read excel in Selenium som vist i ovenstående eksempel.
Konsollen udskriver derefter hver række, celle for celle.
Skriv data i Excel-fil
Komplet eksempel: Her prøver vi at skrive data fra en Excel-fil ved at tilføje en ny række i Excel-filen.
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); } }
Projektmappen indeholder derefter den tilføjede række.
Excel-manipulation ved hjælp af JXL API
JXL er også en anden berømt krukke at læse Excel-fil i Java og skrive filer. I dag bruges POI i de fleste projekter, men før POI var JXL kun Java API til Excel-manipulation. Det er en meget lille og enkel API til Excel-læsning Selenium.
TIP: Mit forslag er ikke at bruge JXL i nye projekter, da biblioteket ikke er under aktiv udvikling siden 2010 — 2.6.12 er stadig den seneste udgivelse — og funktionen mangler i forhold til POI API.
Download JXL:
Hvis du vil arbejde med JXL, kan du downloade det fra dette link
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Du kan også få et demoeksempel i denne zip-fil til JXL, som f.eks.tracIndholdet nedenfor viser.
Nogle af funktionerne:
- JXL er i stand til at læse Excel-fil i Selenium til 95, 97, 2000, XP, 2003 projektmappe.
- Vi kan arbejde med engelsk, fransk, spansk, tysk.
- Det er muligt at kopiere et diagram og billedindsættelse i Excel
Ulempe:
- Vi kan kun skrive Excel 97 og senere (skrivning i Excel 95 understøttes ikke).
- JXL understøtter ikke XLSX-formatet af excel-fil.
- Det genererer regneark i Excel 2000-format.










