Создание Selenium Framework

В этой статье мы рассмотрим структуру проекта 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».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *