Diferencia entre revisiones de «Automatización de pruebas con Selenium»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 3 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 =
Línea 26: Línea 138:
 
* [http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/385  Grabación de pruebas con Selenium y JUnit]
 
* [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://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á:

  1. Portada (con nombre y apellidos del alumno)
  2. Estado del arte en el uso de pruebas automáticas
  3. Descripción de la suite Selenium
  4. Descripción del proceso de implantación y uso de pruebas automáticas en el escenario
  5. 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:

Resultado da execución da proba automática con éxito

Posibles pistas. Para ver driver de firefox:

geckodriver -- version

Para instalarlo:

Relacionado

Referencias