Apache ANT cu Selenium: Tutorial complet

Ce este Apache Ant?

รŽn timp ce creaศ›i un produs software complet, trebuie sฤƒ aveศ›i grijฤƒ de diferitele API-uri terศ›ฤƒ parte, calea lor de clasฤƒ, curฤƒศ›area fiศ™ierelor binare executabile anterioare, compilarea codului nostru sursฤƒ, execuศ›ia codului sursฤƒ, crearea de rapoarte ศ™i baza de cod de implementare etc. Dacฤƒ aceste sarcini sunt fฤƒcut unul cรขte unul manual, va dura un timp enorm, iar procesul va fi predispus la erori.

Aici intervine importanศ›a unui instrument de construcศ›ie precum Ant. Stocheazฤƒ, executฤƒ ศ™i automatizeazฤƒ toate procesele รฎntr-o ordine secvenศ›ialฤƒ menศ›ionatฤƒ รฎn fiศ™ierul de configurare al lui Ant (de obicei build.xml).

Apache Ant

Beneficiul Ant build

  1. Ant creeazฤƒ ciclul de viaศ›ฤƒ al aplicaศ›iei, adicฤƒ curฤƒศ›aศ›i, compilaศ›i, setaศ›i dependenศ›a, executaศ›i, raportaศ›i etc.
  2. Dependenศ›a API-ului terศ›ฤƒ parte poate fi setatฤƒ de Ant, adicฤƒ calea de clasฤƒ a altui fiศ™ier Jar este setatฤƒ de fiศ™ierul de compilare Ant.
  3. Este creatฤƒ o aplicaศ›ie completฤƒ pentru livrarea ศ™i implementarea End to End.
  4. Este un instrument simplu de construcศ›ie รฎn care toate configuraศ›iile pot fi fฤƒcute folosind fiศ™ierul XML ศ™i care poate fi executat din linia de comandฤƒ.
  5. Vฤƒ face codul curat, deoarece configuraศ›ia este separatฤƒ de logica realฤƒ a aplicaศ›iei.

Cum se instaleazฤƒ Ant

Paศ™i pentru a instala Ant รฎn Windows este dupฤƒ cum urmeazฤƒ

Pas 1) Acceseazฤƒ https://ant.apache.org/bindownload.cgi Sau Descฤƒrcaศ›i fiศ™ierul .zip de la apache-ant-1.9.4-bin.zip

Instalaศ›i Ant

Pas 2) Dezarhivaศ›i folderul ศ™i accesaศ›i ศ™i copiaศ›i calea la rฤƒdฤƒcina folderului dezarhivat

Instalaศ›i Ant

Pas 3) Accesaศ›i Start -> Computer -> faceศ›i clic dreapta aici ศ™i selectaศ›i โ€žProprietฤƒศ›iโ€, apoi faceศ›i clic pe Setฤƒri avansate de sistem

Instalaศ›i Ant

Pas 4) Se deschide o nouฤƒ fereastrฤƒ. Faceศ›i clic pe butonul โ€žVariabilฤƒ de mediuโ€ฆโ€.

Instalaศ›i Ant

Pas 5) Faceศ›i clic pe butonul โ€žNouโ€ฆโ€ ศ™i setaศ›i numele variabilei ca โ€žANT_HOMEโ€ ศ™i valoarea variabilei ca cale rฤƒdฤƒcinฤƒ cฤƒtre folderul dezarhivat ศ™i faceศ›i clic pe OK.

Instalaศ›i Ant

Pas 6) acum selectaศ›i variabila โ€žCaleโ€ din listฤƒ ศ™i faceศ›i clic pe โ€žEditareโ€ ศ™i adฤƒugaศ›i; %ANT_HOME%\bin.

Instalaศ›i Ant

Reporniศ›i sistemul o datฤƒ ศ™i sunteศ›i gata sฤƒ utilizaศ›i instrumentul Ant build acum.

Pas 7) Pentru a verifica versiunea Ant folosind linia de comandฤƒ:

