Apache ANT с Selenium: Повний підручник
Що таке Apache Ant?
Під час створення повного програмного продукту потрібно подбати про різні API сторонніх розробників, їхній шлях до класів, очищення попередніх виконуваних двійкових файлів, компіляцію нашого вихідного коду, виконання вихідного коду, створення звітів та бази коду розгортання тощо. Якщо ці завдання виконувати один за одним вручну, це займе величезний час, і процес буде схильний до помилок.
Тут виникає важливість такого інструменту створення, як Ant. Він зберігає, виконує та автоматизує всі процеси в послідовному порядку, зазначеному у файлі конфігурації Ant (зазвичай build.xml).
Перевага збірки Ant
- Ant створює життєвий цикл програми, тобто очищає, компілює, встановлює залежність, виконує, звітує тощо.
- Залежність стороннього API може встановлювати Ant, тобто шлях до класу іншого файлу Jar встановлюється файлом збірки Ant.
- Створено повну програму для наскрізної доставки та розгортання.
- Це простий інструмент збирання, де всі конфігурації можна виконати за допомогою файлу XML і який можна виконати з командного рядка.
- Це робить ваш код чистим, оскільки конфігурація відокремлена від фактичної логіки програми.
Як встановити Ant
Кроки для встановлення Ant Windows полягає в наступному
Крок 1) Відкрийте https://ant.apache.org/bindownload.cgi Або завантажте файл .zip із apache-ant-1.9.4-bin.zip
Крок 2) Розархівуйте папку, перейдіть і скопіюйте шлях до кореня розархівованої папки
Крок 3) Перейдіть до «Пуск» -> «Комп'ютер» -> клацніть тут правою кнопкою миші та виберіть «Властивості», а потім натисніть «Додаткові параметри системи».
Крок 4) Відкриється нове вікно. Натисніть кнопку «Змінна середовища…».
Крок 5) Натисніть кнопку «Новий…» і встановіть назву змінної як «ANT_HOME», а значення змінної — як кореневий шлях до розархівованої папки та натисніть «ОК».
Крок 6) тепер виберіть зі списку змінну «Шлях», натисніть «Редагувати» та додайте; %ANT_HOME%\bin.
Перезапустіть систему один раз, і ви готові використовувати інструмент збірки Ant.
Крок 7) Щоб перевірити версію вашого Ant за допомогою командного рядка:
Ant – версія
Розуміння Build.xml
Build.xml є найважливішим компонентом інструменту збірки Ant. Для Java проекту, усі завдання, пов’язані з очищенням, налаштуванням, компіляцією та розгортанням, згадуються в цьому файлі у форматі XML. Коли ми виконуємо цей файл XML за допомогою командного рядка або будь-якого плагіна IDE, усі інструкції, записані в цей файл, виконуватимуться послідовно.
Давайте розберемося з кодом у прикладі build.XML
-
Тег проекту використовується для згадування назви проекту та атрибута basedir. Basedir — це кореневий каталог програми
<project name="YTMonetize" basedir=".">
- Теги властивостей використовуються як змінні у файлі build.XML для подальшого використання
<property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/>
- Target теги, що використовуються як кроки, які виконуватимуться в послідовному порядку. Атрибут Name - це ім'я цілі. Ви можете мати кілька цілей в одному файлі build.xml
<target name="setClassPath">
- Тег шляху використовується для логічного об’єднання всіх файлів, які знаходяться в спільному місці
<path id="classpath_jars">
- тег pathelement встановить шлях до кореня загального розташування, де зберігаються всі файли
<pathelement path="${basedir}/"/>
- тег pathconvert, який використовується для перетворення шляхів усіх звичайних файлів усередині тегу path у системний формат classpath
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- тег набору файлів, який використовується для встановлення шляху до класів для різних сторонніх jar у нашому проекті
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- Ехо-тег використовується для друку тексту на консолі
<echo message="deleting existing build directory"/>
- Видалити тег видалить дані з даної папки
<delete dir="${build.dir}"/>
- тег mkdir створить новий каталог
<mkdir dir="${build.dir}"/>
- тег javac, який використовується для компіляції вихідного коду Java та переміщення файлів .class до нової папки
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- тег jar створить файл jar із файлів .class
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- тег manifest встановить ваш основний клас для виконання
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Атрибут 'depends', який використовується, щоб зробити одну ціль залежною від іншої
<target name="run" depends="compile">
- Тег java виконає основну функцію з jar, створеного в цільовому розділі компіляції
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Запустіть Ant за допомогою Eclipse підключати
Щоб запустити Ant із eclipse, перейдіть до файлу build.xml -> клацніть файл правою кнопкою миші -> Запустити як… -> натисніть Файл збірки
Приклад
Ми візьмемо невеликий приклад програми, яка дуже чітко пояснює функціональність Ant. Структура нашого проекту виглядатиме так:
У цьому прикладі ми маємо 4 цілі
- Встановити шлях класу для зовнішніх банок,
- Очистіть попередньо відповідний код
- Скомпілюйте існуючий код Java
- Запустіть код
Guru99AntClass.class
package testAnt; import java.util.Date; public class Guru99AntClass { public static void main(String...s){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and < a name=OLE_LINK1 >'depends' attribute used to make one target to depend on another target --> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> </path> <pathconvert pathsep=";"property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> <!--jar tag will create jar file from .class files--> <jar destfile="${ytoperation.dir}/YTOperation.jar"basedir="${build.dir}"> <!--manifest tag will set your main class for execution--> <manifest> <attribute name="Main-Class" value="testAnt.Guru99AntClass"/> </manifest> </jar> </target> <target name="run" depends="compile"> <!--java tag will execute main function from the jar created in compile target section--> <java jar="${ytoperation.dir}/YTOperation.jar"fork="true"/> </target> </project>
Як виконати TestNG код за допомогою Ant
Тут ми створимо клас із Testng методи та встановити шлях до класу для Тестування у build.xml.
Тепер, щоб виконати метод testng, ми створимо інший файл testng.xml і викличемо цей файл із файлу build.xml.
Крок 1) Ми створюємо “Guru99AntClass.class” в упаковці testAnt
Guru99AntClass.class
package testAnt; import java.util.Date; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Крок 2) Створіть ціль для завантаження цього класу в Build.xml
<!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <!—using taskdef tag we can add a task to run on the current project. In below line, we are adding testing task in this project. Using testing task here now we can run testing code using the ant script --> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target>
Крок 3) Створіть testng.xml
testng.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="YT"thread-count="1"> <test name="GURU99TestNGAnt"> <classes> <class name="testAnt.Guru99AntClass"> </class> </classes> </test> </suite>
Крок 4) Створювати Target у Build.xml, щоб запустити це TestNG код
<target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file. Here classpath attribute is setting classpath for testng's jar to the project--> <testng classpath="${test.classpath};${build.dir}"> <!—xmlfileset tag is used here to run testng's code using testing.xml file. Using includes tag we are mentioning path to testing.xml file--> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng>
Крок 5) Повний Build.xml
<?xml version="1.0"encoding="UTF-8"standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir"value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG"depends="setClassPath"> <taskdef resource="testngtasks"classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> </path> <pathconvert pathsep=";"property="test.classpath"refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile"depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt"depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}"includes="testng.xml"/> </testng> </target> </project>
Крок 6) Вихід
Мураха с Selenium Веб-драйвер
Наразі ми дізналися, що за допомогою ANT ми можемо розмістити всі jar-файли сторонніх розробників у певному місці системи та встановити їхній шлях для нашого проекту. Використовуючи цей метод, ми встановлюємо всі залежності нашого проекту в одному місці та робимо його більш надійним для компіляції, виконання та розгортання.
Подібним чином, для наших проектів тестування, що використовують селен, ми можемо легко згадати залежність селену в build.xml, і нам не потрібно додавати шлях до цього класу вручну в нашій програмі.
Тож тепер ви можете ігнорувати згаданий нижче традиційний спосіб встановлення шляхів до класів для проекту.
приклад:
Ми збираємося змінити попередній приклад
Крок 1) Установіть для властивості selenium.jars значення selenium-related jar у папці ресурсів
<property name="selenium.jars" value=".\selenium"/>
Крок 2) У цільовий setClassPath додайте файли селену
<target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}" includes="*.jar"/> </path>
Крок 3) Повний Build.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <!-- put selenium related jar in resource folder --> <property name="selenium.jars" value=".\selenium"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}"includes="*.jar"/> </path> <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng> </target> </project>
Крок 4) Тепер змініть раніше створений клас Guru99AntClass.java новим кодом.
У цьому прикладі ми використовуємо кроки Selenium є:
- Відкрийте
http://demo.guru99.com/test/guru99home/
- Прочитайте посилання на всі курси одне за іншим
- Роздрукувати гіперпосилання на всі курси на консолі.
Guru99AntClass.java:
package testAnt; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ WebDriver driver = new FirefoxDriver(); driver.get("http://demo.guru99.com/test/guru99home/"); List<WebElement> listAllCourseLinks = driver.findElements(By.xpath("//div[@class='canvas-middle']//a")); for(WebElement webElement : listAllCourseLinks) { System.out.println(webElement.getAttribute("href")); } } }
Крок 5) Після успішного виконання вихід матиме такий вигляд:
Завантажте наведений вище файл прикладу
Підсумки
Ant — це інструмент для створення Java.
Ant використовується для компіляції коду, розгортання, процесу виконання.
Ant можна завантажити з Apache .
Файл Build.xml, який використовується для налаштування цілей виконання за допомогою Ant.
Ant можна запустити з командного рядка або відповідного плагіна IDE, наприклад eclipse.