Apache ANT с Selenium: Повний підручник

Що таке Apache Ant?

Під час створення повного програмного продукту потрібно подбати про різні API сторонніх розробників, їхній шлях до класів, очищення попередніх виконуваних двійкових файлів, компіляцію нашого вихідного коду, виконання вихідного коду, створення звітів та бази коду розгортання тощо. Якщо ці завдання виконувати один за одним вручну, це займе величезний час, і процес буде схильний до помилок.

Тут виникає важливість такого інструменту створення, як Ant. Він зберігає, виконує та автоматизує всі процеси в послідовному порядку, зазначеному у файлі конфігурації Ant (зазвичай build.xml).

Апач Мураха

Перевага збірки Ant

  1. Ant створює життєвий цикл програми, тобто очищає, компілює, встановлює залежність, виконує, звітує тощо.
  2. Залежність стороннього API може встановлювати Ant, тобто шлях до класу іншого файлу Jar встановлюється файлом збірки Ant.
  3. Створено повну програму для наскрізної доставки та розгортання.
  4. Це простий інструмент збирання, де всі конфігурації можна виконати за допомогою файлу XML і який можна виконати з командного рядка.
  5. Це робить ваш код чистим, оскільки конфігурація відокремлена від фактичної логіки програми.

Як встановити Ant

Кроки для встановлення Ant Windows полягає в наступному

Крок 1) Відкрийте https://ant.apache.org/bindownload.cgi Або завантажте файл .zip із apache-ant-1.9.4-bin.zip

Встановити Ant

Крок 2) Розархівуйте папку, перейдіть і скопіюйте шлях до кореня розархівованої папки

Встановити Ant

Крок 3) Перейдіть до «Пуск» -> «Комп'ютер» -> клацніть тут правою кнопкою миші та виберіть «Властивості», а потім натисніть «Додаткові параметри системи».

Встановити Ant

Крок 4) Відкриється нове вікно. Натисніть кнопку «Змінна середовища…».

Встановити Ant

Крок 5) Натисніть кнопку «Новий…» і встановіть назву змінної як «ANT_HOME», а значення змінної — як кореневий шлях до розархівованої папки та натисніть «ОК».

Встановити Ant

Крок 6) тепер виберіть зі списку змінну «Шлях», натисніть «Редагувати» та додайте; %ANT_HOME%\bin.

Встановити Ant

Перезапустіть систему один раз, і ви готові використовувати інструмент збірки Ant.

Крок 7) Щоб перевірити версію вашого Ant за допомогою командного рядка:

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 за допомогою Eclipse Підключати

Приклад

Ми візьмемо невеликий приклад програми, яка дуже чітко пояснює функціональність Ant. Структура нашого проекту виглядатиме так:

Запустіть Ant за допомогою Eclipse Підключати

У цьому прикладі ми маємо 4 цілі

  1. Встановити шлях класу для зовнішніх банок,
  2. Очистіть попередньо відповідний код
  3. Скомпілюйте існуючий код Java
  4. Запустіть код

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>				

Запустіть Ant за допомогою Eclipse підключати

Як виконати TestNG код за допомогою Ant

Виконати 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) Вихід

Виконати TestNG код за допомогою Ant

Завантажте файл вище

Мураха с Selenium Веб-драйвер

Наразі ми дізналися, що за допомогою ANT ми можемо розмістити всі jar-файли сторонніх розробників у певному місці системи та встановити їхній шлях для нашого проекту. Використовуючи цей метод, ми встановлюємо всі залежності нашого проекту в одному місці та робимо його більш надійним для компіляції, виконання та розгортання.

Подібним чином, для наших проектів тестування, що використовують селен, ми можемо легко згадати залежність селену в build.xml, і нам не потрібно додавати шлях до цього класу вручну в нашій програмі.

Тож тепер ви можете ігнорувати згаданий нижче традиційний спосіб встановлення шляхів до класів для проекту.

Мураха с Selenium Веб-драйвер

приклад:

Ми збираємося змінити попередній приклад

Крок 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 є:

  1. Відкрийте http://demo.guru99.com/test/guru99home/
  2. Прочитайте посилання на всі курси одне за іншим
  3. Роздрукувати гіперпосилання на всі курси на консолі.

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) Після успішного виконання вихід матиме такий вигляд:

Мураха с Selenium Веб-драйвер

Завантажте наведений вище файл прикладу

Підсумки

Ant — це інструмент для створення Java.

Ant використовується для компіляції коду, розгортання, процесу виконання.

Ant можна завантажити з Apache .

Файл Build.xml, який використовується для налаштування цілей виконання за допомогою Ant.

Ant можна запустити з командного рядка або відповідного плагіна IDE, наприклад eclipse.