Ant โ€“ versiune

Instalaศ›i Ant

รŽnศ›elegerea Build.xml

Build.xml este cea mai importantฤƒ componentฤƒ a instrumentului Ant build. Pentru o Java proiect, toate sarcinile legate de curฤƒศ›are, configurare, compilare ศ™i implementare sunt menศ›ionate รฎn acest fiศ™ier รฎn format XML. Cรขnd executฤƒm acest fiศ™ier XML folosind linia de comandฤƒ sau orice plugin IDE, toate instrucศ›iunile scrise รฎn acest fiศ™ier vor fi executate รฎn mod secvenลฃial.

Sฤƒ รฎnศ›elegem codul dintr-un exemplu de build.XML

  • Eticheta de proiect este folositฤƒ pentru a menศ›iona un nume de proiect ศ™i un atribut basedir. Basedir este directorul rฤƒdฤƒcinฤƒ al unei aplicaศ›ii
    <project name="YTMonetize" basedir=".">
  • Etichetele de proprietate sunt folosite ca variabile รฎn fiศ™ierul build.XML pentru a fi utilizate รฎn paศ™ii ulterioare
<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 etichete utilizate ca paศ™i care se vor executa รฎn ordine secvenศ›ialฤƒ. Atributul nume este numele ศ›intei. Puteศ›i avea mai multe ศ›inte รฎntr-un singur build.xml
    <target name="setClassPath">
  • eticheta path este folositฤƒ pentru a grupa toate fiศ™ierele care se aflฤƒ รฎn locaศ›ia comunฤƒ
    <path id="classpath_jars">
  • Eticheta pathelement va seta calea cฤƒtre rฤƒdฤƒcina locaศ›iei comune รฎn care sunt stocate toate fiศ™ierele
    <pathelement path="${basedir}/"/>
  • Eticheta pathconvert folositฤƒ pentru a converti cฤƒile tuturor fiศ™ierelor comune din interiorul etichetei cale รฎn formatul classpath al sistemului
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • Eticheta set de fiศ™iere folositฤƒ pentru a seta classpath pentru diferite jar terศ›e din proiectul nostru
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • Eticheta Echo este folositฤƒ pentru a imprima text pe consolฤƒ
<echo message="deleting existing build directory"/>
  • ศ˜tergeศ›i eticheta va ศ™terge datele din folderul dat
<delete dir="${build.dir}"/>
  • Tag-ul mkdir va crea un director nou
	<mkdir dir="${build.dir}"/>
  • Eticheta javac folositฤƒ pentru a compila codul sursฤƒ java ศ™i pentru a muta fiศ™ierele .class รฎntr-un folder nou
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • jar tag va crea fiศ™ierul jar din fiศ™ierele .class
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • Eticheta manifest va seta clasa principalฤƒ pentru execuศ›ie
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • Atributul โ€ždepindeโ€ folosit pentru ca o ศ›intฤƒ sฤƒ depindฤƒ de o altฤƒ ศ›intฤƒ
<target name="run" depends="compile">
  • Tag-ul java va executa funcศ›ia principalฤƒ din jarul creat รฎn secศ›iunea ศ›intฤƒ de compilare
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

Rulaศ›i Ant folosind Eclipse conecteaza

Pentru a rula Ant din eclipse, accesaศ›i fiศ™ierul build.xml -> faceศ›i clic dreapta pe fiศ™ier -> Executaศ›i ca... -> faceศ›i clic pe Build file

Rulaศ›i Ant folosind Eclipse Plugin

Exemplu

Vom lua un mic exemplu de program care va explica foarte clar funcศ›ionalitatea Ant. Structura proiectului nostru va arฤƒta astfel:

Rulaศ›i Ant folosind Eclipse Plugin

Aici, รฎn acest exemplu, avem 4 ศ›inte

  1. Setaศ›i calea clasei pentru borcanele externe,
  2. Curฤƒศ›aศ›i codul respectat anterior
  3. Compilaศ›i codul java existent
  4. Rulaศ›i codul

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>				

