Apache ANT s Selenium: Kompletní návod
Co je Apache Ant?
Při vytváření kompletního softwarového produktu je třeba se postarat o různá API třetích stran, jejich třídu, čištění předchozích spustitelných binárních souborů, kompilaci našeho zdrojového kódu, spouštění zdrojového kódu, vytváření sestav a základnu kódu nasazení atd. Pokud jsou tyto úkoly provedené jeden po druhém ručně, bude to trvat enormně dlouho a proces bude náchylný k chybám.
Zde přichází na důležitost stavebního nástroje, jako je Ant. Ukládá, spouští a automatizuje všechny procesy v sekvenčním pořadí uvedeném v konfiguračním souboru Ant (obvykle build.xml).
Výhoda stavby Ant
- Ant vytváří životní cyklus aplikace, tj. čistí, kompiluje, nastavuje závislost, spouští, hlásí atd.
- Závislost API třetí strany může být nastavena Antem, tj. cesta ke třídě jiného souboru Jar je nastavena souborem sestavení Ant.
- Je vytvořena kompletní aplikace pro end-to-end doručení a nasazení.
- Jedná se o jednoduchý nástroj pro sestavení, kde lze všechny konfigurace provádět pomocí souboru XML a který lze spouštět z příkazové řádky.
- Díky tomu je váš kód čistý, protože konfigurace je oddělená od skutečné aplikační logiky.
Jak nainstalovat Ant
Kroky k instalaci Ant Windows je následující
Krok 1) Přejít https://ant.apache.org/bindownload.cgi Nebo si stáhněte soubor .zip z apache-ant-1.9.4-bin.zip
Krok 2) Rozbalte složku a přejděte na a zkopírujte cestu do kořenového adresáře rozbalené složky
Krok 3) Přejděte na Start -> Počítač -> klikněte pravým tlačítkem sem a vyberte 'Vlastnosti' a poté klikněte na Pokročilá nastavení systému
Krok 4) Otevře se nové okno. Klikněte na tlačítko „Proměnná prostředí…“.
Krok 5) Klikněte na tlačítko „Nový…“ a nastavte název proměnné jako „ANT_HOME“ a hodnotu proměnné jako kořenovou cestu k rozbalené složce a klikněte na OK.
Krok 6) nyní vyberte proměnnou 'Cesta' ze seznamu a klikněte na 'Upravit' a přidejte; %ANT_HOME%\bin.
Restartujte systém jednou a nyní jste připraveni používat nástroj Ant builder.
Krok 7) Chcete-li zkontrolovat verzi vašeho Ant pomocí příkazového řádku:
Ant – verze
Vysvětlení Build.xml
Build.xml je nejdůležitější součástí nástroje Ant build. Pro Java projekt, všechny úkoly související s čištěním, nastavením, kompilací a nasazením jsou uvedeny v tomto souboru ve formátu XML. Když spustíme tento soubor XML pomocí příkazového řádku nebo jakéhokoli pluginu IDE, všechny instrukce zapsané do tohoto souboru se provedou postupně.
Pojďme pochopit kód v ukázkovém build.XML
-
Značka projektu se používá k uvedení názvu projektu a atributu basedir. Basedir je kořenový adresář aplikace
<project name="YTMonetize" basedir=".">
- Značky vlastností se používají jako proměnné v souboru build.XML, které lze použít v dalších krocích
<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 značky používané jako kroky, které se provedou v sekvenčním pořadí. Atribut Name je název cíle. V jednom souboru build.xml můžete mít více cílů
<target name="setClassPath">
- tag path se používá k logickému seskupování všech souborů, které jsou ve společném umístění
<path id="classpath_jars">
- tag pathelement nastaví cestu ke kořenovému adresáři společného umístění, kde jsou uloženy všechny soubory
<pathelement path="${basedir}/"/>
- pathconvert tag používaný k převodu cest všech běžných souborů uvnitř tagu path do formátu classpath systému
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- fileset tag používaný k nastavení classpath pro různé jar třetí strany v našem projektu
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- Echo tag se používá k tisku textu na konzoli
<echo message="deleting existing build directory"/>
- Smazat tag vymaže data z dané složky
<delete dir="${build.dir}"/>
- Značka mkdir vytvoří nový adresář
<mkdir dir="${build.dir}"/>
- javac tag používaný ke kompilaci zdrojového kódu Java a přesunutí souborů .class do nové složky
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- jar tag vytvoří jar soubor ze souborů .class
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- manifest nastaví vaši hlavní třídu pro spuštění
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Atribut 'depends' používaný k tomu, aby byl jeden cíl závislý na jiném cíli
<target name="run" depends="compile">
- java tag spustí hlavní funkci z jaru vytvořeného v cílové sekci kompilace
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Spusťte Ant pomocí Eclipse plugin
Chcete-li spustit Ant z Eclipse, přejděte do souboru build.xml -> klikněte pravým tlačítkem na soubor -> Spustit jako... -> klikněte na Vytvořit soubor
Příklad
Vezmeme malý vzorový program, který velmi jasně vysvětlí funkčnost Ant. Struktura našeho projektu bude vypadat takto –
Zde v tomto příkladu máme 4 cíle
- Nastavit cestu třídy pro externí nádoby,
- Vyčistěte dříve vyhovující kód
- Kompilace existujícího kódu Java
- Spusťte kód
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>
Jak provést TestNG kód pomocí Ant
Zde vytvoříme třídu s Testng metody a nastavte cestu třídy pro Testování v build.xml.
Nyní pro provedení metody testng vytvoříme další soubor testng.xml a zavoláme tento soubor ze souboru build.xml.
Krok 1) Vytvoříme a "Guru99AntClass.class" v balení 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(); } }
Krok 2) Vytvořte cíl pro načtení této třídy v 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>
Krok 3) Vytvořte soubor 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>
Krok 4) Vytvořit Target v Build.xml, abyste to spustili TestNG kód
<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>
Krok 5) Kompletní soubor 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>
Krok 6) Výstup
Stáhněte si výše uvedený soubor
Mravenec s Selenium Webdriver
Zatím jsme se naučili, že pomocí ANT můžeme umístit všechny nádoby třetích stran na určité místo v systému a nastavit jejich cestu pro náš projekt. Pomocí této metody nastavujeme všechny závislosti našeho projektu na jednom místě a činíme jej spolehlivějším pro kompilaci, provádění a nasazení.
Podobně pro naše testovací projekty používající selen můžeme snadno zmínit závislost na selenu v build.xml a nemusíme v naší aplikaci ručně přidávat cestu ke třídě.
Nyní tedy můžete ignorovat níže zmíněný tradiční způsob nastavení cest k třídám pro projekt.
Příklad:
Upravíme předchozí příklad
Krok 1) Nastavte vlastnost selenium.jars na jar související se selenem ve složce zdrojů
<property name="selenium.jars" value=".\selenium"/>
Krok 2) Do cílového setClassPath přidejte soubory selenu
<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>
Krok 3) Kompletní 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>
Krok 4) Nyní změňte dříve vytvořenou třídu Guru99AntClass.java novým kódem.
Zde v tomto příkladu používáme naše kroky Selenium jsou:
- Přejít https://demo.guru99.com/test/guru99home/
- Přečtěte si všechny odkazy na kurzy jeden po druhém
- Vytiskněte hypertextový odkaz na všechny kurzy na konzoli.
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")); } } }
Krok 5) Po úspěšném provedení bude výstup vypadat takto:
Stáhněte si ukázkový soubor výše
Shrnutí
Ant je stavební nástroj pro Java.
Ant používaný pro kompilaci kódu, nasazení, proces provádění.
Ant lze stáhnout z Apache webová stránka.
Soubor Build.xml používaný ke konfiguraci cílů spuštění pomocí Ant.
Ant lze spustit z příkazového řádku nebo vhodného pluginu IDE, jako je Eclipse.