9 trucos de Selenium que te ayudarán en tus pruebas automáticas


Si trabajas en QA y más concretamente en automatización de pruebas, tienes que conocer Selenium, ya sea
de oídas o porque alguien lo ha utilizado (si es que no eres tu mism@).


 




Esta herramienta, a día de hoy, es una de las más usadas del
mercado, quizá siendo la que más y con WebDriver, la facilidad y la
compatibilidad con todos los navegadores, es más que espectacular.





Además, por si fuera poco, Selenium es una de las
herramientas con más compatibilidad en lenguajes de programación, ya sea Python,
Ruby, Java, PHP, .NET y muchos más.





No hace mucho, utilizamos Selenium junto con Python en un
proyecto de gran envergadura y gracias al trabajo diario con grandes expertos
en esta herramienta, pudimos detectar una serie de buenas prácticas, trucos o
tareas que se pueden ejecutar y facilitar mucho la vida a personas que quieren
comenzar a usar Selenium o ya llevan años haciéndolo y pueden mejorar sus
procesos.









1.    
Abrir una página web en una pestaña nueva con
Selenium





En algunas ocasiones, nos encontramos con la necesidad de
abrir páginas web en navegadores y, más concretamente, en pestañas nuevas. Para
ello, utilizaremos execute_script.





Por ejemplo, usaremos un código tipo de este modo:



from selenium import webdriver


from selenium.webdriver.common.keys import Keys


from time import sleep


  


driver = webdriver.Firefox()


driver.get("http://www.google.com/")


  


driver.implicitly_wait(10)


  


#abrimos la nueva pestaña


driver.execute_script("window.open('https://www.qalovers.com', 'new tab')")


  


sleep(5)


driver.quit()






2.    
Hacer Zoom con Selenium





En algunas ocasiones, debemos de hacer zoom (alejando y
acercando) en una imagen o documento en concreto (ya sea para pulsar algo o
para observar un texto más pequeño, por ejemplo). Para ello, usaremos la
propiedad de transformación que permite hacer cualquier movimiento rotatorio o
acercar y alejar la pantalla. En Firefox se puede usar MozTransform, tal y como
vemos en el ejemplo:






from selenium import webdriver


from time import sleep


  


driver = webdriver.Firefox()


driver.get("https://www.qalovers.com/")


timeout = 10


  


'''
Zoom en un 350% '''


driver.execute_script('document.body.style.MozTransform
= "scale(2.0)";')


driver.execute_script('document.body.style.MozTransformOrigin
= "0 0";')


  


sleep(10)


  


''' Zoom en un 100% '''


  


driver.execute_script('document.body.style.MozTransform
= "scale(1.0)";')


driver.execute_script('document.body.style.MozTransformOrigin
= "0 0";')


  


'''
Añadimos un sleep para ralentizar la acción '''


sleep(10)


  


driver.quit()






3.    
Trabajar con varios navegadores a la vez, para
realizar pruebas de compatibilidad





Cuando realizamos pruebas de compatibilidad, tenemos que
saltar de un navegador a otro o quizá probar algún tipo de pauta en diferentes
navegadores para comprobar que ocurre o si en todos funciona exactamente igual.
Para ello, Selenium nos permite identificar e incorporar, de manera selectiva,
la utilización de diferentes navegadores o ejecutar código en cada uno de
ellos, al mismo tiempo. Lo ideal es utilizar pytest, tal y como se muestra en
el ejemplo:






# La
importación de los módulos es obligatoria para una ejecutar el código de manera
correcta


  


import
pytest


from selenium import webdriver


from selenium.webdriver.chrome.options import Options


from selenium.webdriver.common.keys import Keys


from time import sleep


  


@pytest.fixture(params=["chrome",
"firefox"],scope="class")


def driver_init(request):


    if request.param ==
"chrome":


    if request.param ==
"firefox":


    yield


    web_driver.close()






4.    
Actualizar los navegadores mientras se realiza
algún tipo de prueba





Tanto cuando realizamos pruebas manuales como automáticas,
una de las acciones más repetidas, suele ser la de refrescar el navegador o página
que estamos probando, ya sea para comprobar que el cambio se ha realizado
correctamente o simplemente para volver a limpiar la información y comenzar de
nuevo.





En Selenium, podemos realizar este refresco con driver.refresh()



from selenium import webdriver


  


driver = webdriver.Firefox()


driver.get("https://www.qalovers.com/")


driver.refresh() 







5.    
Extraer datos tras ejecutar código de JS





En ocasiones, al ejecutar un código JS, debemos de capturar
el resultado o extraer algún tipo de dato del mismo. Para ello, podemos
utilizar “Return” y obtener el resultado del código. Lo podemos ver en un
ejemplo sencillo:



from selenium import webdriver


from time import sleep


  


driver = webdriver.Firefox()


driver.get("https://www.qalovers.com")


  


driver.execute_script("document.getElementsByClassName('home-cta')[0].click()")


     


result = driver.execute_script("return 0")


print(result)


  


sleep(10)


  


driver.close() 







6.    
Cerrar pestañas del navegador, cambiando el foco
de una a otra





Al realizar algún tipo de prueba, nos podemos encontrar con
la necesidad de cerrar pestañas del navegador sin tener que cerrarlo
completamente (o si). Para ello, podemos usar driver.close()






from selenium import webdriver


import time


  


driver = webdriver.Firefox()


driver.get('https://www.google.com')


# Abrimos una nueva pestaña


driver.execute_script("window.open('');")


time.sleep(5)


# Cambiamos
el foco a la nueva pestaña


driver.switch_to.window(driver.window_handles[1])


driver.get("https://qalovers.com")


time.sleep(5)


# Ahora, cerramos la pestaña actual


driver.close()


time.sleep(5)


# Volvemos
a cambiar el foco a la primera pestaña


driver.switch_to.window(driver.window_handles[0])


driver.get("https://www.qaglobal.es")


time.sleep(5)


# Cerramos
la última pestaña, y por lo tanto, cerraremos el navegador.


#driver.close()






7.    
Hacer scroll en el navegador





Otro movimiento típico que se suele realizar cuando estamos
haciendo pruebas, es el scroll. Para ello, Selenium nos ayuda con el código
window.scrollTo().





Lo que hemos realizado, es un ejemplo de como descender hasta
el final de la página:



from selenium import webdriver


from time import sleep


  


driver = webdriver.Firefox()


driver.get("https://www.qalovers.com/")


timeout = 10


  


''' Hacemos scroll complete
en toda la página '''


driver.execute_script("window.scrollTo(0,
document.body.scrollHeight);")


  


sleep(10)


  


driver.quit()






8.    
Guardar un recorte de la pantalla





A la hora de dar de alta un defecto o el poder comprobar algún
tipo de situación, guardando una evidencia, podemos Pillow desde Selenium.





El primer paso es instalarlo con pip installa pillow.





Básicamente, lo que haremos, será el capturar toda la
pantalla y con Pillow, capturar la sección que queramos.



from selenium import webdriver


''' Instalamos pillow '''


from PIL import Image


from io import BytesIO


  


driver = webdriver.Firefox()


driver.get('http://google.com/')


  


# Buscamos el logotipo
de Google


element = driver.find_element_by_id('hplogo')


image_location = element.location


size = element.size


  


png = driver.get_screenshot_as_png()


  


''' La captura es
correcta, por lo que salimos del navegador '''


driver.quit()


  


''' Abrimos la imagen
con la librería de PIL '''


crop_image = Image.open(BytesIO(png))


  


''' Extraemos las
coordenadas (x,y) '''


  


left = image_location['x']


top = image_location['y']


right = image_location['x'] + size['width']


bottom = image_location['y'] + size['height']


  


crop_image = crop_image.crop((left, top, right, bottom))


crop_image.save('captura-logotipo.png')






9.    
Capturar el código fuente HTML de una página web





En ocasiones, una prueba básica que podemos hacer es
capturar el HTML de una página web para buscar algo en concreto o comprobar que
una acción se esté realizando correctamente. Para ello utilizamos la propiedad
innerHTML.





En el siguiente ejemplo lo comprobamos:



from selenium import webdriver


from selenium.webdriver.chrome.options import Options


from selenium.webdriver.common.keys import Keys


from time import sleep


import io


  


driver = webdriver.Firefox()


driver.get("https://www.qalovers.com")


  


elem = driver.find_element_by_xpath("//*")


source_code = elem.get_attribute("innerHTML")


  


filename = open('qalovers_codigo_fuente.html', 'w')


filename.write(source_code)


filename.close()


     


sleep(10)


  


driver.close()



Básicamente, lo que hemos realizado es recopilar una serie
de acciones que utilizamos y que pensamos que son válidas y extrapolables a cualquier
tipo de proyecto o situación.





Esperemos que esto os pueda ayudar y solventar dudas que os
surjan en vuestros proyectos o pruebas de concepto que hacéis en casa, facilitándoos
la vida un poquito más.







0 Comentarios