Rulaศ›i Ant folosind Eclipse conecteaza

Cum se executฤƒ TestNG cod folosind Ant

Executa TestNG cod folosind Ant

Aici vom crea o clasฤƒ cu Testng metode ศ™i setaศ›i calea clasei pentru Testarea รฎn build.xml.

Acum, pentru a executa metoda testng, vom crea un alt fiศ™ier testng.xml ศ™i vom apela acest fiศ™ier din fiศ™ierul build.xml.

Pas 1) Creฤƒm un โ€žGuru99AntClass.classโ€ in pachet 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();					
	}		
}		

Pasul 2) Creaศ›i o ศ›intฤƒ pentru a รฎncฤƒrca aceastฤƒ clasฤƒ รฎn 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>

Pas 3) Creaศ›i 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>

Pas 4) Creazฤƒ Target รฎn Build.xml pentru a rula acest lucru TestNG cod

<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>				

Pas 5) Build.xml complet

<?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>

Pas 6) producศ›ie

Executa TestNG cod folosind Ant

Descฤƒrcaศ›i fiศ™ierul de mai sus

Furnica cu Selenium Webdriver

Pรขnฤƒ acum, am รฎnvฤƒศ›at cฤƒ folosind ANT putem pune toate borcanele terศ›ilor รฎntr-o anumitฤƒ locaศ›ie din sistem ศ™i le putem stabili calea pentru proiectul nostru. Folosind aceastฤƒ metodฤƒ, setฤƒm toate dependenศ›ele proiectului nostru รฎntr-un singur loc ศ™i รฎl facem mai fiabil pentru compilare, execuศ›ie ศ™i implementare.

รŽn mod similar, pentru proiectele noastre de testare care utilizeazฤƒ seleniu, putem menศ›iona cu uศ™urinศ›ฤƒ dependenศ›a de seleniu รฎn build.xml ศ™i nu este nevoie sฤƒ adฤƒugฤƒm manual o cale de clasฤƒ a acesteia รฎn aplicaศ›ia noastrฤƒ.

Deci, acum puteศ›i ignora modul tradiศ›ional menศ›ionat mai jos de a seta cฤƒile de clasฤƒ pentru proiect.

Furnica cu Selenium Webdriver

Exemplu:

Vom modifica exemplul anterior

Pas 1) Setaศ›i proprietatea selenium.jars la borcanul legat de seleniu รฎn folderul de resurse

		<property name="selenium.jars" value=".\selenium"/>

Pas 2) รŽn setClassPath ศ›intฤƒ, adฤƒugaศ›i fiศ™ierele cu seleniu

<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>		

Pas 3) Completeazฤƒ 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>

Pas 4) Acum schimbaศ›i clasa creatฤƒ anterior Guru99AntClass.java cu cod nou.

Iatฤƒ รฎn acest exemplu paศ™ii noศ™tri folosind Selenium sunt:

  1. Acceseazฤƒ https://demo.guru99.com/test/guru99home/
  2. Citiศ›i link-urile tuturor cursurilor unul cรขte unul
  3. Imprimaศ›i hyperlinkul tuturor cursurilor pe consolฤƒ.

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("https://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"));
      	  }
		}
}		

Pas 5) Dupฤƒ execuศ›ia cu succes, rezultatul va arฤƒta astfel:

Furnica cu Selenium Webdriver

Descฤƒrcaศ›i fiศ™ierul exemplu de mai sus

Rezumat

Ant este un instrument de construcศ›ie pentru Java.

Ant folosit pentru compilarea codului, implementare, proces de execuศ›ie.

Ant poate fi descฤƒrcat de pe Apache site-ul web.

Fiศ™ierul Build.xml utilizat pentru a configura ศ›inte de execuศ›ie folosind Ant.

Ant poate fi rulat din linia de comandฤƒ sau din pluginul IDE adecvat, cum ar fi Eclipse.

Rezumaศ›i aceastฤƒ postare cu: