Selenium controlador web Java Ejemplo de programa

โšก Resumen inteligente

Selenium Controlador web Java El ejemplo de programa le guiarรก a travรฉs de la creaciรณn de su primer script de automatizaciรณn de principio a fin. LessLos documentos abarcan la configuraciรณn del entorno, la localizaciรณn de elementos, el envรญo de datos de entrada, la navegaciรณn, la validaciรณn, las esperas, el manejo de excepciones y las mejores prรกcticas para realizar pruebas fiables con WebDriver.

  • โš™๏ธ Configuraciรณn del entorno: Instale Java, Eclipse o IntelliJ, configure Selenium bibliotecas, y seleccione el binario del controlador adecuado para la versiรณn de su navegador.
  • ๐Ÿงญ Localizadores de elementos: Utilice ID, nombre, clase, XPath, selector CSS y linkText para identificar elementos de forma estable en diferentes navegadores y versiones.
  • โŒจ๏ธ Acciones y entrada: WebDriver admite clics, envรญo de teclas, envรญo de formularios, selecciรณn de menรบs desplegables y eventos de teclado para una interacciรณn completa al estilo del usuario.
  • โณ Esperas inteligentes: Reemplace Thread.sleep con esperas implรญcitas, explรญcitas y fluidas controladas por ExpectedConditions para eliminar las pruebas inestables.
  • ???? Manejo de excepciones: Captura las excepciones NoSuchElementException, TimeoutException y StaleElementReferenceException para mantener la resiliencia de los conjuntos de automatizaciรณn.
  • ๐Ÿค– Generaciรณn de pruebas de IA: Los asistentes de IA generan scripts WebDriver estรกndar, sugieren localizadores y corrigen automรกticamente los selectores cuando cambia el DOM.

Selenium Controlador web Java Programa

Selenium Java Ejemplo

Usando el Java clase โ€œmiclaseโ€ que creamos en el tutorial anterior, intentemos crear un script WebDriver que:

Paso 1: ha podido recuperar Mercury Pรกgina de inicio de excursiones
Paso 2: verificar su tรญtulo
Paso 3: imprimir el resultado de la comparaciรณn
Paso 4: ciรฉrrelo antes de finalizar todo el programa.

Selenium Ejemplo de WebDriver Code

A continuaciรณn se muestra el cรณdigo WebDriver real para la lรณgica presentada por el escenario anterior.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Nota: Comenzando Firefox 35, necesitas usar el controlador gecko creado por Mozilla para usar Web Driver. Selenium 3.0, Gecko y Firefox tienen problemas de compatibilidad y configurarlos correctamente puede convertirse en una tarea ardua. Si el cรณdigo no funciona, cambie a una versiรณn inferior Firefox versiรณn 47 o inferior. Alternativamente, puede ejecutar sus scripts en Chrome. Selenium Funciona de inmediato en Chrome. Solo necesitas cambiar 3 lรญneas de cรณdigo para que tu script funcione con Chrome o Firefox

Explicando el cรณdigo

Importaciรณn de paquetes

Para comenzar, debes importar los siguientes dos paquetes:

  1. org.openqa.selenium.*โ€“ contiene la clase WebDriver necesaria para crear una instancia de un nuevo navegador cargado con un controlador especรญfico
  2. org.openqa.selenium.firefox.FirefoxDestornillador - contiene el FirefoxClase de controlador necesaria para crear una instancia de un Firefox-controlador especรญfico en el navegador instanciado por la clase WebDriver

Si su prueba necesita acciones mรกs complicadas, como acceder a otra clase, tomar capturas de pantalla del navegador o manipular archivos externos, definitivamente necesitarรก importar mรกs paquetes.

Creaciรณn de instancias de objetos y variables.

Normalmente, asรญ es como se crea una instancia de un objeto controlador.

WebDriver driver = new FirefoxDriver();

A FirefoxLa clase de controlador sin parรกmetros significa que el valor predeterminado Firefox El perfil serรก lanzado por nuestro Java programa. El valor predeterminado Firefox El perfil es similar al de lanzamiento. Firefox en modo seguro (no se cargan extensiones).

Para mayor comodidad, guardamos la base. URL y el tรญtulo esperado como variables.

Iniciar una sesiรณn de navegador

WebDriver's get () Este mรฉtodo se utiliza para iniciar una nueva sesiรณn del navegador y dirigirla a la URL que usted especifique como su parรกmetro.

driver.get(baseUrl);

Obtenga el tรญtulo de la pรกgina real

La clase WebDriver tiene la getTitle () mรฉtodo que siempre se utiliza para obtener el tรญtulo de la pรกgina actualmente cargada.

actualTitle = driver.getTitle();

Compare los valores esperados y reales

Esta parte del cรณdigo simplemente utiliza un bรกsico Java Estructura if-else para comparar el tรญtulo real con el esperado.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Terminar una sesiรณn del navegador

El evento "close()El mรฉtodo "se utiliza para cerrar la ventana del navegador.

driver.close();

Terminar todo el programa

Si usa este comando sin cerrar primero todas las ventanas del navegador, todo su... Java El programa finalizarรก dejando abierta la ventana del navegador.

System.exit(0);

Ejecuciรณn de la prueba

Hay dos formas de ejecutar cรณdigo en Eclipse IDE

  1. On Eclipsebarra de menรบ, haga clic en Ejecutar > Ejecutar.
  2. Prensa Ctrl + F11 para ejecutar el cรณdigo completo.

Ejecuciรณn de la prueba

Si hiciste todo correctamente, Eclipse mostrarรญa "ยกPrueba aprobada!"

Ejecuciรณn de la prueba

Localizaciรณn de elementos de la GUI

La localizaciรณn de elementos en WebDriver se realiza utilizando el botรณn "encontrarElemento(Por.localizador())" mรฉtodo. La parte "localizador" del cรณdigo es la misma que cualquiera de los localizadores discutidos anteriormente en el Selenium IDE capรญtulos de estos tutoriales. De hecho, se recomienda que ubique los elementos de la GUI utilizando IDE y, una vez identificados correctamente, exporte el cรณdigo a WebDriver.

Aquรญ hay una Selenium Cรณdigo de ejemplo que localiza un elemento por su ID. Facebook se utiliza como base. URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Se utilizรณ el getTagName () mรฉtodo para extract el nombre de la etiqueta de ese elemento en particular cuyo id es โ€œemailโ€. Cuando se ejecute, este cรณdigo deberรญa poder identificar correctamente el nombre de la etiqueta โ€œinputโ€ y lo imprimirรก en EclipseLa ventana de la consola.

Localizaciรณn de elementos de la GUI

Resumen para localizar elementos

