Diferencia entre revisiones de «Automatización de pruebas con Selenium»
(Página creada con « = Tarefa = La práctica consistirá en adquirir un mayor aprendizaje de las herramientas de pruebas automáticas, ejemplarizando su uso con Selenium y Junit. == Enunciado…») |
|||
| (No se muestran 5 ediciones intermedias del mismo usuario) | |||
| Línea 20: | Línea 20: | ||
* Todo junto en un archivo comprimido, o hasta en tres ficheros. | * Todo junto en un archivo comprimido, o hasta en tres ficheros. | ||
* Obligatoriamente se debe entregar memoria en documento de texto, y presentación y/o vídeo demostrativo | * Obligatoriamente se debe entregar memoria en documento de texto, y presentación y/o vídeo demostrativo | ||
| + | |||
| + | = Ejemplo = | ||
| + | |||
| + | Pprueba automática del funcionamiento de la pantalla de login y OTP de la aplicación (realmente mal segurizada): | ||
| + | * [https://github.com/fortify/IWA-Java IWA-JAVA] | ||
| + | |||
| + | Desplegada en mi entorno: | ||
| + | * http://94.250.203.164:8888/ | ||
| + | |||
| + | Para la práctica de pruebas automáticas, os indico como he hecho instalación (aunque seguro que hay muchas más posibilidades). Algunos pasos y cosas a tener en cuenta: | ||
| + | La jdk es un prerrquisito, y yo conté con un openjdk-17-jre | ||
| + | sudo apt install openjdk-17-jre -y | ||
| + | |||
| + | Con java -version sabréis que versión de Java tenéis en el Path. Y si tenéis más de una y queréis escoger otra: | ||
| + | sudo update-alternatives --config java | ||
| + | |||
| + | Para contar con python: | ||
| + | sudo apt install python3 python3-pip -y | ||
| + | |||
| + | Para instalar selenium: | ||
| + | pip install selenium | ||
| + | |||
| + | Para descargar última versión del Server | ||
| + | wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.29.0/selenium-server-4.29.0.jar -O selenium-server.jar | ||
| + | |||
| + | Arranco con: | ||
| + | java -jar selenium-server.jar standalone --selenium-manager true | ||
| + | |||
| + | Queda hub levantado en: | ||
| + | http://localhost:4444/ui | ||
| + | |||
| + | Y en otro terminal lanzó el script de python: | ||
| + | python3 test_login.py | ||
| + | |||
| + | <syntaxhighlight lang="python"> | ||
| + | from selenium import webdriver | ||
| + | from selenium.webdriver.common.by import By | ||
| + | from selenium.webdriver.common.keys import Keys | ||
| + | import time | ||
| + | |||
| + | # Configurar el driver remoto en Selenium Grid | ||
| + | options = webdriver.ChromeOptions() | ||
| + | driver = webdriver.Remote( | ||
| + | command_executor="http://localhost:4444/wd/hub", | ||
| + | options=options | ||
| + | ) | ||
| + | |||
| + | # Paso 1: Abrir la página de login | ||
| + | driver.get("http://94.250.203.164:8888/login") | ||
| + | |||
| + | # Esperar un poco a que cargue | ||
| + | time.sleep(2) | ||
| + | |||
| + | # Paso 2: Completar usuario y contraseña | ||
| + | # Buscar el campo de usuario y contraseña | ||
| + | username = driver.find_element(By.NAME, "email") | ||
| + | password = driver.find_element(By.NAME, "password") | ||
| + | |||
| + | # Introducir credenciales | ||
| + | username.send_keys("user1@localhost.com") | ||
| + | password.send_keys("password") | ||
| + | password.send_keys(Keys.RETURN) | ||
| + | |||
| + | |||
| + | # Paso 3: Esperar redirección a la pantalla OTP | ||
| + | time.sleep(2) | ||
| + | |||
| + | # Verificar que estamos en la pantalla OTP | ||
| + | if "verify" in driver.current_url: | ||
| + | print("✅ Se ha llegado a la pantalla de OTP.") | ||
| + | |||
| + | # Paso 4: Introducir código OTP | ||
| + | otp_input = driver.find_element(By.NAME, "otp") | ||
| + | otp_input.send_keys("12345") # Código OTP esperado | ||
| + | |||
| + | # Paso 5: Enviar el formulario de OTP | ||
| + | verify_button = driver.find_element(By.ID, "login-submit") | ||
| + | verify_button.click() | ||
| + | |||
| + | # Paso 6: Esperar la redirección final tras la verificación | ||
| + | time.sleep(3) | ||
| + | |||
| + | # Verificar si el login completo fue exitoso (ajustar según el sistema) | ||
| + | if "/user" in driver.current_url: | ||
| + | print("✅ Prueba completada con éxito: Login con OTP exitoso.") | ||
| + | else: | ||
| + | print("❌ Error: No se superó logueo con OTP.") | ||
| + | |||
| + | # 12345 | ||
| + | #time.sleep(3) | ||
| + | #username = driver.find_element(By.NAME, "otp") # Ajusta según tu HTML | ||
| + | #password.send_keys(Keys.RETURN) | ||
| + | # Esperar y verificar resultado | ||
| + | #time.sleep(3) | ||
| + | #assert "dashboard" in driver.current_url.lower(), "No se redirigió correctamente" | ||
| + | |||
| + | print("✅ Prueba completada con éxito") | ||
| + | driver.quit() | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | Y podéis ver como paso a paso va siguiendo por la pantalla, para finalmente dar el siguiente resultado en la terminal: | ||
| + | [[File:Resultado-prueba-automatica-selenium.png|thumb| Resultado da execución da proba automática con éxito|center]] | ||
| + | |||
| + | Posibles pistas. | ||
| + | Para ver driver de firefox: | ||
| + | geckodriver -- version | ||
| + | |||
| + | Para instalarlo: | ||
| + | * [https://www.baeldung.com/linux/geckodriver-installation Instalación de geckodriver] | ||
| + | |||
| + | = Relacionado = | ||
| + | * [[Power Automate]] | ||
= Referencias = | = Referencias = | ||
| − | * [https://www.seleniumhq.org/ ] | + | * [https://www.seleniumhq.org/ Selenium] |
| − | * [http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/381] | + | * [http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/381 Selenium y la automatización de las pruebas ] |
| − | * [http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/385] | + | * [http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/385 Grabación de pruebas con Selenium y JUnit] |
| + | * [https://wiki.cifprodolfoucha.es/index.php?title=Selenium_por_Alejandro_Barbeito_Rodr%C3%ADguez Selenium - Alejandro Barbeito Rodríguez] | ||
| + | * [https://training-course-material.com/training/Category:Selenium NobleProg Selenium] | ||
Revisión actual del 20:12 21 feb 2025
Tarefa
La práctica consistirá en adquirir un mayor aprendizaje de las herramientas de pruebas automáticas, ejemplarizando su uso con Selenium y Junit.
Enunciado
Para ello, habrá que elaborar un documento de texto y una presentación o vídeo que será expuesto en el aula al resto de compañeros.
El contexto de la prueba puede ser una aplicación real, desarrollada o no por el alumno, o cualquier página web que sirva cómo escenario de ejemplo (por ejemplo, Google).
El documento de texto contendrá:
- Portada (con nombre y apellidos del alumno)
- Estado del arte en el uso de pruebas automáticas
- Descripción de la suite Selenium
- Descripción del proceso de implantación y uso de pruebas automáticas en el escenario
- Resultados obtenidos y conclusiones de los alumnos
NOTAS. Opcionalmente, se podrá hacer por parejas, notificando previamente al profesor, y aumentando el alcance de la práctica con sugerencias hechas por la pareja
Entregables
- Todo junto en un archivo comprimido, o hasta en tres ficheros.
- Obligatoriamente se debe entregar memoria en documento de texto, y presentación y/o vídeo demostrativo
Ejemplo
Pprueba automática del funcionamiento de la pantalla de login y OTP de la aplicación (realmente mal segurizada):
Desplegada en mi entorno:
Para la práctica de pruebas automáticas, os indico como he hecho instalación (aunque seguro que hay muchas más posibilidades). Algunos pasos y cosas a tener en cuenta: La jdk es un prerrquisito, y yo conté con un openjdk-17-jre
sudo apt install openjdk-17-jre -y
Con java -version sabréis que versión de Java tenéis en el Path. Y si tenéis más de una y queréis escoger otra:
sudo update-alternatives --config java
Para contar con python:
sudo apt install python3 python3-pip -y
Para instalar selenium:
pip install selenium
Para descargar última versión del Server
wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.29.0/selenium-server-4.29.0.jar -O selenium-server.jar
Arranco con:
java -jar selenium-server.jar standalone --selenium-manager true
Queda hub levantado en:
http://localhost:4444/ui
Y en otro terminal lanzó el script de python:
python3 test_login.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# Configurar el driver remoto en Selenium Grid
options = webdriver.ChromeOptions()
driver = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub",
options=options
)
# Paso 1: Abrir la página de login
driver.get("http://94.250.203.164:8888/login")
# Esperar un poco a que cargue
time.sleep(2)
# Paso 2: Completar usuario y contraseña
# Buscar el campo de usuario y contraseña
username = driver.find_element(By.NAME, "email")
password = driver.find_element(By.NAME, "password")
# Introducir credenciales
username.send_keys("user1@localhost.com")
password.send_keys("password")
password.send_keys(Keys.RETURN)
# Paso 3: Esperar redirección a la pantalla OTP
time.sleep(2)
# Verificar que estamos en la pantalla OTP
if "verify" in driver.current_url:
print("✅ Se ha llegado a la pantalla de OTP.")
# Paso 4: Introducir código OTP
otp_input = driver.find_element(By.NAME, "otp")
otp_input.send_keys("12345") # Código OTP esperado
# Paso 5: Enviar el formulario de OTP
verify_button = driver.find_element(By.ID, "login-submit")
verify_button.click()
# Paso 6: Esperar la redirección final tras la verificación
time.sleep(3)
# Verificar si el login completo fue exitoso (ajustar según el sistema)
if "/user" in driver.current_url:
print("✅ Prueba completada con éxito: Login con OTP exitoso.")
else:
print("❌ Error: No se superó logueo con OTP.")
# 12345
#time.sleep(3)
#username = driver.find_element(By.NAME, "otp") # Ajusta según tu HTML
#password.send_keys(Keys.RETURN)
# Esperar y verificar resultado
#time.sleep(3)
#assert "dashboard" in driver.current_url.lower(), "No se redirigió correctamente"
print("✅ Prueba completada con éxito")
driver.quit()
Y podéis ver como paso a paso va siguiendo por la pantalla, para finalmente dar el siguiente resultado en la terminal:
Posibles pistas. Para ver driver de firefox:
geckodriver -- version
Para instalarlo: