Apache ANT med Selenium: Fullfør opplæringen

Hva er Apache Ant?

Mens du lager et komplett programvareprodukt, må du ta vare på forskjellige tredjeparts API, deres klassesti, rense tidligere kjørbare binære filer, kompilere vår kildekode, utførelse av kildekode, opprettelse av rapporter og distribusjonskodebase etc. Hvis disse oppgavene er gjøres én etter én manuelt, vil det ta enorm tid, og prosessen vil være utsatt for feil.

Her kommer viktigheten av et byggeverktøy som Ant. Den lagrer, utfører og automatiserer alle prosesser i en sekvensiell rekkefølge nevnt i Ants konfigurasjonsfil (vanligvis build.xml).

Apache Ant

Fordel med maurbygging

  1. Ant oppretter applikasjonens livssyklus, dvs. rense, kompilere, sette avhengighet, utføre, rapportere, etc.
  2. Tredjeparts API-avhengighet kan settes av Ant, dvs. andre Jar-filers klassebane er satt av Ant byggefil.
  3. En komplett applikasjon opprettes for levering og distribusjon fra ende til ende.
  4. Det er et enkelt byggeverktøy hvor alle konfigurasjoner kan gjøres ved hjelp av XML-fil og som kan utføres fra kommandolinjen.
  5. Det gjør koden din ren ettersom konfigurasjonen er atskilt fra den faktiske applikasjonslogikken.

Hvordan installere Ant

Trinn for å installere Ant i Windows er som følgende

Trinn 1) Gå til https://ant.apache.org/bindownload.cgi Eller last ned .zip-fil fra apache-ant-1.9.4-bin.zip

Installer Ant

Trinn 2) Pakk ut mappen og gå til og kopier banen til roten til den utpakkede mappen

Installer Ant

Trinn 3) Gå til Start -> Datamaskin -> høyreklikk her og velg 'Egenskaper' og klikk deretter på Avanserte systeminnstillinger

Installer Ant

Trinn 4) Et nytt vindu åpnes. Klikk på 'Environment Variable...'-knappen.

Installer Ant

Trinn 5) Klikk på 'Ny...'-knappen og angi variabelnavn som 'ANT_HOME' og variabelverdi som rotbanen til den utpakkede mappen, og klikk OK.

Installer Ant

Trinn 6) velg nå 'Path'-variabel fra listen og klikk på 'Rediger' og legg til; %ANT_HOME%\bin.

Installer Ant

Start systemet på nytt én gang, og du er klar til å bruke Ant byggeverktøyet nå.

Trinn 7) For å sjekke versjonen av Ant ved hjelp av kommandolinjen:

Maur -versjon

Installer Ant

Forstå Build.xml

Build.xml er den viktigste komponenten i Ant byggeverktøy. For en Java prosjekt, alle oppgaver knyttet til rengjøring, oppsett, kompilering og distribusjon er nevnt i denne filen i XML-format. Når vi kjører denne XML-filen ved hjelp av kommandolinje eller en hvilken som helst IDE-plugin, vil alle instruksjoner som er skrevet i denne filen bli utført på en sekvensiell måte.

La oss forstå koden i et eksempelbygg.XML

  • Prosjekttaggen brukes til å nevne et prosjektnavn og basert attributt. Basedir er rotkatalogen til en applikasjon
    <project name="YTMonetize" basedir=".">
  • Eiendomstagger brukes som variabler i build.XML-filen som skal brukes i videre trinn
<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 koder brukt som trinn som vil utføres i sekvensiell rekkefølge. Navneattributt er navnet på målet. Du kan ha flere mål i en enkelt build.xml
    <target name="setClassPath">
  • path tag brukes til å samle alle filer logisk som er på den vanlige plasseringen
    <path id="classpath_jars">
  • pathelement-taggen vil sette banen til roten til felles plassering der alle filene er lagret
    <pathelement path="${basedir}/"/>
  • pathconvert-tagg som brukes til å konvertere stier til alle vanlige filer inne i path-taggen til systemets klassestiformat
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • fileset-taggen brukes til å angi klassebane for forskjellige tredjepartsjar i prosjektet vårt
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • Ekkotag brukes til å skrive ut tekst på konsollen
<echo message="deleting existing build directory"/>
  • Slett tag vil rense data fra gitt mappe
<delete dir="${build.dir}"/>
  • mkdir-taggen vil opprette en ny katalog
	<mkdir dir="${build.dir}"/>
  • javac-taggen brukes til å kompilere java-kildekoden og flytte .class-filer til en ny mappe
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • jar-taggen vil lage jar-fil fra .class-filer
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • manifest-taggen vil angi hovedklassen din for utførelse
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • «depends»-attributt som brukes til å få ett mål til å avhenge av et annet mål
<target name="run" depends="compile">
  • java-taggen vil utføre hovedfunksjonen fra krukken som er opprettet i kompileringsmålseksjonen
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

Kjør Ant ved hjelp av Eclipse plugg inn

For å kjøre Ant fra Eclipse gå til build.xml-filen -> høyreklikk på filen -> Kjør som... -> klikk Bygg fil

Kjør Ant ved hjelp av Eclipse Plugin

Eksempel

Vi vil ta et lite eksempelprogram som vil forklare Ant-funksjonalitet veldig tydelig. Vår prosjektstruktur vil se slik ut –

Kjør Ant ved hjelp av Eclipse Plugin

Her i dette eksemplet har vi 4 mål

  1. Angi klassebane for eksterne krukker,
  2. Rengjør tidligere overholdt kode
  3. Kompiler eksisterende java-kode
  4. Kjør koden

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

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

Kjør Ant ved hjelp av Eclipse plugg inn

Hvordan utføres TestNG kode ved hjelp av Ant

Henrette TestNG kode ved hjelp av Ant

Her skal vi lage en klasse med Testng metoder og angi klassebane for Testing i build.xml.

For å utføre testng-metoden vil vi opprette en annen testng.xml-fil og kalle denne filen fra build.xml-filen.

Trinn 1) Vi lager en “Guru99AntClass.class” i pakken 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();					
	}		
}		

Trinn 2) Lag et mål for å laste denne klassen 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>

Trinn 3) Opprett 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>

Trinn 4) Opprett Target i Build.xml for å kjøre dette TestNG kode

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

Trinn 5) Den komplette 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>

Trinn 6) Produksjon

Henrette TestNG kode ved hjelp av Ant

Last ned filen ovenfor

Maur med Selenium Webdriver

Så langt har vi lært at ved å bruke ANT kan vi sette alle tredjeparts krukker på et bestemt sted i systemet og sette deres vei for prosjektet vårt. Ved å bruke denne metoden setter vi alle avhengigheter til prosjektet vårt på ett enkelt sted og gjør det mer pålitelig for kompilering, utførelse og distribusjon.

Tilsvarende, for våre testprosjekter som bruker selen, kan vi enkelt nevne selenavhengighet i build.xml, og vi trenger ikke å legge til en klassebane for det manuelt i applikasjonen vår.

Så nå kan du ignorere den nedenfor nevnte tradisjonelle måten å sette klassebaner for prosjekt på.

Maur med Selenium Webdriver

Eksempel:

Vi skal endre det forrige eksemplet

Trinn 1) Sett egenskapen selenium.jars til selenrelatert jar i ressursmappen

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

Trinn 2) I målsetClassPath legger du til selenfilene

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

Trinn 3) Fullfø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>

Trinn 4) Endre nå tidligere opprettet klasse Guru99AntClass.java med ny kode.

Her i dette eksemplet våre trinn ved hjelp av Selenium er:

  1. Gå til https://demo.guru99.com/test/guru99home/
  2. Les alle kurslenker én etter én
  3. Skriv ut alle kurshyperlinker på konsollen.

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

Trinn 5) Etter vellykket utførelse vil utdata se slik ut:

Maur med Selenium Webdriver

Last ned eksempelfilen ovenfor

Sammendrag

Ant er et byggeverktøy for Java.

Ant brukt til kodekompilering, distribusjon, utførelsesprosess.

Ant kan lastes ned fra Apache nettside.

Build.xml-fil som brukes til å konfigurere utførelsesmål ved hjelp av Ant.

Ant kan kjøres fra kommandolinjen eller passende IDE-plugin som eclipse.