Selenio - Guía rápida

Introducción

Selenium es una herramienta de prueba de software automatizada portátil y de código abierto para probar aplicaciones web. Tiene capacidad para operar en diferentes navegadores y sistemas operativos. El selenio no es solo una herramienta, sino un conjunto de herramientas que ayuda a los evaluadores a automatizar aplicaciones basadas en la web de manera más eficiente.

Entendamos ahora cada una de las herramientas disponibles en la suite Selenium y su uso.

No Señor. Herramienta y descripción
1

Selenium IDE

Selenio Iintegrado Ddesarrollo Environment (IDE) es un complemento de Firefox que permite a los evaluadores registrar sus acciones a medida que siguen el flujo de trabajo que necesitan probar.

2

Selenium RC

Selenio Rser emocionado Control (RC) fue el marco de prueba insignia que permitió más que simples acciones de navegador y ejecución lineal. Hace uso de toda la potencia de los lenguajes de programación como Java, C #, PHP, Python, Ruby y PERL para crear pruebas más complejas.

3

Selenium WebDriver

Selenium WebDriver es el sucesor de Selenium RC, que envía comandos directamente al navegador y recupera los resultados.

4

Selenium Grid

Selenium Grid es una herramienta que se utiliza para ejecutar pruebas paralelas en diferentes máquinas y diferentes navegadores simultáneamente, lo que reduce el tiempo de ejecución.

Ventajas del selenio

QTP y Selenium son las herramientas más utilizadas en el mercado para las pruebas de automatización de software. Por lo tanto, tiene sentido comparar las ventajas de Selenium sobre QTP.

Selenio QTP
El selenio es una herramienta de código abierto. QTP es una herramienta comercial y cada una de las licencias tiene un costo.
Puede extenderse para varias tecnologías que exponen DOM. Complementos limitados y complementos de necesidades para cada una de las tecnologías.
Tiene capacidad para ejecutar scripts en diferentes navegadores. Puede ejecutar pruebas en versiones específicas de Firefox, IE y Chrome.
Puede ejecutar scripts en varios sistemas operativos. Funciona solo con Windows.
Admite dispositivos móviles. Admite dispositivos móviles con la ayuda de herramientas de terceros.
Ejecuta pruebas dentro del navegador, por lo que NO es necesario enfocarse mientras la ejecución del script está en progreso. Necesita enfoque durante la ejecución del script, ya que la herramienta actúa en el navegador (imita las acciones del usuario).
Puede ejecutar pruebas en paralelo con el uso de Selenium Grids. QTP no puede ejecutar pruebas en paralelo, sin embargo, la integración de QTP con QC permite a los probadores ejecutar en paralelo. QC también es una herramienta comercial.

Desventajas del selenio

Analicemos ahora las trampas del selenio sobre el QTP.

Selenio QTP
Admite solo aplicaciones basadas en web. Puede probar aplicaciones web y de escritorio.
Sin función como repositorio de objetos / escenario de recuperación QTP tiene repositorios de objetos integrados y escenarios de recuperación.
Sin IDE, por lo que el desarrollo del script no será tan rápido como QTP. IDE más intuitivo; la automatización se puede lograr más rápido.
No se puede acceder a los controles dentro del navegador. Puede acceder a los controles dentro del navegador, como la barra de favoritos, botones de avance y retroceso.
Sin generación de informes de prueba predeterminados. Generación de resultados de prueba predeterminados dentro de la herramienta.
Para la parametrización, los usuarios deben confiar en el lenguaje de programación. La parametrización está integrada y es fácil de implementar.

Selenium-IDE (Integrated Development Environment) es un complemento de Firefox fácil de usar para desarrollar casos de prueba de Selenium. Proporciona una interfaz gráfica de usuario para registrar las acciones del usuario usando Firefox, que se usa para aprender y usar Selenium, pero solo se puede usar con el navegador Firefox, ya que otros navegadores no son compatibles.

Sin embargo, los scripts grabados se pueden convertir a varios lenguajes de programación compatibles con Selenium y los scripts también se pueden ejecutar en otros navegadores.

La siguiente tabla enumera las secciones que vamos a cubrir en este capítulo.

No Señor. Descripción del Título
1 Descarga Selenium IDE

Esta sección trata sobre cómo descargar y configurar Selenium IDE.

2 Funciones de Selenium IDE

Esta sección trata sobre las funciones disponibles en Selenium IDE.

3 Creación de pruebas IDE de selenio

Esta sección trata sobre cómo crear pruebas IDE usando la función de grabación.

4 Depuración de secuencias de comandos IDE de Selenium

Esta sección trata sobre la depuración del script IDE de Selenium.

5 Insertar puntos de verificación

Esta sección describe cómo insertar puntos de verificación en Selenium IDE.

6 Coincidencia de patrones de selenio

Esta sección trata sobre cómo trabajar con expresiones regulares usando IDE.

7 Extensiones de usuario de Selenium

El script Java que permite a los usuarios personalizar o agregar nuevas funciones.

8 Ejecución diferente del navegador

Esta sección trata sobre cómo ejecutar scripts de Selenium IDE en diferentes navegadores.

Para desarrollar scripts de Selenium RC o WebDriver, los usuarios deben asegurarse de haber realizado la configuración inicial. La configuración del entorno implica los siguientes pasos.

  • Descargar e instalar Java
  • Descarga y configura Eclipse
  • Configurar FireBug y FirePath
  • Configurar Selenium RC
  • Configurar Selenium WebDriver

Descargar e instalar Java

Necesitamos tener JDK (Java Development Kit) instalado para trabajar con Selenium WebDriver / Selenium. Veamos cómo descargar e instalar Java.

Step 1 - Navegue a la UR.

https://www.oracle.com/technetwork/java/javase/downloads/index.html

Step 2 - Vaya a la sección "Descargas" y seleccione "Descargar JDK".

Step 3 - Seleccione el botón de opción "Aceptar acuerdo de licencia".

Step 4- Seleccione la instalación adecuada. En este caso, es el bit 'Windows 7-64'. Haga clic en el enlace correspondiente y guarde el archivo .exe en su disco.

Step 5- Ejecute el archivo exe descargado para iniciar el asistente de instalación. Presione siguiente para continuar.

Step 6 - Seleccione las funciones y haga clic en 'Siguiente'.

Step 7 - Se extrae el instalador y su progreso se muestra en el asistente.

Step 8 - El usuario puede elegir la ubicación de instalación y hacer clic en 'Siguiente'.

Step 9 - El instalador instala el JDK y se copian los archivos nuevos.

Step 10 - El instalador se instala correctamente y muestra lo mismo al usuario.

Step 11- Para verificar si la instalación fue exitosa, vaya al símbolo del sistema y simplemente escriba 'java' como comando. La salida del comando se muestra a continuación. Si la instalación de Java no tiene éxito o si NO se ha instalado, arrojará un error de "comando desconocido".

Descarga y configura Eclipse

Step 1 - Navega a la URL: https://www.eclipse.org/downloads/ y descargue el archivo apropiado según la arquitectura de su sistema operativo.

Step 2 - Haga clic en el botón 'Descargar'.

Step 3- La descarga estaría en formato comprimido. Descomprime el contenido.

Step 4 - Localice Eclipse.exe y haga doble clic en el archivo.

Step 5 - Para configurar el espacio de trabajo, seleccione la ubicación donde debe realizarse el desarrollo.

Step 6 - Se abre la ventana de Eclipse como se muestra a continuación.

Configurar FireBug y FirePath

Para trabajar con Selenium RC o WebDriver, necesitamos ubicar elementos en función de su XPath o ID o nombre, etc. Para ubicar un elemento, necesitamos herramientas / complementos.

Step 1 - Navega a la URL: https://addons.mozilla.org/en-US/firefox/addon/firebug/ y descarga el complemento.

Step 2 - El instalador del complemento se muestra al usuario y se instala al hacer clic en el botón 'Instalar'.

Step 3 - Después de la instalación, podemos iniciar el complemento navegando a "Web Developer" >> "Firebug".

Step 4- FirePath, un complemento que funciona dentro de Firebug, ayuda a los usuarios a obtener el 'XPath' de un elemento. Instale FirePath navegando a "https://addons.mozilla.org/en-US/firefox/addon/firepath/"

Step 5 - El instalador del complemento se muestra al usuario y se instala al hacer clic en el botón 'Instalar'.

Step 6 - Ahora inicie "Firebug" navegando a "Herramientas" >> "Webdeveloper" >> "Firebug".

Ejemplo

Ahora entendamos cómo usar FireBug y FirePath con un ejemplo. Para la demostración, usaremos www.google.com y capturaremos las propiedades del cuadro de texto de "google.com".

Step 1- Primero haga clic en el icono de la flecha como se resalta en la siguiente captura de pantalla y arrástrelo al objeto para el que nos gustaría capturar las propiedades. El HTML / DOM del objeto se mostraría como se muestra a continuación. Podemos capturar el 'ID' del cuadro de texto de entrada con el que podemos interactuar.

Step 2 - Para obtener el XPath del objeto, vaya a la pestaña 'Firepath' y realice los siguientes pasos.

  • Haga clic en el icono de espía.
  • Seleccione el Control para el que nos gustaría capturar el XPath.
  • Se generaría XPath del control seleccionado.

Configurar Selenium RC

Ahora veamos cómo configurar el control remoto de Selenium. Entenderemos cómo desarrollar scripts con Selenium RC en capítulos posteriores, sin embargo, por ahora, entenderemos solo la parte de configuración.

Step 1 - Navega a la sección de descargas de Selenium http://www.seleniumhq.org/download/ y descargue Selenium Server haciendo clic en su número de versión como se muestra a continuación.

Step 2- Después de la descarga, necesitamos iniciar Selenium Server. Para hacerlo, abra el símbolo del sistema y navegue hasta la carpeta donde se guarda el archivo JAR descargado como se muestra a continuación.

Step 3- Para iniciar el servidor, use el comando 'java -jar << nombre de jar descargado >> y si java JDK está instalado correctamente, obtendrá un mensaje de éxito como se muestra a continuación. Ahora podemos empezar a escribir scripts de Selenium RC.

Configurar Selenium WebDriver

Ahora veamos cómo configurar Selenium WebDriver. Entenderemos cómo desarrollar scripts con Selenium WebDriver en capítulos posteriores, sin embargo, por ahora, entenderemos solo la parte de configuración.

Step 1 - Navega a la sección de descargas de selenio http://www.seleniumhq.org/download/ y descargue Selenium WebDriver haciendo clic en su número de versión como se muestra a continuación.

Step 2 - El archivo descargado está en formato comprimido y hay que descomprimir el contenido para asignarlo a la carpeta del proyecto.

Step 3- El contenido descomprimido se mostraría como se muestra a continuación. En el capítulo webDriver se tratará cómo asignarlo a la carpeta del proyecto y cómo iniciar la secuencia de comandos.

¿Qué es Selenium RC?

Selenium Remote Control (RC) fue el principal proyecto de Selenium que se mantuvo durante mucho tiempo antes de que se creara Selenium WebDriver (Selenium 2.0). Ahora Selenium RC apenas se usa, ya que WebDriver ofrece funciones más potentes, sin embargo, los usuarios aún pueden continuar desarrollando scripts usando RC.

Nos permite escribir pruebas de IU de aplicaciones web automatizadas con la ayuda de todo el poder de los lenguajes de programación como Java, C #, Perl, Python y PHP para crear pruebas más complejas como leer y escribir archivos, consultar una base de datos y enviar por correo electrónico los resultados de las pruebas. .

Arquitectura Selenium RC

Selenium RC funciona de tal manera que las bibliotecas cliente pueden comunicarse con el Selenium RC Server pasando cada comando de Selenium para su ejecución. Luego, el servidor pasa el comando de Selenium al navegador usando comandos de JavaScript de Selenium-Core.

El navegador ejecuta el comando Selenium usando su intérprete de JavaScript.

Selenium RC viene en dos partes.

  • Selenium Server se inicia y mata los navegadores. Además de eso, interpreta y ejecuta los comandos de Selenese. También actúa como un proxy HTTP interceptando y verificando los mensajes HTTP pasados ​​entre el navegador y la aplicación bajo prueba.

  • Bibliotecas cliente que proporcionan una interfaz entre cada uno de los lenguajes de programación (Java, C #, Perl, Python y PHP) y el Servidor Selenium-RC.

Secuencias de comandos RC

Ahora escribamos un script de muestra usando Selenium Remote Control. Usemoshttp://www.calculator.net/para comprender Selenium RC. Realizaremos un cálculo de porcentaje usando 'Calculadora de porcentaje' que está presente en el módulo 'Calculadoras matemáticas'.

Step 1 - Inicie Selenium Remote Control (con la ayuda del símbolo del sistema).

Step 2 - Después de iniciar Selenium RC, abra Eclipse y cree un "Nuevo proyecto" como se muestra a continuación.

Step 3 - Ingrese el nombre del proyecto y haga clic en el botón 'Siguiente'.

Step 4 - Verifique la carpeta Fuente, Proyectos, Bibliotecas y Salida y haga clic en 'Finalizar'.

Step 5 - Haga clic derecho en el contenedor 'proyecto' y elija 'Configurar ruta de compilación'.

Step 6- Se abren las propiedades de 'selrcdemo'. Vaya a la pestaña 'Bibliotecas' y seleccione 'Agregar JAR externos'. Elija el archivo jar de Selenium RC que hemos descargado y aparecerá como se muestra a continuación.

Step 7 - Las Bibliotecas referenciadas se muestran como se muestra a continuación.

Step 8 - Cree un nuevo archivo de clase haciendo clic con el botón derecho en la carpeta 'src' y seleccione 'Nuevo' >> 'clase'.

Step 9 - Ingrese un nombre del archivo de clase y habilite 'public static void main' como se muestra a continuación.

Step 10 - La clase creada se crea bajo la estructura de carpetas como se muestra a continuación.

Step 11- Ahora es el momento de codificar. El siguiente código tiene comentarios incrustados para que los lectores comprendan lo que se ha presentado.

package selrcdemo;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class rcdemo {
   public static void main(String[] args) throws InterruptedException {

      // Instatiate the RC Server
      Selenium selenium = new DefaultSelenium("localhost", 4444 , "firefox", "http://www.calculator.net");
      selenium.start();   // Start
      selenium.open("/");  // Open the URL
      selenium.windowMaximize();

      // Click on Link Math Calculator
      selenium.click("xpath = .//*[@id = 'menu']/div[3]/a");
      Thread.sleep(2500); // Wait for page load

      // Click on Link Percent Calculator
      selenium.click("xpath = .//*[@id = 'menu']/div[4]/div[3]/a");
      Thread.sleep(4000); // Wait for page load

      // Focus on text Box
      selenium.focus("name = cpar1");
      
      // enter a value in Text box 1
      selenium.type("css=input[name = \"cpar1\"]", "10");
      
      // enter a value in Text box 2
      selenium.focus("name = cpar2");
      selenium.type("css = input[name = \"cpar2\"]", "50");

      // Click Calculate button
      selenium.click("xpath = .//*[@id = 'content']/table/tbody/tr/td[2]/input");

      // verify if the result is 5
      String result = selenium.getText(".//*[@id = 'content']/p[2]");

      if (result == "5") {
         System.out.println("Pass");
      } else {
         System.out.println("Fail");
      }
   }
}

Step 12 - Ahora, ejecutemos el script haciendo clic en el botón 'Ejecutar'.

Step 13 - El script comenzaría a ejecutarse y el usuario podría ver el historial de comandos en la pestaña 'Historial de comandos'.

Step 14- El estado final de la aplicación se muestra a continuación. El porcentaje se calcula y muestra el resultado en la pantalla como se muestra a continuación.

Step 15- El resultado de la prueba se imprime en la consola Eclipse como se muestra a continuación, ya que hemos impreso el resultado en la consola. En tiempo real, la salida se escribe en un archivo HTML o en un archivo de texto simple.

Un comando se refiere a lo que tiene que hacer Selenium y los comandos en selenium son de tres tipos. Haga clic en cada uno de ellos para saber más sobre los comandos.

Localizadores

Los localizadores de elementos ayudan a Selenium a identificar el elemento HTML al que se refiere el comando. Todos estos localizadores se pueden identificar con la ayuda de FirePath y el complemento FireBug de Mozilla. Consulte el capítulo Configuración del entorno para obtener más detalles.

  • identifier = id Seleccione el elemento con el atributo "id" especificado y si no hay coincidencia, seleccione el primer elemento cuyo atributo @name es id.

  • id = id Seleccione el elemento con el atributo "id" especificado.

  • name = name Seleccione el primer elemento con el atributo "nombre" especificado

  • dom = javascriptExpressionSelenium encuentra un elemento evaluando la cadena especificada que nos permite atravesar el modelo de objetos de documento HTML usando JavaScript. Los usuarios no pueden devolver un valor, pero pueden evaluarlo como una expresión en el bloque.

  • xpath = xpathExpression Busque un elemento mediante una expresión XPath.

  • link = textPattern Seleccione el elemento de enlace (dentro de las etiquetas de anclaje) que contiene texto que coincide con el patrón especificado.

  • css = cssSelectorSyntax Seleccione el elemento usando el selector css.

WebDriver es una herramienta para automatizar las pruebas de aplicaciones web. Se le conoce popularmente como Selenio 2.0. WebDriver usa un marco subyacente diferente, mientras que Selenium RC usa JavaScript Selenium-Core incrustado en el navegador, que tiene algunas limitaciones. WebDriver interactúa directamente con el navegador sin ningún intermediario, a diferencia de Selenium RC que depende de un servidor. Se utiliza en el siguiente contexto:

  • Pruebas de varios navegadores que incluyen una funcionalidad mejorada para navegadores que no es compatible con Selenium RC (Selenium 1.0).

  • Manejo de múltiples marcos, múltiples ventanas del navegador, ventanas emergentes y alertas.

  • Navegación de página compleja.

  • Navegación de usuario avanzada, como arrastrar y soltar.

  • Elementos de IU basados ​​en AJAX.

Arquitectura

WebDriver se explica mejor con un diagrama de arquitectura simple como se muestra a continuación.

Selenium RC Vs WebDriver

Selenio RC Selenium WebDriver
La arquitectura de Selenium RC es complicada, ya que el servidor debe estar en funcionamiento antes de iniciar una prueba. La arquitectura de WebDriver es más simple que Selenium RC, ya que controla el navegador desde el nivel del sistema operativo.
El servidor Selenium actúa como intermediario entre el navegador y los comandos de Selenese. WebDriver interactúa directamente con el navegador y utiliza el motor del navegador para controlarlo.
La ejecución del script Selenium RC es más lenta, ya que utiliza un Javascript para interactuar con RC. WebDriver es más rápido, ya que interactúa directamente con el navegador.
Selenium RC no puede admitir la ejecución sin cabeza, ya que necesita un navegador real para trabajar. WebDriver puede admitir la ejecución sin cabeza.
Es una API simple y pequeña. API compleja y un poco grande en comparación con RC.
API menos orientada a objetos. API puramente orientada a objetos.
No se pueden probar aplicaciones móviles. Puede probar aplicaciones de iPhone / Android.

Scripting usando WebDriver

Entendamos cómo trabajar con WebDriver. Para demostración, usaríamoshttps://www.calculator.net/. Realizaremos una "Calculadora de porcentaje" que se encuentra debajo de "Calculadora matemática". Ya hemos descargado los JAR de WebDriver necesarios. Consulte el capítulo "Configuración ambiental" para obtener más detalles.

Step 1 - Ejecute "Eclipse" desde la carpeta Extracted Eclipse.

Step 2 - Seleccione el espacio de trabajo haciendo clic en el botón 'Examinar'.

Step 3 - Ahora cree un 'Proyecto nuevo' desde el menú 'Archivo'.

Step 4 - Ingrese el nombre del proyecto y haga clic en 'Siguiente'.

Step 5- Vaya a la pestaña Bibliotecas y seleccione todos los JAR que hemos descargado. Agregue una referencia a todos los JAR de la carpeta de la biblioteca Selenium WebDriver y también a selenium-java-2.42.2.jar y selenium-java-2.42.2-srcs.jar.

Step 6 - El paquete se crea como se muestra a continuación.

Step 7 - Ahora haga clic derecho en el paquete y seleccione 'Nuevo' >> 'Clase' para crear una 'clase'.

Step 8 - Ahora nombre la clase y conviértala en la función principal.

Step 9 - El esquema de la clase se muestra a continuación.

Step 10- Ahora es el momento de codificar. El siguiente guión es más fácil de entender, ya que incluye comentarios para explicar los pasos con claridad. Eche un vistazo al capítulo "Localizadores" para comprender cómo capturar las propiedades de los objetos.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

public class webdriverdemo {
   public static void main(String[] args) {
   
      WebDriver driver = new FirefoxDriver();
      //Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      //Launch website
      driver.navigate().to("http://www.calculator.net/");
      
      //Maximize the browser
      driver.manage().window().maximize();
      
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click();

      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText();

      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      //Close the Browser.
      driver.close();
   }
}

Step 11 - La salida del script anterior se imprimirá en Console.

Comandos más utilizados

La siguiente tabla enumera algunos de los comandos más utilizados en WebDriver junto con su sintaxis.

No Señor. Comando y descripción
1

driver.get("URL")

Para navegar a una aplicación.

2

element.sendKeys("inputtext")

Ingrese texto en un cuadro de entrada.

3

element.clear()

Borre el contenido del cuadro de entrada.

4

select.deselectAll()

Deseleccione todas las OPCIONES del primer SELECCIONAR en la página.

5

select.selectByVisibleText("some text")

Seleccione la OPCIÓN con la entrada especificada por el usuario.

6

driver.switchTo().window("windowName")

Mueva el foco de una ventana a otra.

7

driver.switchTo().frame("frameName")

Oscile de un marco a otro.

8

driver.switchTo().alert()

Ayuda a manejar alertas.

9

driver.navigate().to("URL")

Navega hasta la URL.

10

driver.navigate().forward()

Para navegar hacia adelante.

11

driver.navigate().back()

Para navegar de regreso.

12

driver.close()

Cierra el navegador actual asociado con el controlador.

13

driver.quit()

Cierra el controlador y cierra todas las ventanas asociadas a ese controlador.

14

driver.refresh()

Actualiza la página actual.

La ubicación de elementos en Selenium WebDriver se realiza con la ayuda de los métodos findElement () y findElements () proporcionados por WebDriver y la clase WebElement.

  • findElement () devuelve un objeto WebElement basado en un criterio de búsqueda especificado o termina lanzando una excepción si no encuentra ningún elemento que coincida con los criterios de búsqueda.

  • findElements () devuelve una lista de WebElements que coinciden con los criterios de búsqueda. Si no se encuentran elementos, devuelve una lista vacía.

La siguiente tabla enumera toda la sintaxis de Java para ubicar elementos en Selenium WebDriver.

Método Sintaxis Descripción
Por ID driver.findElement (By.id (<ID de elemento>)) Localiza un elemento usando el atributo ID
Por nombre driver.findElement (By.name (<nombre del elemento>)) Localiza un elemento usando el atributo Name
Por nombre de clase driver.findElement (By.className (<clase de elemento>)) Localiza un elemento usando el atributo Class
Por nombre de etiqueta driver.findElement (By.tagName (<htmltagname>)) Localiza un elemento usando la etiqueta HTML
Por texto de enlace driver.findElement (By.linkText (<linktext>)) Localiza un enlace usando el texto del enlace
Por texto de enlace parcial driver.findElement (By.partialLinkText (<linktext>)) Localiza un enlace utilizando el texto parcial del enlace.
Por CSS driver.findElement (By.cssSelector (<selector de css>)) Localiza un elemento usando el selector CSS
Por XPath driver.findElement (By.xpath (<xpath>)) Localiza un elemento mediante una consulta XPath

Uso de localizadores

Ahora entendamos el uso práctico de cada uno de los métodos de localización con la ayuda de https://www.calculator.net

Por ID

Aquí se accede a un objeto con la ayuda de ID. En este caso, es el ID del cuadro de texto. Los valores se ingresan en el cuadro de texto usando el método sendkeys con la ayuda de ID (cdensity).

driver.findElement(By.id("cdensity")).sendKeys("10");

Por nombre

Aquí se accede a un objeto con la ayuda de nombres. En este caso, es el nombre del cuadro de texto. Los valores se ingresan en el cuadro de texto usando el método sendkeys con la ayuda de ID (cdensity).

driver.findElement(By.name("cdensity")).sendKeys("10");

Por nombre de clase

Aquí se accede a un objeto con la ayuda de Class Names. En este caso, es el nombre de clase del WebElement. Se puede acceder al valor con la ayuda del método gettext.

List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));

Por nombre de etiqueta

El nombre de etiqueta DOM de un elemento se puede utilizar para ubicar ese elemento en particular en el WebDriver. Es muy fácil manejar tablas con la ayuda de este método. Eche un vistazo al siguiente código.

WebElement table = driver.findElement(By.id("calctable"));
List<WebElement> row = table.findElements(By.tagName("tr"));
int rowcount = row.size();

Por texto de enlace

Este método ayuda a localizar un elemento de enlace con texto visible coincidente.

driver.findElements(By.linkText("Volume")).click();

Por texto de enlace parcial

Este método ayuda a localizar un elemento de enlace con texto visible que coincide parcialmente.

driver.findElement(By.partialLinkText("Volume")).click();

Por CSS

El CSS se utiliza como método para identificar el objeto web; sin embargo, NO todos los navegadores admiten la identificación CSS.

WebElement loginButton = driver.findElement(By.cssSelector("input.login"));

Por XPath

XPath significa lenguaje de ruta XML. Es un lenguaje de consulta para seleccionar nodos de un documento XML. XPath se basa en la representación de árbol de documentos XML y proporciona la capacidad de navegar por el árbol seleccionando nodos utilizando una variedad de criterios.

driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");

Selenium WebDriver es la herramienta más utilizada entre todas las herramientas disponibles en el conjunto de herramientas de Selenium. Por lo tanto, es importante comprender cómo usar Selenium para interactuar con aplicaciones web. En este módulo, entendamos cómo interactuar con objetos GUI usando Selenium webDriver.

