Apache ANT med Selenium: Komplett handledning

Vad รคr Apache Ant?

Nรคr man skapar en komplett mjukvaruprodukt mรฅste man ta hand om olika tredjeparts API, deras klassvรคg, rensa tidigare kรถrbara binรคra filer, kompilera vรฅr kรคllkod, kรถra kรคllkod, skapa rapporter och distributionskodbas etc. Om dessa uppgifter รคr gรถrs en efter en manuellt, kommer det att ta enorm tid, och processen kommer att vara benรคgen att gรถra fel.

Hรคr kommer vikten av ett byggverktyg som Ant. Den lagrar, kรถr och automatiserar alla processer i en sekventiell ordning som nรคmns i Ants konfigurationsfil (vanligtvis build.xml).

Apache Ant

Fรถrdelen med myrbygge

  1. Ant skapar applikationens livscykel dvs rengรถr, kompilerar, stรคller in beroende, kรถr, rapporterar, etc.
  2. Tredje parts API-beroende kan stรคllas in av Ant, dvs andra Jar-fils klasssรถkvรคg stรคlls in av Ant byggfil.
  3. En komplett applikation skapas fรถr leverans och implementering frรฅn slut till slut.
  4. Det รคr ett enkelt byggverktyg dรคr alla konfigurationer kan gรถras med hjรคlp av XML-fil och som kan kรถras frรฅn kommandoraden.
  5. Det gรถr din kod ren eftersom konfigurationen รคr skild frรฅn den faktiska applikationslogiken.

Hur man installerar Ant

Steg fรถr att installera Ant i Windows enligt fรถljande

Steg 1) Gรฅ till https://ant.apache.org/bindownload.cgi Eller ladda ner .zip-fil frรฅn apache-ant-1.9.4-bin.zip

Installera Ant

Steg 2) Packa upp mappen och gรฅ till och kopiera sรถkvรคgen till roten av den uppackade mappen

Installera Ant

Steg 3) Gรฅ till Start -> Dator -> hรถgerklicka hรคr och vรคlj "Egenskaper" och klicka sedan pรฅ Avancerade systeminstรคllningar

Installera Ant

Steg 4) Ett nytt fรถnster รถppnas. Klicka pรฅ knappen "Environment Variable...".

Installera Ant

Steg 5) Klicka pรฅ knappen "Ny..." och stรคll in variabelnamnet som "ANT_HOME" och variabelvรคrdet som rotsรถkvรคgen till den uppackade mappen och klicka pรฅ OK.

Installera Ant

Steg 6) vรคlj nu variabeln 'Path' frรฅn listan och klicka pรฅ 'Redigera' och lรคgg till; %ANT_HOME%\bin.

Installera Ant

Starta om systemet en gรฅng och du รคr redo att anvรคnda Ant build-verktyget nu.

Steg 7) Sรฅ hรคr kontrollerar du versionen av din Ant med kommandoraden:

Myra -version

Installera Ant

Fรถrstรฅ Build.xml

Build.xml รคr den viktigaste komponenten i Ant byggverktyget. Fรถr en Java projekt, all rensning, installation, kompilering och distributionsrelaterade uppgifter nรคmns i denna fil i XML-format. Nรคr vi kรถr den hรคr XML-filen med hjรคlp av kommandoraden eller nรฅgon IDE-plugin, kommer alla instruktioner som skrivs in i den hรคr filen att exekveras pรฅ ett sekventiellt sรคtt.

Lรฅt oss fรถrstรฅ koden i ett exempel pรฅ build.XML

  • Projekttaggen anvรคnds fรถr att nรคmna ett projektnamn och baserat attribut. Basedir รคr rotkatalogen fรถr ett program
    <project name="YTMonetize" basedir=".">
  • Egenskapstaggar anvรคnds som variabler i build.XML-filen som ska anvรคndas i ytterligare steg
<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 taggar som anvรคnds som steg som kommer att kรถras i sekventiell ordning. Namnattribut รคr namnet pรฅ mรฅlet. Du kan ha flera mรฅl i en enda build.xml
    <target name="setClassPath">
  • path tag anvรคnds fรถr att bunta alla filer logiskt som finns pรฅ den gemensamma platsen
    <path id="classpath_jars">
  • pathelement-taggen kommer att stรคlla in sรถkvรคgen till roten av den gemensamma platsen dรคr alla filer lagras
    <pathelement path="${basedir}/"/>
  • pathconvert-tagg som anvรคnds fรถr att konvertera sรถkvรคgar fรถr alla vanliga filer inuti sรถkvรคgstaggen till systemets klassvรคgsformat
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • fileset-taggen som anvรคnds fรถr att stรคlla in klasssรถkvรคg fรถr olika tredjepartsjar i vรฅrt projekt
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • Echo-tagg anvรคnds fรถr att skriva ut text pรฅ konsolen
<echo message="deleting existing build directory"/>
  • Ta bort taggen rensar data frรฅn given mapp
