Red de conocimiento de recetas - Recetas de frutas - Todo lo que necesita saber sobre el manejo de excepciones de Selenium está aquí.

Todo lo que necesita saber sobre el manejo de excepciones de Selenium está aquí.

¿Qué es anormal?

Como sugiere el nombre, y como término común entre los programadores, “excepción” no tiene nada que ver con ningún lenguaje de programación específico. Un evento en el que un programa no logra entregar el resultado esperado debido a una terminación repentina. Por lo general, los factores potenciales que causan excepciones suelen provenir de los siguientes aspectos:

Desventajas de la memoria virtual Java (JVM)

El archivo solicitado no existe en el sistema de destino.

El usuario proporcionó datos no válidos.

Durante la comunicación normal, la red se desconectó repentinamente.

Tipos de excepciones en Java

1. Excepciones comprobadas: durante la compilación, el compilador comprobará estas excepciones y verificará si han sido manejadas. Si no se maneja, el sistema informará errores de compilación. Por lo tanto, a menudo se les llama excepciones en tiempo de compilación. A continuación se muestran algunos ejemplos comunes de tales excepciones:

SQLException: esta excepción puede ocurrir cuando un programa ejecuta una consulta de base de datos basada en la sintaxis SQL.

Ioexcepción: esta excepción puede generarse cuando el programa realiza una operación de flujo de E/S no válida en el archivo.

ClassNotFoundException: esta excepción puede generarse cuando la JVM no puede encontrar la clase Java requerida.

2. Excepciones no comprobadas: estas excepciones son errores lógicos que ocurren durante la ejecución del programa, por lo que a menudo se denominan excepciones de tiempo de ejecución. Esta excepción no se detecta en el momento de la compilación o se ignora durante todo el proceso de compilación. A continuación se muestran algunos ejemplos típicos de este tipo de excepciones:

NullPointerException: esta excepción puede generarse al acceder a un objeto con un valor nulo.

Arrayindexoutofbound: Esta excepción puede ocurrir al acceder a una matriz con un valor de índice no válido.

IllegalArgumentException: Esta excepción puede generarse cuando un programa pasa parámetros incorrectos a un método.

NumberFormatException: esta excepción puede ocurrir cuando un programa pasa una cadena a un método que no se puede convertir en un número.

Excepción aritmética: Esta excepción puede ocurrir cuando un programa realiza una operación aritmética incorrecta (como dividir un número por cero).

Estándares de manejo de excepciones

Al mejorar las capacidades de manejo de excepciones, no solo puede mantener el código limpio, sino también mejorar la mantenibilidad, escalabilidad y legibilidad del código. Por supuesto, los diferentes lenguajes de programación orientada a objetos (OOP) tienen diferentes métodos de manejo de excepciones. Los siguientes son algunos estándares comunes de manejo de excepciones de Java:

Try-Catch: esta combinación de palabras clave se puede utilizar para detectar excepciones. Entre ellos, el bloque try debe colocarse al principio y el bloque catch debe colocarse al final del bloque try para detectar la excepción y tomar las acciones necesarias. Es decir, cuando encontramos una excepción, podemos mostrar información de depuración creando un objeto de la clase de excepción usando los siguientes métodos predefinidos:

Imprimir seguimiento de pila(): esta función se puede usar para imprimir Seguimiento de pila, nombre de excepción y otra información importante de excepción.

Getmessage(): Esta función ayuda a obtener una descripción detallada de la excepción.

Probar

{

//Código

} catch(Exception e){

//Procesando Código de excepción

}

Al mismo tiempo, el bloque Try-Catch también puede manejar excepciones de otras formas avanzadas. Por ejemplo, es posible que queramos detectar múltiples excepciones de un solo bloque de código, de modo que podamos manejar diferentes excepciones a través de múltiples bloques catch después del bloque try. Además, utilizamos un número ilimitado de bloques catch después del bloque try.

Pruebe

{

//código

} catch(tipo de excepción 1 y 1){

//Código para manejar la excepción 1

} catch(ExceptionType2 e2){

//Código para manejar la excepción 2

}

Lanzar/Lanzar: si el programador desea lanzar una excepción explícitamente, puede usar la palabra clave Throw junto con el objeto de excepción que se manejará en tiempo de ejecución.

Excepción de anulación estática públicaProgram() arroja una excepción {

Prueba {

//Escribe el código aquí

} Catch(Exception b) {

//Crear explícitamente una excepción

Throw(b);}

}

Si el desarrollador quiere lanzar múltiples excepciones se puede lanzar usando la palabra clave throws en la cláusula de firma del método, y la persona que llama al método manejará estas excepciones.

Programa de excepción de anulación estática pública() arroja ExceptionType1, ExceptionType2{

Prueba {

//Escribe el código aquí

} catch(excepción tipo 1 e 1){

//Código para manejar la excepción 1

} catch(tipo de excepción 1 E2){

//Código para manejar la excepción 2

}

Finalmente: este bloque de código generalmente se crea después de un bloque try-catch. En otras palabras, se ejecutará independientemente de si se produce una excepción o no.

Pruebe {

//código

} catch(tipo de excepción 1 y 1){

//bloque Catch

} catch(ExceptionType2 e2){

//Catch block

}Finalmente {

el bloque finalmente siempre se ejecuta.

}

Excepciones comunes en Selenium

WebDriverException define varias excepciones en Selenium, elegimos las excepciones más comunes para introducirlas y proporcionarlas para Selenium Una excepción simple Se propone una solución de manejo:

1.NoSuchElementException

Cuando WebDriver no puede encontrar el elemento requerido, Selenium puede generar dicha excepción. La NoSuchElementException aquí es una subclase de la clase NotFoundException y generalmente ocurre cuando el programa usa localizadores no válidos.

Además, si WebDriver todavía está atascado en la página anterior o está cargando la página siguiente y el localizador requerido ya llegó a la página siguiente, se producirá una excepción debido a este retraso. Por este motivo, debemos minimizar la aparición de dichas excepciones mediante pruebas de procesamiento de espera adecuadas.

Por supuesto, dichas excepciones se pueden capturar en un bloque catch y las acciones necesarias se pueden realizar allí para continuar con las pruebas automatizadas. Por ejemplo:

Pruebe { driver . buscar elemento(por . id(" form-save ")).

click();} catch(NoSuchElementException e){

System.out.println("WebDriver no puede encontrar el elemento");}

2.NoSuchWindowException

Esta excepción también es una subclase de la clase NotFoundException. Si WebDriver intenta cambiar a una ventana del navegador no válida, WebDriver generará NoSuchWindowException. Por lo tanto, una buena manera de implementar el cambio de ventana es obtener primero la sesión de la ventana activa y luego realizar las operaciones requeridas en la ventana correspondiente. Por ejemplo:

for(String window handle: driver . getwindowhandles()){

Intente { driver.switchTo(). Window (handle); } catch (NoSuchWindowException e) { system . println ("Se produjo una excepción al cambiar de ventana del navegador"); p>

Selenium puede generar excepciones como esta cuando WebDriver intenta cambiar a una alerta inexistente o no válida. En este sentido, recomiendo a los desarrolladores que utilicen tiempos de espera explícitos o adecuados para gestionar diversas advertencias en el navegador. Si aún no puede esperar a recibir la alerta, el bloque catch puede detectar la excepción. Por ejemplo:

Pruebe {

driver.switchTo(). alarma(). aceptar();} catch(NoSuchAlertException e){

System.out.println("WebDriver no puede encontrar la alerta");}

4.ElementNotVisibleException

La excepción se define como una subclase de la clase de excepción ElementNotInterlactable. Selenium puede generar excepciones como esta cuando WebDriver intenta realizar operaciones en elementos invisibles o no interactivos. En este sentido, recomiendo a los desarrolladores que dejen que Selenium espere los tiempos de espera apropiados cuando realmente sea necesario. Por ejemplo:

Pruebe { driver . buscar elemento(por . id(" form-save ")). click();} catch(ElementNotVisibleException e){

System.out.println("WebDriver no puede encontrar el elemento");}

5.ElementNotSelectableException

Esta excepción pertenece a una subclase de la clase InvalidElementStateException. En Selenium, ElementNotSelectableException significa que aunque existe un elemento en una página web, WebDriver no puede seleccionarlo.

El bloque Catch no solo maneja esta excepción en Selenium sino que también vuelve a seleccionar el mismo elemento usando las mismas o diferentes técnicas.

Por ejemplo:

Pruebe {

Seleccionar menú desplegable = new Seleccionar(driver . find element(by . id(" swift ")));} catch(ElementNotSelectableException e){< / p>

System.out.println("No se puede seleccionar el elemento")}

6.NoSuchSessionException

Selenium saldrá de la sesión automatizada del navegador a través de driver.quit( ) comando Esta excepción se genera más tarde y cuando se llama al método de prueba. Por supuesto, esta excepción también puede ocurrir si el navegador falla o se desconecta. Para evitar NoSuchSessionException, podemos salir del navegador al final del conjunto de pruebas y garantizar la estabilidad de la versión del navegador utilizada para las pruebas automatizadas. Por ejemplo:

Controlador WebDriver privado;

@BeforeSuite suite

configuración pública void(){ controlador = nuevo controlador Chrome();}

@AfterSuite

public void derribar(){ driver . quit();}

7.StaleElementReferenceException

Cuando el elemento requerido por el programa no Cuando existe en el DOM, Selenium lanzará StaleElementReferenceException. Por supuesto, esta excepción también puede ocurrir si el DOM no se carga correctamente o si WebDriver está atascado en la página incorrecta. En este sentido, puede detectar la excepción utilizando un bloque catch y utilizar XPath dinámico, o intentar actualizar la página. Por ejemplo:

Intente { driver . find element(by . XPath("//*[contains(@ id, first name '))]"). sendKeys("Aaron");

} catch(StaleElementReferenceException e){

System.out.println("No se puede interactuar con el elemento requerido")}

8. Excepción de tiempo de espera

Esta excepción puede generarse en Selenium cuando WebDriver excede el límite de tiempo de espera para ejecutar el siguiente paso. Las diversas esperas de Selenium se utilizan a menudo para evitar excepciones como ElementNotVisibleException. Sin embargo, incluso con esperas adecuadas, si el elemento aún no es interactivo, se generará una TimeoutException. Para ello, tenemos que realizar pruebas manuales para verificar el retraso de los elementos para su posterior procesamiento y espera.

9.InvalidSelectorException

Selenium generará esta excepción cuando se utilice un selector no válido o incorrecto. Por supuesto, puede surgir una situación similar al crear un XPATH. En este sentido, debemos verificar el script de prueba y probar el flujo de un extremo a otro del script antes de enviar el código a la rama maestra. Además, se pueden utilizar herramientas como SelectorHub y ChroPath para verificar localizadores.

10.NoSuchFrameException

NoSuchFrameException es una subclase de la clase NotFoundException.

Selenium puede generar dicha excepción cuando WebDriver intenta cambiar a un marco no válido o inexistente en la página web actual. Para hacer esto, primero debemos asegurarnos de que el nombre o la identificación del marco sean correctos; en segundo lugar, debemos asegurarnos de que la carga del marco no requiera demasiado tiempo. Por supuesto, si cargar un marco en una página web lleva mucho tiempo, es necesario modificar el proceso de espera correspondiente. Por ejemplo:

Pruebe {

driver.switchTo(). frame(" frame _ 1 ");} catch(NoSuchFrameException e){

System.out.println("No se pudo encontrar el marco requerido")

}

Resumen

En resumen, para adaptarse a diversos escenarios, el manejo de excepciones es muy importante para cualquier script automatizado y estructura lógica. Asegúrese de utilizar de forma selectiva los diez comandos comunes de manejo de excepciones de Selenium anteriores en scripts automatizados según la comprensión de las características de cada excepción.