Necesitamos interactuar con la aplicación mediante algunas acciones básicas o incluso alguna acción avanzada del usuario mediante el desarrollo de funciones definidas por el usuario para las que no existen comandos predefinidos.

A continuación se enumeran los diferentes tipos de acciones contra esos objetos GUI:

Hay varios componentes involucrados en el diseño de las pruebas. Entendamos también algunos de los componentes importantes involucrados en el diseño de un marco. Aprenderemos los siguientes temas en este capítulo:

TestNG es un poderoso marco de pruebas, una versión mejorada de JUnit que estuvo en uso durante mucho tiempo antes de que TestNG existiera. NG significa 'Próxima Generación'.

El marco TestNG proporciona las siguientes características:

  • Las anotaciones nos ayudan a organizar las pruebas fácilmente.
  • Configuración de prueba flexible.
  • Los casos de prueba se pueden agrupar más fácilmente.
  • La paralelización de las pruebas se puede lograr utilizando TestNG.
  • Soporte para pruebas basadas en datos.
  • Informes incorporados.

Instalación de TestNG para Eclipse

Step 1 - Inicie Eclipse y seleccione 'Instalar nuevo software'.

Step 2 - Ingrese la URL como 'http://beust.com/eclipse' y haga clic en 'Agregar'.

Step 3- Se abre el cuadro de diálogo 'Agregar repositorio'. Ingrese el nombre como 'TestNG' y haga clic en 'Aceptar'

