Hur man läser/skriver data från Excel-fil: Selenium POI
File IO är en kritisk del av alla programvaruprocesser. Vi skapar ofta en fil, öppnar den och uppdaterar något eller tar bort den på våra datorer. Samma är fallet med Selenium Automatisering. Vi behöver en process att manipulera filer med Selenium.
Java ger oss olika klasser för filhantering med Selenium. I den här handledningen ska vi lära oss hur vi kan läsa och skriva vidare excel fil med hjälp av Java IO-paket och Apache POI-bibliotek.
Apache POI in Selenium
Din Apache POI in Selenium är ett allmänt använt API för selendatadrivna tester. Det är ett POI-bibliotek skrivet i Java som ger användarna ett API för att manipulera Microsoft dokument som .xls och .xlsx. Användare kan enkelt skapa, ändra och läsa/skriva till Excel-filer. POI står för "Poor Obfuscation Implementation".
Exporterar Excel
Hur man hanterar Excel-fil med hjälp av POI (Maven POM Dependency)
Att läsa och skriva Excel-fil i Java, Apache tillhandahåller en mycket berömd bibliotek POI. Detta bibliotek är kapabelt nog att läsa och skriva båda XLS och XLSX filformatet i Excel.
Att läsa XLS filer, en HSSF implementering tillhandahålls av POI-biblioteket.
Att läsa XLSX, XSSF införande av POI bibliotek blir valet. Låt oss studera dessa implementeringar i detalj.
Om du använder Maven i ditt projekt kommer Maven-beroendet att vara det
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Eller så kan du helt enkelt ladda ner den senaste versionen POI-burkar från http://poi.apache.org/download.html & ladda ner den senaste zip-filen
När du laddar ner zip-filen för den här burken måste du packa upp den och lägga till alla dessa burkar till klasssökvägen för ditt projekt.
Klasser och gränssnitt i POI
Följande är en lista över olika Java Gränssnitt och klasser i POI för läsning XLS och XLSX filea-
- Arbetsbok: Klasserna XSSFWorkbook och HSSFWorkbook implementerar detta gränssnitt.
- XSSF-arbetsbok: Är en klassrepresentation av XLSX-fil.
- HSSF Arbetsbok: Är en klassrepresentation av XLS-fil.
- Sheet: Klasserna XSSFSheet och HSSFSheet implementerar detta gränssnitt.
- XSSFSblad: Är en klass som representerar ett ark i en XLSX-fil.
- HSSFSblad: Är en klass som representerar ett ark i en XLS-fil.
- Rad: Klasserna XSSFRow och HSSFRow implementerar detta gränssnitt.
- XSSFRow: Är en klass som representerar en rad i arket för XLSX-fil.
- HSSFRow: Är en klass som representerar en rad i arket med XLS-fil.
- Cell: Klasserna XSSFCell och HSSFCell implementerar detta gränssnitt.
- XSSFCell: Är en klass som representerar en cell i en rad av XLSX-fil.
- HSSFCell: Är en klass som representerar en cell i en rad av XLS-fil.
Läs-/skrivoperation
För vårt exempel kommer vi att överväga nedan givet Excel-filformat
Läs data från Excel-fil
Komplett exempel: Här försöker vi läsa in data från 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"); } }
Obs: Vi använder inte Testng ram här. Kör klassen som Java Applikation som använder funktionen läs excel in Selenium som visas i exemplet ovan.
Skriv data på Excel-fil
Komplett exempel: Här försöker vi skriva data från Excel-fil genom att lägga till ny rad i Excel-fil
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); } }
Excel-manipulation med JXL API
JXL är också en annan berömd burk att läsa Excel-fil i Java och skriva filer. Numera används POI i de flesta projekt, men innan POI var det bara JXL Java API för Excel-manipulation. Det är ett mycket litet och enkelt API för att läsa in Excel Selenium.
TIPS: Mitt förslag är att inte använda JXL i något nytt projekt eftersom biblioteket inte är i aktiv utveckling från 2010 och saknar funktionen i jämförelse med POI API.
Ladda ner JXL:
Om du vill arbeta med JXL kan du ladda ner det från denna länk
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Du kan också få demoexempel i denna zippade fil för JXL.
Några detaljer:
- JXL kan läsa Excel-fil i Selenium för 95, 97, 2000, XP, 2003 arbetsbok.
- Vi kan arbeta med engelska, franska, spanska, tyska.
- Det är möjligt att kopiera ett diagram och infogning av bilder i Excel
Nackdel:
- Vi kan bara skriva Excel 97 och senare (skriva i Excel 95 stöds inte).
- JXL stöder inte XLSX-formatet för Excel-filen.
- Det genererar kalkylblad i Excel 2000-format.
Sammanfattning
- Excel-fil kan läsas av Java IO-drift. För det måste vi använda Apache POI Jar.
- Det finns två typer av arbetsbok i Excel-fil, XLSX och XLS filer.
- POI har olika gränssnitt arbetsbok, ark, rad, cell.
- Dessa gränssnitt implementeras av motsvarande XLS (HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell) Och XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) filmanipulationsklasser.
- JXL är ett annat API för Excel-hantering i Selenium.
- JXL kan inte fungera med XLSX-formatet Excel.