Variation Mareas Ideales para Lecciones Muestra
Por.nombredeclase encuentra elementos basados โ€‹โ€‹en el valor del atributo "clase" findElement(By.className(โ€œalgunNombreClaseโ€))
Por.cssSelector encuentra elementos basados โ€‹โ€‹en el motor selector CSS subyacente del controlador findElement(Por.cssSelector(โ€œinput#emailโ€))
Por.id localiza elementos por el valor de su atributo "id" encontrarElemento(Por.id(โ€œalgรบnIdโ€))
 
Por.linkText encuentra un elemento de enlace por el texto exacto que muestra findElement(By.linkText(โ€œREGISTROโ€))
 
Por nombre localiza elementos por el valor del atributo "nombre" encontrarElemento(Por.nombre(โ€œalgรบnNombreโ€))
 
Por.partialLinkText localiza elementos que contienen el texto del enlace dado findElement(By.partialLinkText(โ€œREGโ€))
 
Por.nombredeetiqueta localiza elementos por su nombre de etiqueta encontrarElemento(By.tagName(โ€œdivโ€))
 
Por.xpath localiza elementos a travรฉs de XPath findElement(By.xpath(โ€œ//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]โ€))

Nota sobre el uso de findElement(By.cssSelector())

By.cssSelector() no admite la funciรณn "contiene". Considera el Selenium Cรณdigo IDE a continuaciรณn โ€“

Nota sobre el uso de findElement(By.cssSelector())

In Selenium IDE anterior, pasรณ toda la prueba. Sin embargo en el Selenium En el siguiente script de WebDriver, la misma prueba generรณ un error porque WebDriver no admite la palabra clave "contiene" cuando se usa en el mรฉtodo By.cssSelector().

Nota sobre el uso de findElement(By.cssSelector())

Comandos comunes

Creaciรณn de instancias de elementos web

En lugar de utilizar la larga sintaxis โ€œdriver.findElement(By.locator())โ€ cada vez que acceda a un elemento en particular, podemos crear una instancia de un objeto WebElement para รฉl. La clase WebElement estรก contenida en el paquete โ€œorg.openqa.selenium.*โ€.

Creaciรณn de instancias de elementos web

Al hacer clic en un elemento

Hacer clic es quizรกs la forma mรกs comรบn de interactuar con los elementos web. El click() El mรฉtodo se utiliza para simular el clic de cualquier elemento. El siguiente Selenium Java el ejemplo muestra cรณmo click() se utilizรณ para hacer clic en Mercury Botรณn "Iniciar sesiรณn" de Tours.

Al hacer clic en un elemento

Se deben tener en cuenta las siguientes cosas al utilizar el mรฉtodo click().

  • No requiere ningรบn parรกmetro/argumento.
  • El mรฉtodo espera automรกticamente a que se cargue una nueva pรกgina, si corresponde.
  • El elemento sobre el que se harรก clic debe ser visible (el alto y el ancho no deben ser iguales a cero).

Obtener Comandos

Los comandos Get obtienen diversa informaciรณn importante sobre la pรกgina/elemento. A continuaciรณn se muestran algunos comandos โ€œobtenerโ€ importantes con los que debe estar familiarizado.

Comandos Uso
get ()

Uso de la muestra:

  • Abre automรกticamente una nueva ventana del navegador y busca la pรกgina que especifica entre parรฉntesis.
  • Es la contraparte de Selenium Comando โ€œabrirโ€ del IDE.
  • El parรกmetro debe ser un Cordรณn objeto.
getTitle ()

Uso de la muestra:

  • No necesita parรกmetros
  • Obtiene el tรญtulo de la pรกgina actual.
  • Los espacios en blanco iniciales y finales se recortan
  • Devuelve una cadena nula si la pรกgina no tiene tรญtulo
getPageSource()

Uso de la muestra:

  • No necesita parรกmetros
  • Devuelve el cรณdigo fuente de la pรกgina como un valor de cadena.
obtenerUrlActual()

Uso de la muestra:

  • No necesita parรกmetros
  • Obtiene la cadena que representa el actual URL que el navegador estรก mirando
getText ()

Uso de la muestra:

  • Obtiene el texto interno del elemento que especifica

Comandos de navegaciรณn

Estos comandos le permiten actualizar, acceder y alternar entre diferentes pรกginas web.

navegar a()

Uso de la muestra:

  • Abre automรกticamente una nueva ventana del navegador y busca la pรกgina que especifica entre parรฉntesis.
  • Hace exactamente lo mismo que el get() mรฉtodo.
navegar().actualizar()

Uso de la muestra:

  • No necesita parรกmetros.
  • Actualiza la pรกgina actual.
navegar().volver()

Uso de la muestra:

  • No necesita parรกmetros
  • Le lleva atrรกs una pรกgina en el historial del navegador.
navegar().adelante()

Uso de la muestra:

  • No necesita parรกmetros
  • Lo lleva hacia adelante una pรกgina en el historial del navegador.

Cerrar y salir del navegador Windows

close()

Uso de la muestra:

  • No necesita parรกmetros
  • Cierra sรณlo la ventana del navegador que WebDriver estรก controlando actualmente.
dejar()

Uso de la muestra:

  • No necesita parรกmetros
  • Cierra todas las ventanas que WebDriver ha abierto.

Cerrar y salir del navegador Windows

Para ilustrar claramente la diferencia entre close() y quit(), intente ejecutar el siguiente cรณdigo. Utiliza una pรกgina web que abre automรกticamente una ventana al cargar la pรกgina y abre otra despuรฉs de salir.

Cerrar y salir del navegador Windows

Tenga en cuenta que solo se cerrรณ la ventana principal del navegador y no las dos ventanas emergentes.

Cerrar y salir del navegador Windows

Pero si usas quit(), se cerrarรกn todas las ventanas, no solo la principal. Intenta ejecutar el cรณdigo que aparece a continuaciรณn y notarรกs que las dos ventanas emergentes anteriores tambiรฉn se cerrarรกn automรกticamente.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Cambiar entre fotogramas

Para acceder a los elementos de la GUI en un marco, primero debemos indicarle a WebDriver que se centre en el marco o la ventana emergente antes de poder acceder a los elementos dentro de ellos. Tomemos, por ejemplo, la pรกgina web https://demo.guru99.com/selenium/deprecated.html

Cambiar entre fotogramas

Esta pรกgina tiene 3 marcos cuyos atributos de โ€œnombreโ€ se indican arriba. Deseamos acceder al enlace "Obsoleto" rodeado arriba en amarillo. Para hacer eso, primero debemos indicarle a WebDriver que cambie al marco "classFrame" usando el โ€œcambiar a().frame()โ€ mรฉtodo. Usaremos el atributo de nombre del marco como parรกmetro para la parte "frame()".

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Despuรฉs de ejecutar este cรณdigo, verรก que el marco "classFrame" se lleva a la pรกgina "API obsoleta", lo que significa que nuestro cรณdigo pudo acceder con รฉxito al enlace "Obsoleto".

Cambiar entre ventanas emergentes Windows

WebDriver permite que se muestren ventanas emergentes como alertas, a diferencia de Selenium IDE. Para acceder a los elementos dentro de la alerta (como el mensaje que contiene), debemos utilizar el "switchTo().alert()" mรฉtodo. En el cรณdigo a continuaciรณn, utilizaremos este mรฉtodo para acceder al cuadro de alerta y luego recuperar su mensaje utilizando el "getText()" mรฉtodo y luego cerrar automรกticamente el cuadro de alerta utilizando el "switchTo().alert().accept()" mรฉtodo.

Primero, dirรญgete a https://output.jsbin.com/usidix/1 y haga clic manualmente en "ยกIr!" abotone allรญ y vea usted mismo el texto del mensaje.

Cambiar entre ventanas emergentes Windows

Veamos el Selenium cรณdigo de ejemplo para hacer esto-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

En la Eclipse consola, observe que el mensaje de alerta impreso es:

Cambiar entre ventanas emergentes Windows

Murga

Hay dos tipos de esperas.

  1. Espera implรญcita: se utiliza para establecer el tiempo de espera predeterminado en todo el programa.
  2. Espera explรญcita: se utiliza para establecer el tiempo de espera solo para una instancia en particular.

Espera implรญcita

  • Es mรกs sencillo de codificar que las esperas explรญcitas.
  • Generalmente se declara en la parte de creaciรณn de instancias del cรณdigo.
  • Sรณlo necesitarรกs un paquete adicional para importar.

Para comenzar a usar una espera implรญcita, deberรก importar este paquete a su cรณdigo.

Espera implรญcita

Luego, en la parte de creaciรณn de instancias de tu cรณdigo, agrega esto.

Espera implรญcita

Espera explรญcita

Las esperas explรญcitas se realizan utilizando las clases WebDriverWait y ExpectedCondition.. Para lo siguiente Selenium En el ejemplo de WebDriver, esperaremos hasta 10 segundos para que un elemento cuya identificaciรณn sea "nombre de usuario" se vuelva visible antes de continuar con el siguiente comando. Aquรญ estรกn los pasos.

Paso 1:

Importe estos dos paquetes:

Espera explรญcita

Paso 2:

Declare una variable WebDriverWait. En este ejemplo, usaremos "myWaitVar" como nombre de la variable.

Espera explรญcita

Paso 3:

Utilice myWaitVar con ExpectedConditions en partes donde necesite que se produzca la espera explรญcita. En este caso, usaremos una espera explรญcita en el "nombre de usuario" (Mercury Pรกgina de inicio de Tours) antes de escribir el texto "tutorial" en รฉl.

Espera explรญcita

Condiciones

Los siguientes mรฉtodos se utilizan en condiciones y bรบsqueda.ping operaciones โ€”

  • estรก habilitado() Se utiliza cuando se desea verificar si un determinado elemento estรก habilitado o no antes de ejecutar un comando.

Las condiciones estรกn habilitadas ()

  • se muestra() Se utiliza cuando se desea verificar si un determinado elemento se muestra o no antes de ejecutar un comando.

Las condiciones se muestran()

  • isSelected () Se utiliza cuando se desea verificar si un determinado Casilla de verificaciรณn, botรณn de opciรณn u opciรณn en un cuadro desplegable estรก seleccionado. No funciona con otros elementos.

Las condiciones estรกn seleccionadas ()

Usando condiciones esperadas

La clase ExpectedConditions ofrece un conjunto mรกs amplio de condiciones que puede usar junto con el mรฉtodo Until() de WebDriverWait.

A continuaciรณn se muestran algunos de los mรฉtodos ExpectedConditions mรกs comunes.

  • alertaEstรกPresente() โ€“ espera hasta que se muestre un cuadro de alerta.

Usando la alerta de condiciones esperadasIsPresent()

  • elementoToBeClickable() โ€“ Espera hasta que un elemento sea visible y, al mismo tiempo, habilitado. La muestra Selenium Code A continuaciรณn, se esperarรก hasta que el elemento con id="username" sea visible y estรฉ habilitado antes de asignar ese elemento como una variable WebElement llamada "txtUserName".

Usando condiciones esperadas

  • marcoToBeAvailableAndSwitchToIt() โ€“ Espera hasta que el marco dado ya estรฉ disponible y luego cambia automรกticamente a รฉl.

Usando el elemento de condiciones esperadasToBeClickable()

Captura de excepciones

Al utilizar isEnabled(), isDisplayed() e isSelected(), WebDriver supone que el elemento ya existe en la pรกgina. De lo contrario, generarรก un error. Ninguna excepciรณn de elemento tal. Para evitar esto, deberรญamos utilizar un bloque try-catch para que el programa no se interrumpa.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Si utiliza esperas explรญcitas, el tipo de excepciรณn que debe detectar es "TimeoutException".

Captura de excepciones

Preguntas Frecuentes

Instale JDK, un IDE como Eclipse o IntelliJ, el Selenium Java bibliotecas y el controlador de navegador correspondiente. Herramientas de automatizaciรณn de compilaciรณn como Maven o Gradle simplificar la gestiรณn de dependencias.

La IA repara automรกticamente los localizadores, genera casos de prueba a partir de historias de usuario e identifica pruebas inestables. Plataformas como TestimMabl y Applitools incorporan IA para una creaciรณn, ejecuciรณn y validaciรณn visual mรกs inteligentes.

Sรญ. GitHub Copilot, Cursor y JetBrains Generaciรณn de IA Java Selenium Scripts a partir de pasos en lenguaje natural, incluyendo esperas, aserciones y objetos de pรกgina. Reducen considerablemente el cรณdigo repetitivo para nuevos escenarios de prueba.

findElement devuelve el primer WebElement coincidente o lanza una excepciรณn NoSuchElementException. findElements devuelve una lista de todos los resultados coincidentes y una lista vacรญa si no se encuentra ninguno, sin lanzar nunca la excepciรณn.

Thread.sleep pausa la ejecuciรณn durante un tiempo fijo, independientemente del estado de la pรกgina, lo que ralentiza las ejecuciones rรกpidas y provoca fallos en las lentas. Utilice WebDriverWait con ExpectedConditions para esperar solo el tiempo necesario.

Selenium admite ChromeDriver, GeckoDriver para Firefox, EdgeDriver, SafariDriver e IEDriverServer. Selenium En la versiรณn 4, el administrador descarga automรกticamente el controlador correcto.

Configurar ChromeOptions o FirefoxObjeto Options con setAcceptInsecureCerts(true). Esto le indica al navegador que ignore los certificados no vรกlidos para que la sesiรณn de WebDriver pueda continuar.

WebDriverManager descarga y configura automรกticamente el binario del controlador de navegador correcto para la versiรณn de navegador instalada, eliminando el mantenimiento manual de controladores y reduciendo el tiempo de configuraciรณn para los nuevos colaboradores.

Resumir este post con: