¡Todo lo que necesitas saber sobre el manejo de excepciones en Selenium está aquí!
¿Qué es una excepción?
Como sugiere el nombre, las excepciones son un término común entre los programadores y no tienen nada que ver con ningún lenguaje de programación específico. Se refiere a un evento en el que un programa no proporciona el resultado esperado debido a una parada repentina. Normalmente, la posibilidad de excepciones proviene de lo siguiente:
- Memoria virtual Java (JVM) insuficiente
- El archivo solicitado no existe en el sistema de destino
- Los datos proporcionados por el usuario no son válidos
- La red se desconectó repentinamente. La conexión de red se desconecta repentinamente durante la comunicación normal
Tipos de excepciones en Java
Tipos de excepciones en Java
Tipos de excepciones en Java
Estos son tipos de excepción en Java. Tipos de excepciones en Java
1. Excepciones marcadas: el compilador verificará estas excepciones durante el proceso de compilación y verificará si han sido manejadas. Si no se procesan, el sistema informará un error 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: estas excepciones pueden generarse cuando un programa ejecuta una consulta de base de datos basada en la sintaxis SQL.
- IOException: esta excepción puede producirse cuando un programa realiza una operación de flujo de E/S no válida en un archivo.
- ClassNotFoundException: esta excepción puede producirse cuando la JVM no puede encontrar la clase Java requerida.
2 Excepciones no comprobadas: Son errores lógicos que ocurren durante la ejecución del programa y, por lo tanto, a menudo se denominan excepciones de tiempo de ejecución. Estas excepciones no se verifican en el momento de la compilación o se ignoran 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 producirse al acceder a un objeto con un valor nulo.
- ArrayIndexOutofBound: esta excepción puede producirse al acceder a una matriz con un valor de índice no válido.
- IllegalArgumentException (excepción de parámetro ilegal): Esta excepción puede generarse cuando el programa pasa un parámetro incorrecto a un método.
- NumberFormatException: Esta excepción puede generarse cuando el programa pasa una cadena a un método que no se puede convertir a un número.
- Excepción aritmética: Esta excepción puede generarse cuando un programa realiza una operación aritmética incorrecta (como dividir un número entre 0).
Estándares de manejo de excepciones
Al mejorar el manejo de excepciones, no solo podemos 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 (POO) tienen diferentes enfoques para el manejo de excepciones. Estos 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 medidas necesarias. En otras palabras, podemos crear un objeto de clase de excepción para mostrar información de depuración cuando se encuentra una excepción usando los siguientes métodos predefinidos:
- printStackTrace(): esta función se puede usar para imprimir el seguimiento de la pila, excepción nombre e información importante adicional sobre la excepción.
- getMessage(): Esta función ayuda a obtener una descripción detallada de la excepción.
intentar
{
// Código
} catch (Excepción e){
// Procesamiento Código para excepciones
}
Además, los bloques Try-Catch se pueden usar de otras formas avanzadas; por ejemplo, es posible que queramos capturar múltiples excepciones de un bloque de código, para poder Utilice varios bloques catch después del bloque try para manejar diferentes excepciones. Además, no hay límite para la cantidad de bloques catch que podemos usar después de un bloque try.
intentar
{
//Código
} catch (ExceptionType1 e1) {
//Procesamiento Código para la excepción 1
} catch (ExceptionType2 e2) {
//Código para manejar la excepción 2
}
Throw/ Throw : Si el programador desea lanzar una excepción explícitamente, la palabra clave throw se puede usar junto con un objeto de excepción para manejar en tiempo de ejecución.
public static voidExceptionProgram() throws Exception{
try {
// escribe tu código aquí
}Catch(Exception b ){
// Lanzar explícitamente una excepción
throw(b) }
}
}
< p); >Si los desarrolladores desean lanzar más de una excepción, pueden hacerlo usando la palabra clave throws en la cláusula de la firma del método, y luego depende de quien llama el método manejar la excepción.public static voidExceptionProgram() lanza ExceptionType1, ExceptionType2{
prueba {
// Escribe tu código aquí
} catch ( ExceptionType1 e1){
// Código para manejar la excepción 1
} catch ( ExceptionType1 e2){
// Código para manejar la excepción 2
}
Finalmente: este bloque de código generalmente se crea después del bloque de código try-catch. Es decir, se ejecutará independientemente de si se lanza una excepción.
intente {
//Código
} catch (ExceptionType1 e1) {
//Catch bloque
} catch (ExceptionType2 e2) {
//Capturar bloque
} finalmente {
//El último bloque siempre se ejecuta.
}
Excepciones comunes en Selenium
WebDriverException define las excepciones de Selenium. Seleccionamos las excepciones más comunes para introducir y proporcionar excepciones simples para las soluciones de manejo de Selenium. /p>
1.NoSuchElementException
Selenium puede causar problemas cuando WebDriver no puede encontrar el elemento requerido
Cuando WebDriver no puede encontrar el elemento requerido, Selenium puede causar problemas.
Selenium puede generar esta excepción cuando WebDriver no puede encontrar el elemento requerido. La NoSuchElementException aquí es una subclase de la clase NotFoundException y generalmente ocurre cuando un programa usa un localizador no válido.
Además, si el WebDriver todavía está atascado en la página anterior, o está cargando la página siguiente y el localizador requerido ha llegado a la página siguiente, se generará una excepción debido a este retraso. Por lo tanto, debemos intentar minimizar la aparición de tales excepciones mediante pruebas de procesamiento de espera adecuadas.
Por supuesto, dichas excepciones se pueden capturar en un bloque catch y realizar allí las acciones necesarias para continuar con las pruebas automatizadas. Por ejemplo:
intente { driver.findElement(By.id("form-save")).click(); } catch (NoSuchElementException e){
System.out. println ("WebDriver no puede localizar 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. Entonces, 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 windowHandle : driver.getWindowHandles()){
try { driver.switchTo().window(handle } catch (NoSuchWindowException e) { System); .out.println("Excepción al cambiar de ventana del navegador"); Los intentos de Selenium pueden generar dicha excepción al cambiar a una alerta inexistente o no válida. Para ello, recomiendo a los desarrolladores que utilicen tiempos de espera de alerta del navegador explícitos o apropiados. Si aún no puede esperar la alerta, puede usar un bloque catch para detectar la excepción. Por ejemplo:
intente {
driver.switchTo().alert().accept() } catch (NoSuchAlertException e){
System.out . println("WebDriver no puede localizar la alerta"); }
WebDriver no puede localizar la alerta.
4.ElementNotVisibleException
Esta excepción se define como una subclase de la clase ElementNotInteractableException. Selenium puede generar esta excepción cuando WebDriver intenta realizar una operación en un elemento que no es visible o interactivo. Por esta razón, recomiendo que los desarrolladores permitan que Selenium se agote cuando sea necesario. Por ejemplo:
intente { driver.findElement(By.id("form-save")).click(); } catch (ElementNotVisibleException e){
System.out. println ("WebDriver no puede hacer que el elemento funcione.
"WebDriver no puede localizar el elemento"); }
WebDriver no puede localizar el elemento.
5.ElementNotSelectableException
Esta excepción es una subclase de la clase InvalidElementStateException. En Selenium, ElementNotSelectableException significa que existe un elemento en la página web, pero WebDriver no puede seleccionarlo.
Los bloques Catch no solo pueden manejar tales excepciones en Selenium sino que también pueden volver a seleccionar el mismo elemento usando las mismas o diferentes técnicas. Por ejemplo:
intente {
Seleccionar menú desplegable = new Select(driver.findElement(By.id("swift"))) catch( ElementNotSelectableException e){
System.out.println("No se pudo seleccionar el elemento") }
6.NoSuchSessionException
Selenium utilizará el comando driver.quit() para salir del modo automático. sesión del navegador Estas excepciones se lanzan más tarde y cuando se llama al método de prueba. Por supuesto, también pueden producirse excepciones si el navegador falla o se desconecta. Para evitar NoSuchSessionException, podemos salir del navegador al final del conjunto de pruebas y asegurarnos de que la versión del navegador utilizada para las pruebas automatizadas sea estable. Por ejemplo:
controlador WebDriver privado
@BeforeSuite
configuración vacía pública(){ controlador = nuevo ChromeDriver() }
@AccessException Podemos salir del navegador al final del conjunto de pruebas y asegurarnos de que la versión del navegador utilizada para las pruebas automatizadas sea estable.
@AfterSuite
public void tearDown() { driver.quit() }
7. StaleElementReferenceException
Cuando el programa lo requiere Selenium lanzará StaleElementReferenceException cuando el elemento ya no exista en el DOM. Por supuesto, esta excepción también se producirá si el DOM no se carga correctamente o si WebDriver está atascado en la página incorrecta. Puede detectar la excepción usando un bloque catch y usar XPath dinámico o intentar actualizar la página.
8. TimeoutException
Selenium puede lanzar este tipo de excepción cuando el 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 tiempos de espera adecuados, si el elemento aún no es interactivo, se generará una TimeoutException. Por lo tanto, tenemos que verificar el retraso del elemento realizando pruebas manuales para poder tomar medidas adicionales para manejar la espera.
9.InvalidSelectorException
Selenium lanzará este tipo de excepción cuando se utilice un selector no válido o incorrecto. Por supuesto, puede ocurrir una situación similar al crear un XPATH.
Para hacer esto, necesitamos 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, puede utilizar herramientas como SelectorHub y ChroPath para validar localizadores.
10.NoSuchFrameException
NoSuchFrameException es una subclase de la clase NotFoundException. Selenium puede generar esta excepción cuando WebDriver intenta cambiar a un marco no válido o inexistente en la página actual. Para hacer esto, primero debemos asegurarnos de que el nombre o ID del marco sea correcto y, segundo, que cargar el marco no demore demasiado. Por supuesto, si lleva mucho tiempo cargar el marco en la página, entonces tendremos que arreglar la espera en consecuencia. Por ejemplo
intente {
driver.switchTo().frame("frame_1" } catch (NoSuchFrameException e){
System.out.println ("No se pudo encontrar el marco deseado")
}
Resumen
En resumen, el manejo de excepciones es crucial para que cualquier script de automatización y estructura lógica se adapte a varios. escenarios. Asegúrese de utilizar selectivamente los diez comandos comunes de manejo de excepciones anteriores para Selenium en sus scripts de automatización según la comprensión de las características de cada excepción.