Apache hormiga con Selenium: Tutorial completo
¿Qué es la hormiga apache?
Al crear un producto de software completo, es necesario ocuparse de las diferentes API de terceros, su classpath, limpiar los archivos binarios ejecutables anteriores, compilar nuestro código fuente, ejecutar el código fuente, crear informes y la base del código de implementación, etc. Si se hace uno por uno manualmente, llevará mucho tiempo y el proceso será propenso a errores.
Aquí viene la importancia de una herramienta de construcción como Ant. Almacena, ejecuta y automatiza todos los procesos en un orden secuencial mencionado en el archivo de configuración de Ant (normalmente build.xml).
Beneficio de Ant build
- Ant crea el ciclo de vida de la aplicación, es decir, limpia, compila, establece dependencias, ejecuta, informa, etc.
- Ant puede establecer la dependencia de la API de terceros, es decir, la ruta de clase de otro archivo Jar la establece el archivo de compilación Ant.
- Se crea una aplicación completa para la entrega e implementación de un extremo a otro.
- Es una herramienta de compilación sencilla donde todas las configuraciones se pueden realizar utilizando un archivo XML y que se puede ejecutar desde la línea de comandos.
- Hace que su código esté limpio ya que la configuración está separada de la lógica de la aplicación real.
Cómo instalar hormiga
Pasos para instalar Ant en Windows es como sigue
Paso 1) Vaya a https://ant.apache.org/bindownload.cgi O descargar el archivo .zip desde apache-ant-1.9.4-bin.zip
Paso 2) Descomprima la carpeta y vaya y copie la ruta a la raíz de la carpeta descomprimida.
Paso 3) Vaya a Inicio -> Computadora -> haga clic derecho aquí y seleccione "Propiedades" y luego haga clic en Configuración avanzada del sistema
Paso 4) Se abre una nueva ventana. Haga clic en el botón 'Variable de entorno...'.
Paso 5) Haga clic en el botón 'Nuevo...' y establezca el nombre de la variable como 'ANT_HOME' y el valor de la variable como la ruta raíz a la carpeta descomprimida y haga clic en Aceptar.
Paso 6) ahora seleccione la variable 'Ruta' de la lista y haga clic en 'Editar' y agregue; %ANT_HOME%\bin.
Reinicie el sistema una vez y estará listo para usar la herramienta de compilación Ant ahora.
Paso 7) Para verificar la versión de su Ant usando la línea de comando:
Hormiga –versión
Comprender Build.xml
Build.xml es el componente más importante de la herramienta de compilación Ant. Para Java proyecto, todas las tareas relacionadas con la limpieza, configuración, compilación e implementación se mencionan en este archivo en formato XML. Cuando ejecutamos este archivo XML usando la línea de comando o cualquier complemento IDE, todas las instrucciones escritas en este archivo se ejecutarán de manera secuencial.
Entendamos el código dentro de un build.XML de muestra.
-
La etiqueta de proyecto se utiliza para mencionar el nombre de un proyecto y el atributo de base. El basedir es el directorio raíz de una aplicación.
<project name="YTMonetize" basedir=".">
- Las etiquetas de propiedad se utilizan como variables en el archivo build.XML que se utilizarán en pasos posteriores.
<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 Etiquetas utilizadas como pasos que se ejecutarán en orden secuencial. El atributo de nombre es el nombre del objetivo. Puede tener varios objetivos en un solo build.xml.
<target name="setClassPath">
- La etiqueta de ruta se utiliza para agrupar lógicamente todos los archivos que se encuentran en la ubicación común.
<path id="classpath_jars">
- La etiqueta pathelement establecerá la ruta a la raíz de la ubicación común donde se almacenan todos los archivos.
<pathelement path="${basedir}/"/> - etiqueta pathconvert utilizada para convertir rutas de todos los archivos comunes dentro de la etiqueta de ruta al formato de ruta de clase del sistema
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- etiqueta de conjunto de archivos utilizada para establecer classpath para diferentes archivos jar de terceros en nuestro proyecto
<fileset dir="${ytoperation.dir}" includes="*.jar"/> - La etiqueta de eco se utiliza para imprimir texto en la consola.
<echo message="deleting existing build directory"/>
- Eliminar etiqueta limpiará los datos de la carpeta dada
<delete dir="${build.dir}"/>
- La etiqueta mkdir creará un nuevo directorio.
<mkdir dir="${build.dir}"/>
- Etiqueta javac utilizada para compilar el código fuente de Java y mover archivos .class a una nueva carpeta
<javac destdir="${build.dir}" srcdir="${src.dir}">
<classpath refid="classpath_jars"/>
</javac>
- La etiqueta jar creará un archivo jar a partir de archivos .class
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- La etiqueta de manifiesto configurará su clase principal para su ejecución.
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Atributo 'depende' utilizado para hacer que un objetivo dependa de otro objetivo
<target name="run" depends="compile">
- La etiqueta Java ejecutará la función principal desde el jar creado en la sección de destino de compilación.
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Ejecute Ant usando Eclipse plugin
Para ejecutar Ant desde Eclipse, vaya al archivo build.xml -> haga clic derecho en el archivo -> Ejecutar como… -> haga clic en Archivo de compilación
Ejemplo
Tomaremos un pequeño programa de muestra que explicará muy claramente la funcionalidad de Ant. La estructura de nuestro proyecto se verá así:
Aquí en este ejemplo tenemos 4 objetivos.
- Establecer ruta de clase para frascos externos,
- Limpiar código previamente cumplido
- Compilar código java existente
- Ejecuta el código
Guru99AntClass.clase
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();
}
}
Compilación.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>
Cómo ejecutar TestNG código usando Ant
Aquí crearemos una clase con Prueba métodos y establecer la ruta de clase para Pruebas en build.xml.
Ahora, para ejecutar el método testng, crearemos otro archivo testng.xml y llamaremos a este archivo desde el archivo build.xml.
Paso 1) Creamos un “Guru99AntClass.clase” en paquete pruebaHormiga
Guru99AntClass.clase
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();
}
}
Paso 2) Cree un objetivo para cargar esta clase en 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>
Paso 3) Crear testng.xml
pruebang.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>
Paso 4) Crear Target en Build.xml para ejecutar esto TestNG código
<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>
Paso 5) El Build.xml completo
<?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>
Paso 6) Salida
hormiga con Selenium controlador web
Hasta ahora, hemos aprendido que usando ANT podemos colocar todos los archivos jar de terceros en una ubicación particular del sistema y establecer su ruta para nuestro proyecto. Con este método, configuramos todas las dependencias de nuestro proyecto en un solo lugar y lo hacemos más confiable para la compilación, ejecución e implementación.
De manera similar, para nuestros proyectos de prueba que utilizan selenio, podemos mencionar fácilmente la dependencia de selenio en build.xml y no necesitamos agregar una ruta de clase manualmente en nuestra aplicación.
Así que ahora puedes ignorar la forma tradicional que se menciona a continuación de establecer rutas de clases para el proyecto.
Ejemplo:
Vamos a modificar el ejemplo anterior.
Paso 1) Establezca la propiedad selenium.jars en el jar relacionado con Selenium en la carpeta de recursos
<property name="selenium.jars" value=".\selenium"/>
Paso 2) En el setClassPath de destino, agregue los archivos de selenio
<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>
Paso 3) Compilación completa.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>
Paso 4) Ahora cambie la clase Guru99AntClass.java creada anteriormente con un nuevo código.
Aquí en este ejemplo nuestros pasos usando Selenium son:
- Vaya a https://demo.guru99.com/test/guru99home/
- Lea todos los enlaces de los cursos uno por uno.
- Imprima el hipervínculo de todos los cursos en la consola.
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"));
}
}
}
Paso 5) Después de una ejecución exitosa, la salida se verá así:
Descargue el archivo de ejemplo anterior
Resumen
Ant es una herramienta de construcción para Java.
Ant se utiliza para el proceso de compilación, implementación y ejecución de código.
Ant se puede descargar desde APACHE sitio web.
Archivo Build.xml utilizado para configurar objetivos de ejecución mediante Ant.
Ant se puede ejecutar desde la línea de comandos o un complemento IDE adecuado como eclipse.















