Automatización de Pruebas Web con Selenium y Conceptos de Testing

Ejercicios de Selenium para Manejo de Elementos y Ventanas

Este artículo aborda ejercicios prácticos de automatización web utilizando Selenium en Python, incluyendo la interacción con frames, ventanas múltiples, dropdowns y métodos de verificación. También se cubren conceptos fundamentales de clasificación de pruebas y técnicas de diseño de casos de prueba.

1. Manejo de Frames con Selenium

Para interactuar con frames en una página web, se utiliza el método switch_to.frame(). A continuación, un ejemplo con un archivo HTML local:

from selenium import webdriver
import time as espera

navegador = webdriver.Chrome()
navegador.get('file:///D:/code/testDev/UI%E8%87%AA%E5%8A%A8%E5%8C%96/index.html')

# Entrar al frame por índice
navegador.switch_to.frame(0)
campo_usuario = navegador.find_element_by_id('username')
campo_usuario.send_keys('ejemplo')
espera.sleep(3)
navegador.quit()

2. Frames Anidados y Retorno al Contenido Principle

En casos de frames anidados, se puede acceder a un frame interno y luego volver al contenido principal con switch_to.default_content().

navegador = webdriver.Chrome()
navegador.get('file:///D:/code/testDev/UI%E8%87%AA%E5%8A%A8%E5%8C%96/index1.html')

navegador.switch_to.frame(0)
campo_busqueda = navegador.find_element_by_id('sb_form_q')
campo_busqueda.send_keys('prueba')
espera.sleep(3)

navegador.switch_to.default_content()
campo_principal = navegador.find_element_by_id('username')
campo_principal.send_keys('valor')
espera.sleep(3)
navegador.quit()

3. Ejemplo Práctico con Correo Electrónico (QQ y NetEase)

Para aplicaciones web como correos electrónicos, se accede a iframes para interactuar con campos de inicio de sesión.

# Ejemplo con QQ Mail
navegador = webdriver.Chrome()
navegador.get('https://mail.qq.com/')
navegador.switch_to.frame('login_frame')

campo_correo = navegador.find_element_by_id('u')
campo_correo.send_keys('usuario')
espera.sleep(3)

campo_contrasena = navegador.find_element_by_id('p')
campo_contrasena.send_keys('contraseña')
espera.sleep(3)
navegador.quit()

# Ejemplo con NetEase Mail
navegador = webdriver.Chrome()
navegador.maximize_window()
navegador.get('https://mail.163.com/')
navegador.switch_to.frame(0)

campo_email = navegador.find_element_by_name('email')
campo_email.send_keys('ejemplo@163.com')
espera.sleep(3)

campo_pwd = navegador.find_element_by_name('password')
campo_pwd.send_keys('secreto')
espera.sleep(3)
navegador.quit()

4. Manejo de Ventanas Múltiples

Para cambiar entre ventanas, se obtienen los identificadores de ventanas y se itera para localizar la ventana deseada.

navegador = webdriver.Chrome()
navegador.maximize_window()
navegador.get('https://mail.sina.com.cn/')

ventana_actual = navegador.current_window_handle

# Abrir nueva ventana al hacer clic en "Registrar"
enlace_registro = navegador.find_element_by_link_text('注册')
enlace_registro.click()
espera.sleep(3)

todas_ventanas = navegador.window_handles

for ventana in todas_ventanas:
    if ventana != ventana_actual:
        navegador.switch_to.window(ventana)
        campo_registro = navegador.find_element_by_name('email')
        campo_registro.send_keys('nuevo_usuario')
        espera.sleep(3)
        navegador.close()

navegador.switch_to.window(ventana_actual)
campo_inicio = navegador.find_element_by_id('freename')
campo_inicio.send_keys('datos')
espera.sleep(3)
navegador.quit()

5. Métodos de Selenium: clear(), is_displayed(), is_enabled()

Estos métodos pemriten interactuar con elementos de manera más controlada.

navegador = webdriver.Chrome()
navegador.maximize_window()
navegador.get('https://mail.sina.com.cn/')

campo_nombre = navegador.find_element_by_id('freename')
campo_nombre.send_keys('valor_inicial')
print('Valor ingresado:', campo_nombre.get_attribute('value'))
espera.sleep(3)
campo_nombre.clear()  # Limpiar el campo
espera.sleep(3)
navegador.quit()

# Verificar visibilidad
enlace_contrasena = navegador.find_element_by_link_text('忘记密码?')
print('¿Es visible?:', enlace_contrasena.is_displayed())

# Verificar si es editable
campo_editable = navegador.find_element_by_id('freename')
print('¿Es editable?:', campo_editable.is_enabled())

6. Uso de Dropdowns con la Clase Select

Para manejar menús desplegables, se utiliza la clase Select de Selenium.

from selenium.webdriver.support.select import Select

navegador = webdriver.Chrome()
navegador.maximize_window()
navegador.get('file:///D:/code/testDev/UI%E8%87%AA%E5%8A%A8%E5%8C%96/select.html')

elemento_desplegable = navegador.find_element_by_name('nr')
selector = Select(elemento_desplegable)
espera.sleep(3)

# Seleccionar por índice
selector.select_by_index(2)
espera.sleep(3)

# Seleccionar por valor
selector.select_by_value('Java')
espera.sleep(3)

# Seleccionar por texto visible
selector.select_by_visible_text('Java语言')
espera.sleep(3)
navegador.quit()

7. Ejemplo Integrado con XPath en Boss Zhipin

En sitios web dinámicos como portales de empleo, se usan XPath para localizar elementos específicos.

navegador = webdriver.Chrome()
navegador.maximize_window()
navegador.get('https://www.zhipin.com/xian/?sid=sem_pz_360pc_title')

# Interactuar con filtros mediante XPath
boton_filtro = navegador.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[2]/div/span/b')
boton_filtro.click()
espera.sleep(3)

opcion1 = navegador.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[4]/div/div/ul[1]/li[3]')
opcion1.click()
espera.sleep(3)

opcion2 = navegador.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[4]/div/div/ul[2]/li[3]')
opcion2.click()
espera.sleep(3)

opcion3 = navegador.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[4]/div/div/ul[3]/li[2]')
opcion3.click()
espera.sleep(3)

campo_busqueda = navegador.find_element_by_name('qurey')
campo_busqueda.send_keys('Arquitecto de Pruebas')
espera.sleep(3)

8. Manipulación de Listas Anidadas en Python

Para acceder a datos en estructuras complejas como listas anidadas, se utilizan índices y claves.

datos = [{'nombre': 'ejemplo', 'estudiante': [{'empresa': [{'lenguaje': 'Go'}]}]}]
resultado = datos[0]['estudiante'][0]['empresa'][0]['lenguaje']
print('Lenguaje extraído:', resultado)  # Salida: Go

9. Clasificación de Pruebas por Etapas de Desarrollo

Las pruebas de software se categorizan según la fase del ciclo de desarrollo:

  • Pruebas Unitarias: Enfocadas en componentes individuales, utilizando frameworks como JUnit para Java o Pytest para Python.
  • Pruebas de Integración: Validan la interacción entre módulos combinados, verificando funcionalidad y compatibilidad.
  • Pruebas de Sistema: Evalúan el sistema completo, incluyendo rendimiento y entorno operativo.
  • Pruebas de Aceptación: Realizadas antes del despliegue, aseguran que el software cumple con requisitos contractuales.

10. Técnicas de Diseño de Casos de Prueba

Partición de Equivalencia: Divide el dominio de entrada en clases donde los datos se comportan similarmente. Por ejemplo, para un campo de mes, valores entre 1 y 12 son válidos (clase válida), mientras que 0 o 13 son inválidos (clase inválida).

Análisis de Valores Límite: Se enfoca en los bordes de las particiones. Usando el mismo ejemplo, los límites serían 1 y 12, probando valores como 0, 1, 12 y 13 para detectar errores comunes.

Etiquetas: Selenium Python automatización-web pruebas-software frames

Publicado el 6-29 19:35