Как да четете/записвате данни от Excel файл: Selenium POI
File IO е критична част от всеки софтуерен процес. Често създаваме файл, отваряме го и актуализираме нещо или го изтриваме в нашите компютри. Същото е положението и с Selenium Автоматизация. Имаме нужда от процес, с който да манипулираме файлове Selenium.
Java ни предоставя различни класове за манипулиране на файлове с Selenium. В този урок ще научим как можем да четем и пишем Excel файл с помощта на Java IO пакет и Apache POI библиотека.
Apache POI в Selenium
- Apache POI в Selenium е широко използван API за тестване, управлявано от данни със селен. Това е POI библиотека, написана на Java който дава на потребителите API за манипулиране Microsoft документи като .xls и .xlsx. Потребителите могат лесно да създават, модифицират и четат/записват в excel файлове. POI означава „лошо внедряване на обфускация“.
Експортиране на Excel
Как да обработвам excel файл с помощта на POI (Maven POM зависимост)
За четене и запис на Excel файл Java, Apache предоставя много известна библиотека POI. Тази библиотека е достатъчно способна да чете и пише и двете XLS намлява XLSX файлов формат на Excel.
Чета XLS файлове, ан HSSF изпълнението се осигурява от POI библиотека.
Чета XLSX, XSSF изпълнение на POI библиотека ще бъде изборът. Нека проучим тези реализации в детайли.
Ако използвате Maven във вашия проект, зависимостта на Maven ще бъде
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency>
Или можете просто да изтеглите най-новата версия на POI буркани от http://poi.apache.org/download.html & изтеглете най-новия zip файл
Когато изтеглите zip файла за този буркан, трябва да го разархивирате и да добавите всички тези буркани към пътя на класа на вашия проект.
Класове и интерфейси в POI
Следва списък с различни Java Интерфейси и класове в POI за четене XLS намлява XLSX филе-
- Workbook: Класовете XSSFWorkbook и HSSFWorkbook прилагат този интерфейс.
- XSSF Работна книга: представлява класово представяне на XLSX файл.
- HSSF Работна тетрадка: представлява класово представяне на XLS файл.
- Лист: Класовете XSSFSheet и HSSFSheet реализират този интерфейс.
- XSSFSsheet: е клас, представляващ лист в XLSX файл.
- HSSFSsheet: е клас, представляващ лист в XLS файл.
- Ред: Класовете XSSFRow и HSSFRow реализират този интерфейс.
- XSSFRow: е клас, представляващ ред в листа на XLSX файл.
- HSSFRow: е клас, представляващ ред в листа на XLS файл.
- Клетка: Класовете XSSFCell и HSSFCell реализират този интерфейс.
- XSSFCell: е клас, представляващ клетка в ред от XLSX файл.
- HSSFCell: Е клас, представляващ клетка в ред от XLS файл.
Операция за четене/запис
За нашия пример ще разгледаме дадения по-долу файлов формат на Excel
Прочетете данни от Excel файл
Пълен пример: Тук се опитваме да прочетем данни от 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"); } }
Забележка: Ние не използваме Testng рамка тук. Изпълнете класа като Java Приложение, използващо функцията read excel in Selenium както е показано в горния пример.
Запишете данни в Excel файл
Пълен пример: Тук се опитваме да запишем данни от Excel файл, като добавим нов ред в Excel файл
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 с помощта на JXL API
JXL също е друг известен буркан за четене на Excel файл Java и писане на файлове. В наши дни POI се използва в повечето проекти, но преди POI беше само JXL Java API за манипулиране на Excel. Това е много малък и прост API за четене на Excel Selenium.
СЪВЕТИ: Моето предложение е да не използвате JXL в нито един нов проект, защото библиотеката не е в активно развитие от 2010 г. и липсва функцията в сравнение с POI API.
Изтеглете JXL:
Ако искате да работите с JXL, можете да го изтеглите от тази връзка
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
Можете също да получите демонстрационен пример в този компресиран файл за JXL.
Някои от функциите:
- JXL може да чете Excel файл в Selenium за 95, 97, 2000, XP, 2003 работна книга.
- Можем да работим с английски, френски, испански, немски.
- Възможно е копиране на диаграма и вмъкване на изображение в Excel
Недостатък:
- Можем да пишем само в Excel 97 и по-нови версии (писането в Excel 95 не се поддържа).
- JXL не поддържа XLSX формат на excel файл.
- Той генерира електронна таблица във формат Excel 2000.
Oбобщение
- Excel файлът може да се чете от Java IO операция. За това трябва да използваме Apache POI Jar.
- Има два вида работна книга във файл на Excel, XLSX намлява XLS файлове.
- POI има различни интерфейси Workbook, Sheet, Row, Cell.
- Тези интерфейси се реализират чрез съответстващи XLS (HSSFWorkbook, HSSFSsheet, HSSFRow, HSSFCell) И XLSX (XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell) класове за манипулиране на файлове.
- JXL е друг API за работа с Excel Selenium.
- JXL не може да работи с XLSX формат на excel.