<delete dir="${build.dir}"/>
  • mkdir-taggen skapar en ny katalog
	<mkdir dir="${build.dir}"/>
  • javac-tagg som anvรคnds fรถr att kompilera java-kรคllkod och flytta .class-filer till en ny mapp
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • jar-taggen kommer att skapa jar-fil frรฅn .class-filer
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • manifest-taggen kommer att stรคlla in din huvudklass fรถr exekvering
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • "beror"-attribut som anvรคnds fรถr att gรถra ett mรฅl beroende av ett annat mรฅl
<target name="run" depends="compile">
  • java-taggen kommer att utfรถra huvudfunktionen frรฅn burken som skapats i kompileringsmรฅlsektionen
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

Kรถr Ant med Eclipse plugin

Fรถr att kรถra Ant frรฅn eclipse gรฅ till filen build.xml -> hรถgerklicka pรฅ filen -> Kรถr som... -> klicka pรฅ Bygg fil

Kรถr Ant med Eclipse Insticksmodulen

Exempelvis

Vi kommer att ta ett litet exempelprogram som kommer att fรถrklara Ant-funktionalitet mycket tydligt. Vรฅr projektstruktur kommer att se ut som -

Kรถr Ant med Eclipse Insticksmodulen

Hรคr i detta exempel har vi 4 mรฅl

  1. Stรคll in klasssรถkvรคg fรถr externa burkar,
  2. Rengรถr tidigare uppfylld kod
  3. Kompilera befintlig java-kod
  4. Kรถr koden

Guru99AntClass.klass

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>				

Kรถr Ant med Eclipse plugin

Hur man utfรถr TestNG kod med Ant

Utfรถrande TestNG kod med Ant

Hรคr ska vi skapa en klass med Testng metoder och ange klassvรคg fรถr Testning i build.xml.

Fรถr att nu kรถra testng-metoden kommer vi att skapa en annan testng.xml-fil och anropa den hรคr filen frรฅn build.xml-filen.

Steg 1) Vi skapar en "Guru99AntClass.klassโ€ i paketet testAnt

Guru99AntClass.klass

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();					
	}		
}		

Steg 2) Skapa ett mรฅl fรถr att ladda denna klass i 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>

Steg 3) Skapa 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>

Steg 4) Skapa Target i Build.xml fรถr att kรถra detta TestNG koda

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

Steg 5) Den kompletta 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>

Steg 6) Produktion

Utfรถrande TestNG kod med Ant

Ladda ner filen ovan

Myra med Selenium Webdriver

Hittills har vi lรคrt oss att med ANT kan vi placera alla burkar frรฅn tredje part pรฅ en viss plats i systemet och ange deras vรคg fรถr vรฅrt projekt. Med den hรคr metoden sรคtter vi alla beroenden av vรฅrt projekt pรฅ en enda plats och gรถr det mer tillfรถrlitligt fรถr kompilering, exekvering och distribution.

Pรฅ liknande sรคtt, fรถr vรฅra testprojekt som anvรคnder selen, kan vi enkelt nรคmna selenberoende i build.xml och vi behรถver inte lรคgga till en klasssรถkvรคg fรถr det manuellt i vรฅr applikation.

Sรฅ nu kan du ignorera nedan nรคmnda traditionella sรคtt att stรคlla in klassvรคgar fรถr projekt.

Myra med Selenium Webdriver

Exempel:

Vi kommer att modifiera det fรถregรฅende exemplet

Steg 1) Stรคll in egenskapen selenium.jars till selenrelaterad jar i resursmappen

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

Steg 2) Lรคgg till selenfilerna i mรฅlet 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>		

Steg 3) Slutfรถr 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>

Steg 4) ร„ndra nu den tidigare skapade klassen Guru99AntClass.java med ny kod.

Hรคr i detta exempel vรฅra steg med hjรคlp av Selenium รคr:

  1. Gรฅ till https://demo.guru99.com/test/guru99home/
  2. Lรคs alla kurslรคnkar en efter en
  3. Skriv ut alla kurser hyperlรคnkar pรฅ konsolen.

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"));
      	  }
		}
}		

Steg 5) Efter framgรฅngsrik kรถrning kommer utdata att se ut sรฅ hรคr:

Myra med Selenium Webdriver

Ladda ner exempelfilen ovan

Sammanfattning

Ant รคr ett byggverktyg fรถr Java.

Ant anvรคnds fรถr kodkompilering, distribution, exekveringsprocess.

Ant kan laddas ner frรฅn Apache webbsajt.

Build.xml-fil som anvรคnds fรถr att konfigurera exekveringsmรฅl med Ant.

Ant kan kรถras frรฅn kommandoraden eller lรคmplig IDE-plugin som eclipse.

Sammanfatta detta inlรคgg med: