¡Hola, mundo!
Clase 6 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
Clase 6 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
JOHN YAUYO
Andrés Corral
Irvin Cabal
Juan Ignacio Echenique Olsina
Miguel Angel Velazquez Romero
Juan Ignacio Echenique Olsina
Matías Candi
Juan Antonio Aramburo Pasapera
Moises Abel Avila Garcia
Diego Cesar Lerma Torres
Mauricio Gonzalez Falcon
Santiago Ramos Morales
Ángel Ricardo Estrada Sevilla
Jose Reinaldo Roca Cruz
Sebastian Rueda
Magno Stiven Bueno
Jafet Pintle
Vidale C.
Bruno Guillaume Hernández Villamil
Luis Antonio Ibarra Salgado
Alexander Silvera
Juan Camilo Sarmiento Reyes
Esteban parra
Daniel Enrique Merchan Merchan
Alfonso Morán
Valentin Francisco Blanco
Héctor Daniel Vega Quiñones
Korpi delfin
Michelle Duque De La Rosa
Adrian Gutierrez Ramirez
Daniel Verdugo
Alan Vazquez
RRHH Holistor
Isay Humberto Lucas Hernandez
Juan Sebastian Ladino Mendieta
Brady Principe Quiñones Principe Quiñones
Jose Reinaldo Roca Cruz
Brady Principe Quiñones Principe Quiñones
Luis Enrique Sanchez Piñerua
Laura Itzel Hernández Fernández
Fredy Alexander Izquierdo Dominguez
Brandon Gutierrez
Massimo Di Berardino
Miguel Andres Rendon Reyes
José Manuel Piña Rodríguez
Victor Luis Landaeta Jimenez
Andrés Felipe Mesa David
Mauricio Gonzalez Falcon
daniel saltarin castillo
Para el caso de que tu S.O. sea Ubuntu y tengas instalado el navegador Google Chrome debes correr previamente en la terminal:
y tu setUpClass debe ser así:
@classmethod def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver') driver = cls.driver driver.implicitly_wait(10)
Uf, haber leido esto antes .... tenia instalado chromium pero no lo pude usar, tuve que instalar chrome
que buena ayuda, gracias
Buen dia les comparto mi codigo por si a alguien le sirve.
# Con unittest nos podemos traer todas nuestras pruebas import unittest # Ayuda a orquestar cada una de las pruebas que estaremos # ejecutando junto con los reportes from pyunitreport import HTMLTestRunner # Para comunicarnos con el navegador usamos webdriver from selenium import webdriver class HelloWorld(unittest.TestCase): # Realiza todo lo necesario antes de empezar la prueba @classmethod # Decorador para que las distintas paginas corran en una sola pestaña def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path=r"./chromedriver.exe") driver = cls.driver # esperamos 10 seg antes de realizar la siguiente accion driver.implicitly_wait(10) # Caso de prueba donde realizaremos una serie de acciones para que el navegador las automatice def test_hello_world(self): driver = self.driver driver.get('https://www.platzi.com') def visit_wikipedia(self): self.driver.get('https://www.wikipedia.com') # Cerramos el navegador una vez terminadas las pruebas @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reportes', report_name = 'hello-world-report'))
¿En que SO lo ejecutaste?
En window por? te dio algun error?
Chale :'v
gracias
Llevo literalmente una semana intentando hacer esta prueba. Uso WSL2, pero me daba error siempre que intentaba realizar la prueba (y simplemente no me abría la página de Chrome).
Intenté usar Anaconda para instalar las librerías que necesitaba, ejecutar el programa desde la PowerShell, instalar todo tipo de entornos virtuales. Incluso intenté instalar una interfaz gráfica para la terminal de WSL en Windows (un proceso bastante laborioso y además muy inseguro, puesto que requiere otorgar permisos a este programa que no me gustaron).
Al final mi solución fue instalar Ubuntu en una computadora que no es mi principal. Me funcionó perfecto en un sistema LInux.
¡Además, será mi oportunidad para familizarme con este sistema operativo!
Total, llevo 2 semanas en este lio! Pero retomo hoy la prueba a ver si con interfaces gráficas y reinstalar wsl2 funciona todo.
Me funcionó sin el teardown
El profesor menciona que se debe colocar la liga completa, en mi caso uso windows 10, uso python 3.8 y no fue necesario.
self.driver = webdriver.Chrome(executable_path = r'./chromedriver.exe')
Si en realidad no es necesario colocar la ruta completa,lo único importante en window es colocar el .exe
Si están en Windows y les sale un error, el problema está en el ejecutable y en que el término executable_path ya está deprecado.
Para solucionarlo primero onstalé lo siguiente:
pip3 install webdriver-manager
Y luego mi código quedó así:
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager class HelloWorld(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install())) cls.driver.implicitly_wait(10) def test_hello_world(self): self.driver.get('https://www.netflix.com') def test_visit_wikipedia(self): self.driver.get('https://www.wikipedia.org') @classmethod def tearDownClass(cls) -> None: cls.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reports', report_name = 'hello-world-report'))
Con esto no hay necesidad de descargar el chromedriver en sus computadoras y tampoco necesitan usar WSL porque todo corre en Powershell. Espero les sirva.
Esto si me solucionó !!!
Grande! Lo estaba tratando de hacer en WSL pero este no me permitia abrir el chrome de windows directamente y era mucho enrollo. Tu código me funcionó de maravilla:)
Si te aparece el siguiente error: DeprecationWarning: executable_path has been deprecated, please pass in a Service object self.driver = webdriver.Chrome(executable_path=r"./chromedriver.exe")
Te comparto la solución que a mi me sirvio (Estoy usando windows 11 y la feca es 20/02/2022)
pip3 install webdriver_manager
from selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManager
self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
y listo, todo el demás código que se muestra en el vídeo queda igual.
Perfecto, este es el que funciona para Windows, muchas gracias. Pero me queda duda de qué generaba el error, ¿es por la versión de Chrome?
en Mac igual me soluciono el problema, gracias!!
Solo una pregunta, entonces si tengo el manager ya no tengo que descargar el driver que el profesor descomprimío? o lo tengo que seguir descargando?
Hola paso también la solución al error que tenia al no poder abrir el navegador y correr los tests del scripts del hola mundo:
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class HelloWorld(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path='./chromedriver') driver = self.driver driver.implicitly_wait(10) def test_hello_world(self): driver = self.driver driver.get('http://demo-store.seleniumacademy.com/') def test_visit_wikipedia(self): self.driver.get('https://www.wikipedia.org') def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2)
el error era de indentación en la última línea de código, recien lo pude ver gracias al apoyo del profesor Héctor. Lo paso por si alguien tiene el mismo problema y no ve cual puede ser el error, saludos y gracias Héctor.
Gracias!,
Tienes un typo con las palabras class y def falta un espacio con la definición del nombre de la clase y las funciones respectivamente
Una duda? en que momento inicializo e instancio my clase HelloWorld y ejecuto los medodos? o cuando heredo de unittest el ejecuta en orden descendente las funciones de mi clase HelloWorld??
Tengo esta misma duda... No entiendo donde se inicializaron la clase y donde se llamaron los métodos.
misma duda
Que hace verbosity = 2?? (en la linea 25)
verbosity es una bandera que te da detalles sobre la salida al resultado final de tu script, si añades el parámetro 2 entonces te dará aún más detalles.
Puedes probar el script eliminando esta bandera y colocando 1 o 2 cómo parámetro :)
Les comparto mi código ya con comentarios. Entorno : windows 10 + python 3.8
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class HelloWorld(unittest.TestCase): #va a ejecutar todo lo necesario antes de hacer una prueba #va a preparar el entorno de la prueba @classmethod # para que abra las pestañas en una misma ventana def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path = r'.\chromedriver.exe') driver = cls.driver driver.implicitly_wait(10) #aquí va lo que queremos que la prueba haga def test_hello_world(self): driver = self.driver driver.get('https://platzi.com/') def test_visit_wikipedia(self): self.driver.get('https://es.wikipedia.org/') #cierra el navegador para evitar #fuga de recursos @classmethod #decorador para que no se cierre la ventana después de la primera prueba def tearDownClass(cls): cls.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reportes', report_name='hello-world-report'))
Muchas gracias
Hola! Estoy siguiendo el curso con Ubuntu corriendo en WSL2, estuve un rato navegando y me encontre con que la unica forma de correr el driver de Chrome con esta configuración es llamandolo desde la ruta contenedora en Windows, al intentar ejecutar el codigo me sale el siguiente error
tengo el mismo error, espero alguien pueda ayudarnos.
Creo que el error es debido a que desde WSL2 no puede abrir el navegador, a menos que lo tengas instalado en tu distribucion (Las aplicaciones que tienes en Windows y en tu distribucion de WSL2 son diferentes) Incluso aunque procedas con la instalacion norma de chrome ( o firefox ) dentro de WSL hay otro problema... Nativamente no es posible abrir aplicaciones GUI ( O con interfaz ) Para solucionar esto te recomiendo leer lo siguiente WSL2 + GUI Setup
dejare la palabra frustrante, porque es eso lo que merece, 20 error me saltan en cada clase y el instructor dicta un montón de cosas sin dar una buena explicación. no deben olvidar que la persona que ingresa al curso no sabe y quiere aprender para que sirve cada cosa. abandono el curso.
Hola amigos, . A mi me causó mucha curiosidad el porque al agregar el decorador @classmethod nuestras pruebas (en este caso visitas al sitio web de Platzi y Wikipedia) se hicieron en la misma ventana. Investigando encontré lo siguiente: . Los métodos setUp y tearDown se ejecutan cada vez que se lanza una prueba (métodos que empiezan con el prefijo test_). Por ello nuestra ventana se abre para visitar un sitio, se cierra y se vuelve a abrir para visitar el otro. . Para evitar esto, se agrega el decorador @classmethod, este decorador permite recibir la clase como primer parámetro dentro de un método y ejecutar directamente dicho método sin depender de la instancia de la clase que lo contiene. Wow, wow, wow! Espera, yo también me confundí cuando leí esto por primera vez. Pero puedes encontrar una explicación más clara justo AQUI. . Pero la magia no ocurre solo con el decorador @classmethod, si intentas ejecutar las pruebas aún con el decorador (y la debida modificación de los métodos setUp y tearDown) verás que las pruebas aún ocurren en ventanas separadas 😱😱 Esto se debe a que parte de la magia va de la mano con los métodos setUpClass y tearDownClass. La razón es porque 2 últimos métodos se ejecutan para toda la clase y no solo para cada método de pruebas. WOOOOOW! . Si lo vemos con un flujo encontramos lo siguiente:
tengo una pregunta, si no utilizo el decorador me funciona el código, pero si lo uso la segunda prueba no me funciona me sale este error:
"MaxRetryError
HTTPConnectionPool(host='localhost', port=56367): Max retries exceeded with url: /session/57d2dff66a7bc97b8481527bf6842cd4/url (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))"
Hola, me sale este error
ModuleNotFoundError: No module named 'pyunitreport'
Buenas brandy,instalaste todas la librerías de la anterior clase,si es así me puedes mostrar tu código,y los comandos que utilizas para acceder a la terminal
Hola, importe lo que indicó, mi codigo es el sigueinte:
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class HelloWorld(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path= r'D://otros//Selenium//chromedriver_win32//chromedriver.exe') driver = self.driver driver.implicitly_wait(10) def test_hello_world(self): driver = self.driver driver.get('https://www.platzi.com') def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output= 'reportes',report_name= 'helllo_world_report'))
Si quieren una forma mas sencilla de descargar el driver, pueden descargarse con pip la libreria “webdriver_manager”.
from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install())
tenia este error: (cannot find Chrome binary) y tu aporte me ayudo. gracias
Tenía el error WebDriverException Message: Service ./chromedriver unexpectedly exited. Status code was: -5, pero tu aporte me fue de gran ayuda para solucionarlo. Gracias!
Me aparece un error si me podrian ayudar se los agardezco mucho,
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class HellorWorld(unittest.TestCase): def setUp(self): #ejecuta todo lo necesario antes de la prueba self.driver= webdriver.chrome(execute_path= r"/chromedriver.exe") driver = self.driver driver.implicitly_wait(10) def test_hello_world(self): #serie de acciones para que el navegador se automatice driver=self.driver driver.get("https://www.platzi.com") def tearDown(self): self.driver.quit() #cerrar ventana del navegador para cualquier prueba if __name__== "__main__": unittest.main(verbosity=2,testRunner=HTMLTestRunner(output="reportes",report_name="hello-world-report"))
Esto me aparece al ejecutar Traceback (most recent call last): File "hello_world.py", line 2, in <module> from pyunitreport import HTMLTestRunner ModuleNotFoundError: No module named 'pyunitreport'
Hola Brandon, tienes un typo en la línea 2, en realidad debería ser: from PyUnitReport import HTMLTestRunner escrito de esa manera con mayúsculas
Men, es un cuento complejo, pero básicamente lo que tienes que hacer es: Revisa que tengas una versión de python de la 3.8 para abajo, si no, entonces tienes hacer a como dé lugar una actualización o regresión a la versión 3.8 e instalar el módulo: pyunitreport.
Claro está que también tienes que verificar que tengas instalado pyunitreport
He revisado los aportes y varios hemos tenido el mismo problema pero aun no se ha tenido solucion, es con respecto a la libreria pyunitreport que arroja el siguiente error . ModuleNotFoundError: no module named ‘pyunitreport’ Esta fue instalada en consola, en la caperta del archivo pero sigue sin reconocerla. Este es mi codigo
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class HelloWorld(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome(executable_path = r'./chromedriver.exe') driver = cls.driver driver.implicitly_wait(10) def test_hello_world(self): driver = self.driver driver.get('https://www.platzi.com') def test_visit_wikipedia(self): self.driver.get('https://www.triunico.com') @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2, testRunner= HTMLTestRunner(output = 'reportes', report_name = 'hello-world-report'))
Nota : Mi codigo realiza las peticiones de ambos sitios y me genera el reporte, aun asi en mi editor de codigo se mantiene el error.
Hola, me parece que debes de quitar el .exe cuando llamas al driver chrome.
Saludos!!!
Hola! A mí me estaba pasando igual y logré solucionarlo de la siguiente manera:
*Debes tener instalado pip y ubicarte la carpeta donde tengas tu código
virtualenv venvvenv\Scripts\activate.batselenium y pyunitreportpip freeze revisas que te hayan quedado instaladas y luego ejecutasHaré un tutorial de como ver el curso desde windows sub-system for linux.
Espero pronto les guste :D
Por si a alguien le aparece un error al importar selenium o pyunitreport en visual studio code, esto es un error visual del editor, no genera ningún error al tratar de ejecutar el script, aunque si lo desea puede usar otro IDE como PyCham.