Blog
Selenium con Python ejemplo 2
Extender el ejemplo anterior aplicando UnitTest
Dar una explicación del ejemplo
El paquete de selenium por sí mismo no proporciona una herramienta/estructura de test. Puedes escribir casos de prueba usando el módulo unittest de Python. Las otras opciones para una herramienta/marco son py. test y nose.
En este post, utilizamos unittest como marco de referencia. Aquí está el ejemplo anterior modificado que utiliza el módulo unittest. Esta es una prueba para la funcionalidad de búsqueda en aprenderpython.net :
import time import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class PythonOrgSearch(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox(executable_path=r'C:\Users...añade tu ruta del... \geckodriver.exe') def test_search_in_python_org(self): driver = self.driver driver.get("https://unipython.com/los-mejores-ide-python-instalar-python-os-window-linux/") time.sleep(3) self.assertIn("Python", driver.title) time.sleep(3) elem = driver.find_element_by_name("s") time.sleep(3) elem.send_keys("aprender") elem.send_keys(Keys.RETURN) time.sleep(3) assert "No results found." not in driver.page_source def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main()
Cuando ejecutas este código por la consola debería salir:
. ---------------------------------------------------------------------- Ran 1 test in 19.308s OK
Eso significa que el Test ha salido ok.
Explicación paso a paso del ejemplo
Inicialmente se importan todos los módulos básicos requeridos. El módulo unittest es un Python integrado basado en JUnit de Java. Este módulo proporciona el marco para organizar los casos de prueba. El módulo selenium. webdriver proporciona todas las implementaciones de WebDriver. Las implementaciones de WebDriver actualmente soportadas son Firefox, Chrome, Ie y Remote. La clase Keys proporciona teclas en el teclado como RETURN, F1, ALT, etc.
import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys
La clase de test de prueba se hereda de la prueba unitaria TestCase. Heredar de la clase TestCase es la manera de decirle al módulo unittest que se trata de un caso de test:
clase PythonOrgSearch (unittest. TestCase):
El setUp es la parte de la inicialización, este método se llamará antes de cada función de prueba que va a escribir en esta clase de prueba. Aquí está creando la instancia de Firefox WebDriver.
def setUp (self): self.driver = webdriver.Firefox(executable_path=r'C:\Users...añade tu ruta del... \geckodriver.exe')
Este es el método del caso de prueba. El método del caso de prueba debe comenzar siempre con la prueba de caracteres. La primera línea dentro de este método crea una referencia local al objeto driver creado en el método setUp.
def test_search_in_python_org(self): driver = self.driver
El método driver.get navegará a una página dada por la URL. WebDriver esperará hasta que la página se haya cargado completamente (es decir, el evento “onload” se haya disparado) antes de devolver el control a su prueba o script. Vale la pena notar que si su página usa mucho AJAX en carga, es posible que WebDriver no sepa cuándo se ha cargado por completo.:
driver.get("https://unipython.com/los-mejores-ide-python-instalar-python-os-window-linux/")
La siguiente línea es una afirmación para confirmar que el título tiene la palabra “Python”:
self.assertIn("Python", driver.title)
WebDriver ofrece varias formas de encontrar elementos utilizando uno de los métodos find_element_by_*. Por ejemplo, el elemento de texto de entrada se puede localizar por su atributo de nombre utilizando el método find_element_by_name. La explicación detallada de los elementos de localización está disponible en el capítulo Elementos de localización:
elem = driver.find_element_by_name("s")
A continuación, estamos enviando las teclas, esto es similar a la introducción de teclas con el teclado. Las teclas especiales se pueden enviar utilizando la clase de teclas importadas desde selenium.webdriver.common.keys:
elem. send_keys ("aprender") elem. send_keys (Keys. RETURN)
Después de la presentación de la página, usted debe obtener el resultado de acuerdo a la búsqueda si hay alguno. Para asegurarse de que se encuentran algunos resultados, haga una afirmación:
assert "No results found." not in driver.page_source
El método tearDown será llamado después de cada método de prueba. Este es un lugar para hacer todas las acciones de limpieza. En el método actual, la ventana del navegador está cerrada. También puede llamar al método de abandono en lugar de cerrar. La salida saldrá de todo el navegador, mientras que el cierre cerrará una pestaña, pero si es la única pestaña abierta, por defecto la mayoría de los navegadores saldrán completamente.:
def tearDown(self): self.driver.close()
Las líneas finales son un código para ejecutar la suite de pruebas:
if __name__ == "__main__": unittest.main()
Ejemplo de un test que sale Failed
Si modificamos la palabra que tiene que buscar en el titulo de la web podemos ver un Failed facilmente:
import time import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class PythonOrgSearch(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox(executable_path=r'C:\Users...añade tu ruta del... \geckodriver.exe') def test_search_in_python_org(self): driver = self.driver driver.get("https://unipython.com/los-mejores-ide-python-instalar-python-os-window-linux/") time.sleep(3) self.assertIn("Pyttthon", driver.title) time.sleep(3) elem = driver.find_element_by_name("s") time.sleep(3) elem.send_keys("aprender") elem.send_keys(Keys.RETURN) time.sleep(3) assert "No results found." not in driver.page_source def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main()
El resultado por la consola es:
====================================================================== FAIL: test_search_in_python_org (__main__.PythonOrgSearch) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:/Users/,,,,/selenium/ejemplo1.py", line 21, in test_search_in_python_org self.assertIn("Pyttthon", driver.title) AssertionError: 'Pyttthon' not found in '▷Top Mejores IDE / Editores y Como Instalar de Python' ---------------------------------------------------------------------- Ran 1 test in 15.510s FAILED (failures=1)
➡ ¡Perfecto! Ya tienes una idea clara del uso de Selenium con Python usando los WebDrivers. En nuestro curso de Selenium con Python te explicaremos la navegación usando WebDrivers, controlar los desplazamiento y mas:
[…] Selenium con Python ejemplo 2 […]
[…] la siguiente lección -> Selenium con Python ejemplo 2 Te ofrecemos un segundo ejemplo, parecido al anterior, solo que esta vez utilizaremos unittest, […]