top 10 selenium exceptions
Manejo de excepciones de Selenium WebDriver mediante el marco de manejo de excepciones - Tutorial de Selenium n. ° 19
Obtener una excepción en el código de automatización es muy común. 'Excepción', como indica la palabra, es un caso especial o poco común.
La ejecución del código de automatización generalmente puede no realizarse como se esperaba debido a muchos factores involucrados en la ejecución, como problemas de estabilidad de la red, problemas de Internet, estabilidad del servidor, etc. Es posible que obtengamos excepciones debido a un tiempo de espera insuficiente o sintaxis, parámetros, etc.
En el último tutorial de WebDriver, aprendimos sobre 3 tipos diferentes de elementos web importantes como Tablas web, marcos y elementos dinámicos y sus mecanismos de manipulación en secuencia de selenio
Antes de seguir adelante con los tutoriales de Framework en este Entrenamiento de selenio serie, aquí en este tutorial aprenderemos sobre tipos de excepciones y cómo manejar excepciones en scripts de Java y Selenium . Los desarrolladores / probadores usan un marco de manejo de excepciones para manejar una excepción en los scripts de selenio.
Lo que vas a aprender:
- ¿Qué es una excepción?
- Ventajas y desventajas del enfoque de evitar manipulaciones
- Tipos de excepciones en Java y Selenium
- Manejo de excepciones
- Excepciones comunes en Selenium WebDriver
- Evitar y manejar excepciones comunes
- # 1) org.openqa.selenium.NoSuchElementException
- # 2) org.openqa.selenium.NoSuchWindowException
- # 3) org.openqa.selenium.NoSuchFrameException
- # 4) org.openqa.selenium.NoAlertPresentException
- # 5) org.openqa.selenium.InvalidSelectorException
- # 6) org.openqa.selenium.ElementNotVisibleException
- # 7) org.openqa.selenium.ElementNotSelectableException
- # 8) org.openqa.selenium.TimeoutException
- # 9) org.openqa.selenium.NoSuchSessionException
- # 10) org.openqa.selenium.StaleElementReferenceException
- Conclusión
- Lectura recomendada
¿Qué es una excepción?
Las excepciones son eventos debido a los cuales el programa java finaliza abruptamente sin dar el resultado esperado. Java proporciona un marco donde un usuario puede manejar excepciones.
El proceso de manejo de Excepciones se denomina Manejo de Excepciones.
Las excepciones deben manejarse porque rompen el flujo normal de ejecución de un programa. Una de las intenciones importantes del manejo de excepciones es evitar esta interrupción y continuar con la ejecución del programa. A veces, es posible que desee realizar una serie de acciones al ocurrir una determinada excepción.
Cuando ocurre una excepción, se crea un objeto de excepción que técnicamente se conoce como ' Lanzar una excepción ' y sumamos Trata de atraparlo bloques como,
|_+_|#1) El fragmento de código que podría generar una excepción se agrega dentro del bloque Try.
#2) La instrucción Catch detecta la excepción y la toma como parámetro.
#3) Cuando no se lanza ninguna excepción, se ejecuta la instrucción try y no la instrucción catch.
Ejemplo : Cuando la secuencia de comandos de selenium falla debido a un localizador incorrecto, el desarrollador debería poder comprender el motivo del error y esto se puede lograr fácilmente si la excepción se maneja correctamente en el programa.
En mi experiencia, es mejor tratar de evitar las excepciones de WebDriver siempre que sea posible y detectar casos verdaderamente excepcionales. Use try / catch para manejar las cosas que salen mal y están fuera de mi control.
¡Evita los que puedo atrapar a otros!
Esta es la mejor estrategia que me ha funcionado.
Por ejemplo, considere una página de prueba que tarda más de lo habitual en cargarse en un servidor de prueba. Obtendremos frecuentes excepciones al realizar acciones en esta página. Entonces, en lugar de simplemente captar esto cada vez, podemos
- Agregue un comando de espera e intente evitar una excepción
- Utilice 'Try / Catch' para manejar en caso de que haya ocurrido un caso verdaderamente excepcional
Reduciendo así las posibilidades de excepciones.
Ventajas y desventajas del enfoque de evitar manipulaciones
Ventajas | Desventajas |
---|---|
1) Este enfoque reduce las posibilidades de obtener excepciones. | 1) Aumenta las líneas de códigos porque agrega código extra para evitar excepciones |
Si todavía se detecta una excepción, 2) sería un caso verdaderamente excepcional que vale la pena verificar | 2) Debe tener una mejor comprensión de la API del controlador web, los comandos y las excepciones |
Reducir el tiempo de depuración. El código de automatización está diseñado para encontrar errores y no desea ver demasiadas 3) excepciones no deseadas y encontrar las razones detrás de cada una de ellas. | |
4) En el bloque Catch, trata con casos más válidos | |
5) Reducir falsas fallas | |
6) Informe más claro |
En este tutorial, discutiremos Evitar y manipular enfoque para las 10 excepciones más comunes en Selenium WebDriver. Antes de eso, obtengamos una comprensión básica del manejo de excepciones y los bloques Try / Catch.
Tipos de excepciones en Java y Selenium
A continuación, describimos los tipos de excepciones y las diferentes formas en que podemos usar el marco de manejo de excepciones en los scripts de selenio.
Hay tres tipos de excepciones:
- Excepción marcada
- Excepción sin marcar
- Error
La jerarquía de clases de excepción y error:
# 1) Excepción marcada: La excepción marcada se maneja durante el tiempo de compilación y da el error de compilación si no se detecta y maneja durante el tiempo de compilación.
Ejemplo : FileNotFoundException , IOException etc.
# 2) Excepción sin marcar: En el caso de la excepción no marcada, un compilador no ordena manejar. El compilador ignora durante el tiempo de compilación.
Ejemplo : ArrayIndexoutOfBoundException
#3) Error: Cuando un escenario es fatal y el programa no se puede recuperar, JVM arroja un error. Los errores no pueden ser manejados por el bloque try-catch. Incluso si el usuario intenta manejar el error utilizando Try catch block, no puede recuperarse del error.
Ejemplo : Error de afirmación , Error de memoria insuficiente etc.
Manejo de excepciones
Intenta y atrapa el bloque:
trata de atraparlo Los bloques se utilizan generalmente para manejar excepciones. El tipo de excepciones se declara en el bloque de captura que se espera que llegue. Cuando llega una excepción en el bloque try, el control se mueve inmediatamente para atrapar el bloque.
Ejemplo :
|_+_|Puede haber varios bloques de captura para un bloque de prueba, según el tipo de excepción.
Ejemplo :
|_+_|lanza Excepción:
lanza La palabra clave en java se usa para lanzar una excepción en lugar de manejarla. Todas las excepciones marcadas se pueden lanzar mediante métodos.
Ejemplo :
|_+_|finalmente cuadra:
finalmente , el bloque se ejecuta independientemente de la ejecución del bloque try-catch y se ejecuta inmediatamente después de que se completa el bloque try / catch.
Básicamente, el cierre del archivo, la conexión a la base de datos, etc. se pueden cerrar en el bloque finalmente.
Ejemplo :
|_+_|En el ejemplo anterior, BufferReader El arroyo se cierra en bloque finalmente. br.close () siempre se ejecutará independientemente de la ejecución del bloque try and catch.
Nota : finalmente el bloque puede existir sin ningún bloque de captura. No es necesario tener siempre un bloque de captura.
Puede haber muchos bloques de captura, pero solo se puede usar un bloque final.
Desechable : Throwable es una clase principal para errores y excepciones. Generalmente, es difícil manejar errores en java. Si un programador no está seguro del tipo de error y excepción, se recomienda utilizar la clase Throwable que puede detectar tanto el error como la excepción.
Ejemplo :
|_+_|Excepciones comunes en Selenium WebDriver
El selenio tiene su propio conjunto de excepciones. Mientras desarrolla scripts de selenio, un programador tiene que manejar o lanzar esas excepciones.
A continuación, se muestran algunos ejemplos de excepciones en el selenio:
Todas las clases de excepción en tiempo de ejecución en Selenium WebDriver se incluyen en la superclase WebDriverException.
Aunque hay muchas clases de excepción en WebDriverException, normalmente vemos las siguientes.
- NoSuchElementException
- NoSuchWindowException
- NoSuchFrameException
- NoAlertPresentException
- InvalidSelectorException
- ElementNotVisibleException
- ElementNotSelectableException
- TimeoutException
- NoSuchSessionException
- StaleElementReferenceException
Detalles :
ElementNotVisibleException : Si el selenio intenta encontrar un elemento pero el elemento no es visible dentro de la página
NoAlertPresentException : Si un usuario intenta manejar un cuadro de alerta pero la alerta no está presente.
NoSuchAttributeException : Al intentar obtener el valor del atributo, pero el atributo no está disponible en DOM.
NoSuchElementException : Esta excepción se debe al acceso a un elemento que no está disponible en la página.
WebDriverException : Se produce una excepción cuando un código no puede inicializar WebDriver.
Evitar y manejar excepciones comunes
Analicemos el enfoque de evitar y manipular para las excepciones mencionadas anteriormente:
# 1) org.openqa.selenium.NoSuchElementException
Esta clase de excepción comúnmente vista es una subclase de NotFoundException clase. La excepción ocurre cuando WebDriver no puede encontrar y localizar elementos.
Por lo general, esto sucede cuando el evaluador escribe un localizador de elementos incorrecto en el método findElement (By, by).
Considere que en el siguiente ejemplo, la identificación correcta para el campo de texto era 'primer campo', pero el evaluador lo mencionó incorrectamente como 'primer campo'. En este caso, WebDriver no puede localizar el elemento y org.openqa.selenium.NoSuchElementException será arrojado
|_+_|En este caso, la excepción se lanza incluso si el elemento no está cargado.
Evitar y manipular : Intente dar un comando de espera.
Ejemplo: El siguiente comando de espera espera 10 segundos por la presencia de un elemento web con el ID 'enviar'. Luego intenta hacer clic en él. Si el elemento está disponible pero aún así el clic falla, se captura una excepción.
El uso de tiempo retardado es una práctica común en la automatización de pruebas para crear una pausa entre los pasos. Al agregar un Try / Catch, nos aseguramos de que el programa continúe incluso si la espera no pudo ayudar.
|_+_|# 2) org.openqa.selenium.NoSuchWindowException
NoSuchWindowException viene bajo NotFoundException clase. Esto se produce cuando WebDriver intenta cambiar a una ventana no válida.
El siguiente código puede generar org.openqa.selenium.NoSuchWindowException si el identificador de la ventana no existe o no está disponible para cambiar.
driver.switchTo (). window (handle_1);
Evitar y manipular : Usaríamos los identificadores de ventana para obtener el conjunto de ventanas activas y luego realizar acciones en las mismas.
En el siguiente ejemplo, para cada manija de ventana, se ejecuta el cambio del controlador a. Por lo tanto, se reducen las posibilidades de pasar un parámetro de ventana incorrecto.
|_+_|# 3) org.openqa.selenium.NoSuchFrameException
Cuando WebDriver intenta cambiar a un marco no válido, se lanza NoSuchFrameException en la clase NotFoundException.
El siguiente código puede generar org.openqa.selenium.NoSuchFrameException si un marco 'frame_11' no existe o no está disponible.
driver.switchTo (). frame (“frame_11”);
Manejo de excepciones:
|_+_|En este caso, la excepción se lanza incluso si el marco no está cargado.
Evitar y manipular : Intente dar un comando de espera.
En el siguiente ejemplo, WebDriver espera 10 segundos para que el marco esté disponible. Si el marco está disponible y aún hay una excepción, entonces se captura.
|_+_|# 4) org.openqa.selenium.NoAlertPresentException
NoAlertPresentException debajo NotFoundException se lanza cuando WebDriver intenta cambiar a una alerta, que no está disponible.
org.openqa.selenium.NoAlertPresentException se lanzará si el código de automatización inferior llama a la operación accept () en la clase Alert () cuando una alerta aún no está en la pantalla.
driver.switchTo (). alert (). accept ();
Manejo de excepciones:
|_+_|En este caso, la excepción se lanza incluso si la alerta no se carga por completo.
Evitar y manipular : Utilice siempre una espera explícita o fluida durante un tiempo determinado en todos los casos en los que se espera una alerta. Si la alerta está disponible y aún hay una excepción, entonces se detecta.
|_+_|# 5) org.openqa.selenium.InvalidSelectorException
Esta subclase de NoSuchElementException La clase ocurre cuando un selector es incorrecto o sintácticamente inválido. Esta excepción ocurre comúnmente cuando se usa el localizador XPATH.
Considere el siguiente ejemplo:
clickXPathButtonAndWait (“// botón (@ type =’ button ’) (100)”);
Esto arrojaría una InvalidSelectorExeption porque la sintaxis XPATH es incorrecta.
Evitar y manipular : Para evitar esto, debemos verificar el localizador utilizado porque es probable que el localizador sea incorrecto o la sintaxis sea incorrecta. Usar Firebug para encontrar xpath puede reducir esta excepción.
El siguiente código muestra cómo manejarlo usando Try / Catch
|_+_|# 6) org.openqa.selenium.ElementNotVisibleException
ElementNotVisibleException clase es una subclase de ElementNotInteractableException clase. Esta excepción se produce cuando WebDriver intenta realizar una acción en un elemento web invisible con el que no se puede interactuar. Es decir, el elemento web está oculto.
Por ejemplo, en el siguiente código, si el tipo de botón con el ID 'enviar' está 'oculto' en HTML, org.openqa.selenium.ElementNotVisibleException será arrojado.
|_+_|En este caso, la excepción se lanza incluso si la página no se ha cargado por completo.
Evitar y manipular : Hay dos maneras de hacer esto. Podemos usar esperar a que el elemento se complete por completo.
El siguiente código espera 10 segundos por el elemento. Si el elemento es visible y aún se lanza una excepción, se captura.
|_+_|# 7) org.openqa.selenium.ElementNotSelectableException
Esta excepción viene bajo InvalidElementStateException clase . ElementNotSelectableException indica que el elemento web está presente en la página web pero no se puede seleccionar.
Por ejemplo, el siguiente código puede lanzar una ElementNotSelectableException si la identificación 'swift' está deshabilitada.
Select dropdown = new Select (driver.findElement (By.id (“swift”)));
Manejo de excepciones:
tratar {
Select dropdown = new Select (driver.findElement (By.id (“swift”)));
} captura (ElementNotSelectableException e)
En este caso, se lanza una excepción incluso si el elemento se habilita después de un tiempo.
Evitar y manipular : Podemos agregar un comando de espera para esperar hasta que se pueda hacer clic en el elemento. Si todavía hay una excepción, se detecta.
|_+_|# 8) org.openqa.selenium .TimeoutException
Esta excepción ocurre cuando la finalización de un comando tarda más que el tiempo de espera. Las esperas se utilizan principalmente en WebDriver para evitar la excepción ElementNotVisibleException.
A veces, es posible que la página de prueba no se cargue por completo antes del siguiente comando del programa. Si WebDriver intenta encontrar un elemento en la página web antes de que la página se cargue por completo, se lanza la excepción ElementNotVisibleException. Para evitar esta excepción, se agregan comandos de espera.
Sin embargo, si los componentes no se cargan incluso después de la espera, la excepción org.openqa.selenium .TimeoutException será arrojado.
driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);
driver.get ('https://www.softwaretestinghelp.com');
En el programa anterior, se agrega una espera implícita de 10 segundos. Si la pagina www.softwaretestinghelp.com no se carga en 10 segundos, se lanzará TimeoutException.
Evitar y manipular : Para evitar esto, podemos verificar manualmente el tiempo promedio de carga de una página y ajustar la espera.
O podemos agregar una espera explícita usando el ejecutor de JavaScript hasta que se cargue la página.
En el siguiente ejemplo, se utiliza el ejecutor de JavaScript. Después de la navegación de la página, llamamos a JavaScript return document.readyState durante 20 segundos hasta que se devuelve 'complete'.
probando cuántas pruebas por día|_+_|
# 9) org.openqa.selenium.NoSuchSessionException
Esta excepción se lanza cuando se llama a un método después de salir del navegador mediante WebDriver.quit (). Esto también puede suceder debido a problemas del navegador web, como fallas y WebDriver no puede ejecutar ningún comando utilizando la instancia del controlador.
Para ver esta excepción, se puede ejecutar el siguiente código.
driver.quit ()
Select dropdown = new Select (driver.findElement (By.id (“swift”)));
Evitar y manipular : Elija siempre la última versión estable del navegador para ejecutar los casos de prueba de Selenium Webdriver.
Esta excepción se puede reducir usando driver.quit () al completar todas las pruebas. No intente utilizarlos después de cada caso de prueba. Esto puede generar problemas cuando la instancia del controlador es nula y los próximos casos de prueba intentan usarla sin inicializar.
El siguiente código crea una instancia de WebDriver en la anotación @BeforeSuite TestiNG y la destruye en la anotación @AfterSuite TestiNG
|_+_|# 10) org.openqa.selenium.StaleElementReferenceException
Esta excepción dice que un elemento web ya no está presente en la página web.
Este error no es el mismo que ElementNotVisibleException.
StaleElementReferenceException se lanza cuando se crea un objeto para un elemento web en particular en el programa sin ningún problema y sin embargo; este elemento ya no está presente en la ventana. Esto puede suceder si hubo un
- Navegación a otra página
- DOM se ha actualizado
- Un interruptor de marco o ventana
WebElement firstName = driver.findElement (By.id ('nombre'));
driver.switchTo (). window (Child_Window);
element.sendKeys ('Aaron');
En el código anterior, se creó el objeto firstName y luego se cambió la ventana. Luego, WebDriver intenta escribir 'Aaron' en el campo del formulario. En este caso, se lanza StaleElementReferenceException.
Evitar y manipular : Confirme que estamos intentando realizar la acción en la ventana correcta. Para evitar problemas debido a la actualización del DOM, podemos usar Dynamic Xpath
Analicemos otro ejemplo.
Decir 'id' de un campo de nombre de usuario es 'username_1' y el XPath será // * (@ id = ’firstname_1?) . Cuando vuelva a abrir la página, la 'identificación' podría cambiar, por ejemplo, ' 'nombre de pila _11 ’. En este caso, la prueba fallará porque WebDriver no pudo encontrar el elemento. En este caso, se lanzará StaleElementReferenceException.
En este caso, podemos usar un xpath dinámico como,
|_+_|En el ejemplo anterior, se usa XPATH dinámico y, si aún se encuentra la excepción, se detecta.
Conclusión
El manejo de excepciones es la parte esencial de cada programa Java, así como de la secuencia de comandos de selenium. Podemos construir código robusto y óptimo al manejar una excepción de manera inteligente . Y también es una buena práctica manejar las excepciones en un script que le dará un mejor informe cuando un programa falla por cualquier motivo.
Aquí hemos tratado de cubrir el proceso y el marco de manejo de excepciones que debe implementarse en los scripts de selenio.
Recuerde que no es obligatorio manejar siempre la excepción en un trata de atraparlo cuadra. También puede lanzar una excepción según el requisito de un script.
No se debe ignorar una excepción ya que interrumpe la ejecución del programa. En este tutorial, analizamos diferentes excepciones y formas de reducir las posibilidades de obtenerlas mediante comprobaciones y códigos manuales.
Agregar esperas puede controlar algunos casos como 'NoSuchElementException', 'ElementNotFoundException', 'ElementNotVisibleException'.
Siguiente tutorial n. ° 20 : En el próximo tutorial, discutiremos el varios tipos de marcos de prueba disponibles . También estudiaríamos los pros y los contras de utilizar un enfoque de marco desarrollado en las pruebas de automatización. Discutiríamos en detalle sobre el marco basado en datos de prueba.
Publique sus consultas, relacionadas con el manejo de excepciones en Selenium WebDriver, si tiene alguna.
Lectura recomendada
- Excepciones de Java y manejo de excepciones con ejemplos
- Cómo manejar alertas / ventanas emergentes en Selenium WebDriver - Tutorial de Selenium n. ° 16
- Tutorial de AutoIt: descarga, instalación y script básico de AutoIt
- Tutorial de Cucumber Selenium: Integración de Cucumber Java Selenium WebDriver
- Integración de selenio con JMeter
- Introducción a Selenium WebDriver - Tutorial de Selenium n. ° 8
- Más de 30 mejores tutoriales de selenio: aprenda selenio con ejemplos reales
- Oportunidad de trabajo independiente a tiempo parcial para expertos en selenio