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).
Fordel med maurbygging
- Ant oppretter applikasjonens livssyklus, dvs. rense, kompilere, sette avhengighet, utføre, rapportere, etc.
- Tredjeparts API-avhengighet kan settes av Ant, dvs. andre Jar-filers klassebane er satt av Ant byggefil.
- En komplett applikasjon opprettes for levering og distribusjon fra ende til ende.
- Det er et enkelt byggeverktøy hvor alle konfigurasjoner kan gjøres ved hjelp av XML-fil og som kan utføres fra kommandolinjen.
- 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
Trinn 2) Pakk ut mappen og gå til og kopier banen til roten til den utpakkede mappen
Trinn 3) Gå til Start -> Datamaskin -> høyreklikk her og velg 'Egenskaper' og klikk deretter på Avanserte systeminnstillinger
Trinn 4) Et nytt vindu åpnes. Klikk på 'Environment Variable...'-knappen.
Trinn 5) Klikk på 'Ny...'-knappen og angi variabelnavn som 'ANT_HOME' og variabelverdi som rotbanen til den utpakkede mappen, og klikk OK.
Trinn 6) velg nå 'Path'-variabel fra listen og klikk på 'Rediger' og legg til; %ANT_HOME%\bin.
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
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
Eksempel
Vi vil ta et lite eksempelprogram som vil forklare Ant-funksjonalitet veldig tydelig. Vår prosjektstruktur vil se slik ut –
Her i dette eksemplet har vi 4 mål
- Angi klassebane for eksterne krukker,
- Rengjør tidligere overholdt kode
- Kompiler eksisterende java-kode
- 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>
Hvordan utføres 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
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å.
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:
- Gå til https://demo.guru99.com/test/guru99home/
- Les alle kurslenker én etter én
- 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:
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.