Step 4 - Haga clic en 'Seleccionar todo' y se seleccionará 'TestNG' como se muestra en la figura.

Step 5 - Haga clic en 'Siguiente' para continuar.

Step 6 - Revise los elementos seleccionados y haga clic en 'Siguiente'.

Step 7 - "Acepte el contrato de licencia" y haga clic en 'Finalizar'.

Step 8 - TestNG comienza a instalarse y el progreso se mostrará a continuación.

Step 9- Aparece una advertencia de seguridad porque no se puede establecer la validez del software. Haga clic en Aceptar'.

Step 10- El instalador solicita reiniciar Eclipse para que los cambios surtan efecto. Haga clic en "Sí".

Anotaciones en TestNG

Las anotaciones se agregaron formalmente al lenguaje Java en JDK 5 y TestNG tomó la decisión de usar anotaciones para anotar las clases de prueba. A continuación, se muestran algunos de los beneficios de usar anotaciones. Se puede encontrar más sobre TestNGhere

  • TestNG identifica los métodos que le interesan buscando anotaciones. Por lo tanto, los nombres de los métodos no están restringidos a ningún patrón o formato.

  • Podemos pasar parámetros adicionales a las anotaciones.

  • Las anotaciones están fuertemente tipadas, por lo que el compilador marcará cualquier error de inmediato.

  • Las clases de prueba ya no necesitan extender nada (como TestCase, para JUnit 3).

No Señor. Anotación y descripción
1

@BeforeSuite

El método anotado se ejecutará solo una vez antes de que se hayan ejecutado todas las pruebas de esta suite.

2

@AfterSuite

El método anotado se ejecutará solo una vez después de que se hayan ejecutado todas las pruebas de esta suite.

3

@BeforeClass

El método anotado se ejecutará solo una vez antes de que se invoque el primer método de prueba de la clase actual.

4

@AfterClass

El método anotado se ejecutará solo una vez después de que se hayan ejecutado todos los métodos de prueba de la clase actual.

5

@BeforeTest

El método anotado se ejecutará antes de que se ejecute cualquier método de prueba que pertenezca a las clases dentro de la etiqueta <test>.

6

@AfterTest

El método anotado se ejecutará después de que se hayan ejecutado todos los métodos de prueba que pertenecen a las clases dentro de la etiqueta <test>.

7

@BeforeGroups

La lista de grupos que este método de configuración ejecutará antes. Se garantiza que este método se ejecutará poco antes de que se invoque el primer método de prueba que pertenece a cualquiera de estos grupos.

8

@AfterGroups

La lista de grupos tras los que se ejecutará este método de configuración. Se garantiza que este método se ejecutará poco después de que se invoque el último método de prueba que pertenezca a cualquiera de estos grupos.

9

@BeforeMethod

El método anotado se ejecutará antes de cada método de prueba.

10

@AfterMethod

El método anotado se ejecutará después de cada método de prueba.

11

@DataProvider

Marca un método como fuente de datos para un método de prueba. El método anotado debe devolver un Objeto [] [] donde a cada Objeto [] se le puede asignar la lista de parámetros del método de prueba. El método @Test que desea recibir datos de este DataProvider necesita usar un nombre de DataProvider igual al nombre de esta anotación.

12

@Factory

Marca un método como una fábrica que devuelve objetos que serán utilizados por TestNG como clases de prueba. El método debe devolver Object [].

13

@Listeners

Define oyentes en una clase de prueba.

14

@Parameters

Describe cómo pasar parámetros a un método @Test.

15

@Test

Marca una clase o un método como parte de la prueba.

Configuración de TestNG-Eclipse

Step 1 - Inicie Eclipse y cree un 'Nuevo proyecto Java' como se muestra a continuación.

Step 2 - Ingrese el nombre del proyecto y haga clic en 'Siguiente'.

Step 3 - Vaya a la pestaña "Bibliotecas" y agregue el archivo JAR del servidor de control remoto de Selenium haciendo clic en "Agregar JAR externos" como se muestra a continuación.

Step 4- El archivo JAR agregado se muestra aquí. Haga clic en 'Agregar biblioteca'.

Step 5- Se abre el cuadro de diálogo 'Agregar biblioteca'. Seleccione 'TestNG' y haga clic en 'Siguiente' en el cuadro de diálogo 'Agregar biblioteca'.

Step 6 - Se agrega la biblioteca 'TestNG' agregada y se muestra como se muestra a continuación.

Step 7 - Al crear el proyecto, la estructura del proyecto quedaría como se muestra a continuación.

Step 8 - Haga clic derecho en la carpeta 'src' y seleccione Nuevo >> Otro.

Step 9 - Seleccione 'TestNG' y haga clic en 'Siguiente'.

Step 10 - Seleccione el nombre de la 'Carpeta de origen' y haga clic en 'Aceptar'.

Step 11 - Seleccione el 'Nombre del paquete', el 'nombre de la clase' y haga clic en 'Finalizar'.

Step 12 - Se mostrarán el Explorador de paquetes y la clase creada.

Primera prueba en TestNG

Ahora comencemos a crear scripts usando TestNG. Hagamos un script para el mismo ejemplo que usamos para comprender el WebDriver. Usaremos la aplicación de demostración, www.calculator.net , y realizaremos una calculadora de porcentaje.

En la siguiente prueba, notará que NO existe un método principal, ya que testNG conducirá el flujo de ejecución del programa. Después de inicializar el controlador, ejecutará el método '@BeforeTest' seguido de '@Test' y luego '@AfterTest'. Tenga en cuenta que puede haber cualquier número de anotaciones '@Test' en una clase, pero '@BeforeTest' y '@AfterTest' solo pueden aparecer una vez.

package TestNG;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestNGClass {
   WebDriver driver = new FirefoxDriver();
   
   @BeforeTest
   public void launchapp() {
      // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      // Launch website
      driver.navigate().to("http://www.calculator.net");
      driver.manage().window().maximize();
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click();
      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void terminatetest() {
      driver.close();
   }
}

Ejecución

Para ejecutar, haga clic derecho en el XML creado y seleccione "Ejecutar como" >> "TestNG Suite"

Análisis de resultados

La salida se envía a la consola y aparecerá como se muestra a continuación. La salida de la consola también tiene un resumen de ejecución.

El resultado de TestNG también se puede ver en una pestaña diferente. Haga clic en el botón 'Vista de informe HTML' como se muestra a continuación.

El resultado HTML se mostrará como se muestra a continuación.

Selenium Grid es una herramienta que distribuye las pruebas entre múltiples máquinas físicas o virtuales para que podamos ejecutar scripts en paralelo (simultáneamente). Acelera drásticamente el proceso de prueba en todos los navegadores y plataformas al brindarnos comentarios rápidos y precisos.

Selenium Grid nos permite ejecutar múltiples instancias de pruebas de WebDriver o Selenium Remote Control en paralelo que utilizan la misma base de código, por lo que el código NO necesita estar presente en el sistema que ejecutan. El paquete selenium-server-standalone incluye Hub, WebDriver y Selenium RC para ejecutar los scripts en grid.

Selenium Grid tiene un Hub y un Node.

  • Hub- El hub también puede entenderse como un servidor que actúa como el punto central donde se activarían las pruebas. Un Selenium Grid tiene solo un Hub y se inicia en una sola máquina una vez.

  • Node- Los nodos son las instancias de Selenium que se adjuntan al Hub que ejecutan las pruebas. Puede haber uno o más nodos en una cuadrícula que pueden ser de cualquier sistema operativo y pueden contener cualquiera de los navegadores compatibles con Selenium.

Arquitectura

El siguiente diagrama muestra la arquitectura de Selenium Grid.

Trabajando con Grid

Para trabajar con Grid, debemos seguir ciertos protocolos. Escuche a continuación son los pasos principales involucrados en este proceso:

  • Configurar el Hub
  • Configurar los nodos
  • Desarrolle el script y prepare el archivo XML
  • Ejecución de pruebas
  • Análisis de resultados

Analicemos cada uno de estos pasos en detalle.

Configurar el Hub

Step 1 - Descargue el último archivo JAR independiente de Selenium Server de http://docs.seleniumhq.org/download/. Descárguelo haciendo clic en la versión que se muestra a continuación.

Step 2- Inicie el Hub iniciando el Selenium Server usando el siguiente comando. Ahora usaremos el puerto '4444' para iniciar el concentrador.

Note - Asegúrese de que no haya otras aplicaciones que se estén ejecutando en el puerto # 4444.

java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000

Step 3 - Ahora abra el navegador y navegue hasta la URL http // localhost: 4444 desde el Hub (El sistema donde ha ejecutado el Paso # 2).

Step 4- Ahora haga clic en el enlace 'consola' y haga clic en 'ver configuración'. La configuración del concentrador se mostraría de la siguiente manera. A partir de ahora, no tenemos ningún nodo, por lo que no podremos ver los detalles.

Configurar los nodos

Step 1- Inicie sesión en el nodo (donde le gustaría ejecutar los scripts) y coloque el 'selenium-server-standalone-2.42.2' en una carpeta. Necesitamos apuntar al JAR selenium-server-standalone mientras lanzamos los nodos.

Step 2 - Inicie FireFox Node usando el siguiente comando a continuación.

java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role node -hub http://10.30.217.157:4444/grid/register
   -browser browserName = firefox -port 5555

Dónde,

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Ubicación del archivo Jar independiente del servidor Selenium (en la máquina del nodo)

http://10.30.217.157:4444 = Dirección IP del Hub y 4444 es el puerto del Hub

browserName = firefox (parámetro para especificar el nombre del navegador en los nodos)

5555 = Puerto en el que Firefox Node estaría en funcionamiento.

Step 3- Después de ejecutar el comando, regrese al Hub. Navegue a la URL: http://10.30.217.157:4444 y el concentrador ahora mostrará el nodo adjunto.

Step 4- Ahora iniciemos el nodo de Internet Explorer. Para iniciar el nodo IE, necesitamos descargar el controlador de Internet Explorer en la máquina del nodo.

Step 5 - Para descargar el controlador de Internet Explorer, vaya a http://docs.seleniumhq.org/download/y descargue el archivo apropiado según la arquitectura de su sistema operativo. Una vez que lo haya descargado, descomprima el archivo exe y coloque en él una carpeta a la que debe consultar al iniciar los nodos de IE.

Step 6 - Inicie IE usando el siguiente comando.

C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub http://10.30.217.157:4444/grid/register
   -browser browserName = ie,platform = WINDOWS -port 5558

Dónde,

D: \ IEDriverServer.exe = La ubicación del controlador IE descargado (en la máquina del nodo)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Ubicación del archivo Jar independiente del servidor Selenium (en la máquina del nodo)

http://10.30.217.157:4444 = Dirección IP del Hub y 4444 es el puerto del Hub

browserName = ie (parámetro para especificar el nombre del navegador en los nodos)

5558 = Puerto en el que el nodo IE estaría en funcionamiento.

Step 7- Después de ejecutar el comando, regrese al Hub. Navegue a la URL: http://10.30.217.157:4444 y el concentrador ahora mostrará el nodo IE adjunto.

Step 8- Iniciemos ahora Chrome Node. Para iniciar el nodo de Chrome, necesitamos descargar el controlador de Chrome en la máquina del nodo.

Step 9 - Para descargar el controlador de Chrome, vaya a http://docs.seleniumhq.org/download/ y luego navegue al área de Controladores de navegador de terceros y haga clic en el número de versión '2.10' como se muestra a continuación.

Step 10- Descargue el controlador según el tipo de su sistema operativo. Lo ejecutaremos en entorno Windows, de ahí que descargaremos el Driver de Windows Chrome. Una vez que lo haya descargado, descomprima el archivo exe y colóquelo en una carpeta a la que debe hacer referencia al iniciar los nodos de Chrome.

Step 11 - Inicie Chrome con el siguiente comando.

C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe 
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar 
   -role webdriver -hub  http://10.30.217.157:4444/grid/register 
   -browser browserName = chrome, platform = WINDOWS -port 5557

Dónde,

D: \ chromedriver.exe = La ubicación del controlador Chrome descargado (en la máquina del nodo)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Ubicación del archivo Jar independiente del servidor Selenium (en la máquina del nodo)

http://10.30.217.157:4444 = Dirección IP del Hub y 4444 es el puerto del Hub

browserName = chrome (parámetro para especificar el nombre del navegador en los nodos)

5557 = Puerto en el que Chrome Node estaría en funcionamiento.

Step 12- Después de ejecutar el comando, regrese al Hub. Navegue a la URL: http://10.30.217.157:4444 y el Hub ahora mostrará el nodo de Chrome adjunto.

Desarrolle el script y prepare el archivo XML

Step 1- Desarrollaremos una prueba usando TestNG. En el siguiente ejemplo, lanzaremos cada uno de esos navegadores usando webDriver remoto. Puede transmitir sus capacidades al controlador para que el controlador tenga toda la información para ejecutar en los nodos.

El parámetro del navegador se pasaría desde el archivo "XML".

package TestNG;

import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;

public class TestNGClass {
   public WebDriver driver;
   public String URL, Node;
   protected ThreadLocal<RemoteWebDriver> threadDriver = null;
   
   @Parameters("browser")
   @BeforeTest
   public void launchapp(String browser) throws MalformedURLException {
      String URL = "http://www.calculator.net";
      
      if (browser.equalsIgnoreCase("firefox")) {
         System.out.println(" Executing on FireFox");
         String Node = "http://10.112.66.52:5555/wd/hub";
         DesiredCapabilities cap = DesiredCapabilities.firefox();
         cap.setBrowserName("firefox");
         
         driver = new RemoteWebDriver(new URL(Node), cap);
         // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("chrome")) {
         System.out.println(" Executing on CHROME");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("chrome");
         String Node = "http://10.112.66.52:5557/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("ie")) {
         System.out.println(" Executing on IE");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("ie");
         String Node = "http://10.112.66.52:5558/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else {
         throw new IllegalArgumentException("The Browser Type is Undefined");
      }
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();     	
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      // driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void closeBrowser() {
      driver.quit();
   }
}

Step 2- El parámetro del navegador se pasará mediante XML. Cree un XML en la carpeta del proyecto.

Step 3 - Seleccione 'Archivo' en 'General' y haga clic en 'Siguiente'.

Step 4 - Ingrese el nombre del archivo y haga clic en 'Finalizar'.

Step 5 - TestNg.XML se crea en la carpeta del proyecto como se muestra a continuación.

Step 6- El contenido del archivo XML se muestra a continuación. Creamos 3 pruebas y las ponemos en una suite y mencionamos paralelo = "pruebas" para que todas las pruebas se ejecuten en paralelo.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">

   <test name = "FirefoxTest">
   <parameter name = "browser" value = "firefox" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "ChromeTest">
   <parameter name = "browser" value = "chrome" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "IETest">
   <parameter name = "browser" value = "ie" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>
   
</suite>

Ejecución de pruebas

Step 1- Seleccione el XML creado; haga clic derecho y elija 'Ejecutar como' >> 'TestNG Suite'.

Step 2- Ahora abre el Nodo, donde hemos lanzado todos los nodos del navegador. Verá los tres navegadores en ejecución simultáneamente.

Análisis de resultados

Step 1- Al finalizar la ejecución, podemos analizar el resultado como cualquier otra ejecución. El resumen de resultados se imprime en la consola como se muestra en la siguiente instantánea.

Step 2 - Navegue a la pestaña 'Results of Running Suite' y TestNG mostrará el resumen de resultados como se muestra a continuación.

Step 3 - Al generar el HTML, podremos ver los resultados de la prueba en formato HTML.