В этой статье мы рассмотрим структуру проекта Selenium, создание тестовых данных и доступ к ним через файл Excel.
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Содержание:
Структура папок проекта Selenium
Давайте начнем с описания структуры проекта, которая позволяет разделить различные компоненты проекта:

1. src — Папка содержит различные тестовые скрипты, дженерики (generics), и утилиты. Все эти ресурсы — не что иное, как простые java-классы. В папке src мы создаем иерархию следующих папок:
a) test — Папка «test» содержит две основные вещи: наборы тестов и папки, представляющие разные части приложения, которые мы тестируем. Каждая из этих папок содержит тестовые сценарии, которые относятся к соответствующей части приложения. Набор тестов — это как логическое объединение нескольких тестовых сценариев.
б) utilities — Папка «утилиты» состоит из различных дженериков, констант. Каждая из папок в разделе «утилиты» имеет свое назначение:
- Excel Reader — Класс для чтения тестовых данных из файлов Excel.
- EnvironmentConstants — В этой папке хранятся Java-классы, в которых содержатся статические переменные с ссылками на различные пути, например, URL приложения, URL к базам данных, учетные данные для доступа к базам данных и ссылки на сторонние инструменты.
- DataSetters — Папка содержит классы, реализующие геттеры и сеттеры для тестовых данных, получаемых из файлов Excel. Для загрузки нескольких наборов тестовых данных мы создаем ArrayLists.
- UserRoles — В этой папке находятся классы, которые управляют критериями доступа на основе ролей для пользователей, если такие имеются.
- FunctionLibrary — Папка состоит из классов, содержащих методы, которые могут быть использованы несколькими классами. Очень часто мы должны выполнять практически в каждом тесте определенные операции, такие как вход в систему, установка окружения, манипуляции с данными, запись результатов. Поскольку мы выполняем эти действия многократно, то рекомендуется создавать отдельный класс для таких действий вместо того, чтобы дублировать их во всех тестовых сценариях.
2. excel files — Эти файлы считаются источником данных для выполнения тестовых сценариев. В них хранятся тестовые данные в виде пар ключ-значение. Обратите внимание, что для каждого тестового сценария мы создаем отдельный лист Excel, т.е. каждый тестовый сценарий имеет свой собственный файл с тестовыми данными. Ниже приведен пример формата тестовых данных:

Каждый из столбцов представляет собой ключ, а каждая строка — тестовые данные (то есть, значение).
3. library — Папка действует как хранилище для всех необходимых jar-файлов, библиотек, драйверов и т.д. для успешного создания тестовой среды и выполнения тестовых сценариев. На следующем рисунке показаны библиотеки, которые мы будем использовать в нашем проекте:

4. logs — Папка содержит файл .txt, в котором хранится информация о логах.
5. test material — Папка содержит фактические тестовые данные для проведения тестирования.
6. build.xml — Этот файл xml используется для автоматизации процесса сборки.
7. log4j.xml — Этот xml-файл используется Java-утилитой под названием «Log4j» для создания логов .
Создание тестовых данных
Теперь давайте разберемся, как мы получаем доступ к файлам excel и загружаем данные в тестовые сценарии.
Чтобы легче понять этот процесс, мы разделим его на шаги:
Шаг 1: Первым и самым важным шагом является создание тестовых данных, с помощью которых мы будем выполнять тестовые сценарии. Сперва мы создадим файл Excel под названием «TestScript1» и введем нужные нам данные.

Шаг 2: Следующим шагом будет загрузка библиотеки Java excel Library (jxl), чтобы иметь доступ к уже созданным методам для работы с Excel.
Шаг 3: Далее мы создаем класс ExcelReader.java для чтения данных из Excel:
package Utilities;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
* This is a utility class created to read the excel test data file before performing the test steps.
* This class loads the excel file and
* reads its column entries.
*
*/
public class ExcelReader {
/**
* The worksheet to read in Excel file
*/
public static Sheet wrksheet;
/**
* The Excel file to read
*/
public static Workbook wrkbook = null;
/**
* Store the column data
*/
public static Hashtable<String, Integer> dict = new Hashtable<String, Integer>();
/**
* Create a Constructor
*
* @param ExcelSheetPath
* @throws BiffException
* @throws WeblivException
*/
public ExcelReader(String ExcelSheetPath) throws IOException, BiffException {
// Initialize
try {
wrkbook = Workbook.getWorkbook(new File(ExcelSheetPath));
wrksheet = wrkbook.getSheet("Sheet1");
} catch (IOException e) {
throw new IOException();
}
}
/**
* Returns the Number of Rows
*
* @return Rows
*/
public static int RowCount() {
return wrksheet.getRows();
}
/**
* Returns the Cell value by taking row and Column values as argument
*
* @param column
* @param row
* @return Cell contents
*/
public static String ReadCell(int column, int row) {
return wrksheet.getCell(column, row).getContents();
}
/**
* Create Column Dictionary to hold all the Column Names
*/
public static void ColumnDictionary() {
// Iterate through all the columns in the Excel sheet and store the
// value in Hashtable
for (int col = 0; col < wrksheet.getColumns(); col++) {
dict.put(ReadCell(col, 0), col);
}
}
/**
* Read Column Names
*
* @param colName
* @return value
*/
public static int GetCell(String colName) {
try {
int value;
value = ((Integer) dict.get(colName)).intValue();
return value;
} catch (NullPointerException e) {
return (0);
}
}
}
Шаг 4: Создаем класс CommonMethods.java и метод, который будет считывать ячейки из файла Excel, используя методы, реализованные в ExcelReader.java.
/**
* Read the test data from excel file
*
* @param data The TestData data object
*/
public void readExcelData (TestData data) {
ArrayList<String> browser = new ArrayList<String>();
ArrayList<String> username = new ArrayList<String>();
ArrayList<String> password = new ArrayList<String>();
ArrayList<String> element1 = new ArrayList<String>();
ArrayList<String> element2 = new ArrayList<String>();
ArrayList<String> element3 = new ArrayList<String>();
// Get the data from excel file
for (int rowCnt = 1; rowCnt < ExcelReader.RowCount(); rowCnt++) {
browser.add(ExcelReader.ReadCell(ExcelReader.GetCell("Browser"), rowCnt));
username.add(ExcelReader.ReadCell(ExcelReader.GetCell("User ID"), rowCnt));
password.add(ExcelReader.ReadCell(ExcelReader.GetCell("Password"), rowCnt));
element1.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element1"), rowCnt));
element2.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element2"), rowCnt));
element3.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element3"), rowCnt));
}
data.setBrowser(browser);
data.setLoginUser(username);
data.setPassword(password);
data.setElement1(element1);
data.setElement2(element2);
data.setElement3(element3);
}
Шаг 5: Создаем новый java-класс TestData.java. Этот класс будет выполнять функции геттеров и сеттеров для данных из Excel:
package Utilities.dataSetters;
import java.util.ArrayList;
public class TestData {
private ArrayList<String> loginUser = null;
private ArrayList<String> password = null;
private ArrayList<String> browser = null;
private ArrayList<String> element1 = null;
private ArrayList<String> element2 = null;
private ArrayList<String> element3 = null;
/**
* @return loginUser
*/
public ArrayList<String> getLoginUser() {
return loginUser;
}
/**
* @param loginUser
*/
public void setLoginUser(ArrayList<String> loginUser) {
this.loginUser = loginUser;
}
/**
* @return password
*/
public ArrayList<String> getPassword() {
return password;
}
/**
* @param password
*/
public void setPassword(ArrayList<String> password) {
this.password = password;
}
/**
* @return browser
*/
public ArrayList<String> getBrowser() {
return browser;
}
/**
* @param browser
*/
public void setBrowser(ArrayList<String> browser) {
this.browser = browser;
}
/**
* @return element1
*/
public ArrayList<String> getElement1() {
return element1;
}
/**
* @param element1
*/
public void setElement1(ArrayList<String> element1) {
this.element1 = element1;
}
/**
* @return element2
*/
public ArrayList<String> getElement2() {
return element2;
}
/**
* @param element2
*/
public void setElement2(ArrayList<String> element2) {
this.element2 = element2;
}
/**
* @return element3
*/
public ArrayList<String> getElement3() {
return element3;
}
/**
* @param element3
*/
public void setElement3(ArrayList<String> element3) {
this.element3 = element3;
}
}
Шаг 6: Следующим шагом будет создание экземпляров классов TestData.java и CommonMethods.java для доступа к тестовым данным. Ниже приведен фрагмент кода для инициализации объекта, чтения данных из файла Excel и заполнения значений там, где это необходимо:
// Create Objects
public ExcelReader excelReaderObj;
CommonMethods commonMethodobj = new CommonMethods();
TestData td = new TestData();
// Load the excel file for testing
excelReaderObj = new ExcelReader(Path of the excel);
// Load the Excel Sheet Col in to Dictionary for use in test cases
excelReaderObj.ColumnDictionary();
// Get the data from excel file
commonMethodobj.readExcelData (td);
// Populate the username
driver.findElement(By.id("idofElement")).sendKeys(data.getLoginUser().get(0));
Заключение:
В этой статье мы рассказали о структуре проекта Selenium и о том, как получить доступ к тестовым данным из файла Excel.
Чтобы получить доступ к тестовым данным, хранящимся во внешнем источнике данных, мы использовали Java Excel API — jxl. Также мы разработали образец кода, который демонстрирует, как читать данные из Excel и вставлять их в тестовые сценарии.
Перевод статьи «Selenium Framework Creation and Accessing Test Data from Excel – Selenium Tutorial #21».