Mary Jane Rivero
Mary Jane Rivero
Mary Jane Rivero
Mary Jane Rivero
cipriano salazar
Jesús Daniel González Alemán
Melissa Fuentes Canar
Sebastián Andrés Sanhueza Tapia
Camilo Andrés Rodriguez Higuera
Jaime Hernandez
Marcelo Ruiz Vargas
Giovani Fabian Caballero Plata
Juan David Figueredo Espinel
Julian Crispin
William Daniel Avila Barbeito
Joseph Humberto Cueva
Marco Antonio Mena
Meissonier Aldana
roman fraire
Jarrinson Jose Parababi Camargo
Angel Guadarrama
Cristhian Oswaldo Zambrano Yont
Elvis Alexander Espinoza
Eric Gabriel Martinez Labrin
Jesus Eduardo Barrios
Hay problemas para ingresar al enlace de la página web, no carga.
el curso va excelente el profesor indica paso a paso lo que se debe hacer, pero a la fecha actual varias sintaxis ya no son validad ya que cambiaron en forma. estar al pendiente de esto yo pasa por una IA para validar partes del código y allí fue que me di cuenta de esto ya que no corre el código como el profe lo indica en su totalidad
Este curso no lo veo 🙄... Para test unitarios de front end no uso python porque python lo uso en backend... No he entendido bien esto la verdad...
hola aquí dejo una versión actualizada del código
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By class FindElements(unittest.TestCase): #El SetUp es una función de preparación para la prueba, algo así como alistar las precondiciones def setUp(self): service = Service(executable_path= r'C:\Users\Melissa\OneDrive\Documentos\Selenium\chromedriver_win32\chromedriver.exe') self.driver = webdriver.Chrome(service=service) self.driver.get("https://www.youtube.com") self.driver.maximize_window() #Si se necesita un tiempo de espera se usa la línea de abajo self.driver.implicitly_wait(10) #Acceder a un sitio web #Hay que poner test_ para que el sistema lo reconozca como caso de prueba def test_SearchElementID(self): searchField = search_field=self.driver.find_element(By.ID, 'search') def test_SearchElementName(self): searchField=search_field=self.driver.find_element(By.NAME, 'search_query') def test_SearchElementClass(self): search_field=self.driver.find_element(By.CLASS_NAME, 'gstl_50 sbdd_c') #En caso de listas de elementos def test_SearchElementClass(self): listaElementos = self.driver.find_element(By.NAME, 'nombre') elementos = self.driver.find_element(By.TAG_NAME, 'nombreElemento') #Para verificar la cantidad de elementos usamos assertion #Assertion es un validación que se hace en el codigo para verificar que se cumple o no una condición self.assertEqual(3, len(elementos)) def tearDown(self) -> None: self.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reportes', report_name = 'find-elements-report'))
mil gracias, me ayudaste un monton
A pesar de que no está actualizado el contenido con la ultima version, he podido aclarar varias cosas que no tenía claras cuando había usado Selenium tiempo atrás y no es solo gracias a este curso, muchos otros que he tomado estos meses me han permitido fortalecer la bases.
P. D: el codigo esta corriendo en ubuntu 22.04 y con chrome
from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from pyunitreport import HTMLTestRunner from selenium import webdriver import unittest class FindElements(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome( service=Service(r"./driver/chromedriver")) driver = self.driver driver.get("https://demo-store.seleniumacademy.com/") driver.maximize_window() driver.implicitly_wait(10) def testSearchFieldId(self): search_field = self.driver.find_element(By.ID, "search") def testSearchFieldName(self): search_field = self.driver.find_element(By.NAME, "q") def testSearchFieldClass(self): search_field = self.driver.find_element( By.CLASS_NAME, "input-text") def testSearchButtonClass(self): search_field = self.driver.find_element(By.CLASS_NAME, "button") def testListImages(self): banner_list = self.driver.find_element(By.CLASS_NAME, "promos") banners = banner_list.find_elements(By.TAG_NAME, "img") self.assertEqual(3, len(banners)) def testImage(self): xpath = '//*[@id="top"]\ /body/div/div[2]/div[2]/div/div/div[2]/ul/li[1]/a/img' banner = self.driver.find_element(By.XPATH, xpath) def testCart(self): shopping_cart = self.driver.find_element( By.CSS_SELECTOR, "div.header-minicart span.icon") def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2, testRunner=HTMLTestRunner( output="reports", report_name="findElements_report"))
Version 4.8.2 de Selenium: se agregaron constantes para tener un código más limpio, a continuación un ejemplo de cómo queda:
import unittest from selenium import webdriver from selenium.webdriver.common.by import By class HomePageTests(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Chrome(executable_path='./chromedriver') driver = self.driver driver.get("https://demo-store.seleniumacademy.com/") driver.maximize_window() driver.implicitly_wait(15) def test_search_text_field(self): search_field = self.driver.find_element(By.ID, "search") def test_search_text_field_by_name(self): search_field = self.driver.find_element(By.NAME, "q") def test_search_text_field_by_class(self): search_field = self.driver.find_element(By.CLASS_NAME, "input-text") def test_search_button_enabled(self): button = self.driver.find_element(By.CLASS_NAME, "button") def test_count_of_promo_banner_images(self): banner_list = self.driver.find_element(By.CLASS_NAME, "promos") banners = banner_list.find_elements(By.TAG_NAME, "img") self.assertEqual(3, len(banners)) def test_vip_promo(self): xpath_value = '//*[@id="top"]/body/div/div[2]/div[2]/div/div/div[2]/div[1]/ul/li[4]/a/img' vip_promo = self.driver.find_element(By.XPATH, xpath_value) def test_shopping_cart(self): shopping_cart_icon = self.driver.find_element(By.CSS_SELECTOR, "div.header-minicart span.icon") def tearDown(self) -> None: self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2)
Cuando actualizan este curso?
Comparto mi código probado en Linux (ubuntu)
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.common.by import By class HomePageTests(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver') driver = self.driver driver.get('http://demo-store.seleniumacademy.com/') driver.maximize_window() driver.implicitly_wait(5) def test_search_text_field(self): search_field = self.driver.find_element(By.ID, "search") def test_seach_by_name(self): search_field = self.driver.find_elements(By.CLASS_NAME, "q") def test_search_by_class_name(self): search_field = self.driver.find_element(By.CLASS_NAME, "input-text") def test_search_button(self): search_button = self.driver.find_element(By.CLASS_NAME, "search-button") def test_search_banner_images(self): banner_list = self.driver.find_element(By.CLASS_NAME, "promos") banners = banner_list.find_elements(By.TAG_NAME, "img") self.assertEqual(3, len(banners)) def text_vip_promo(self): vip_promo = self.driver.find_element(By.XPATH,"//*[@id='top']/body/div/div[2]/div[2]/div/div/div[2]/div[1]/ul/li[4]/a/img") def test_search_csc(self): shopping_cart = self.driver.find_element(By.CSS_SELECTOR, "div.header-minicart span.icon") def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output='reportes', report_name =' search_test-report'))
Quiero generar un aporte con respecto a esta clase, probablemente por el cambio de versiones tanto de python( mi versión 3.11) como de selenium, nuevamente no me funciona lo indicado en el video, investigando encontré que se debe importar la clase "By" de selenium(Linea 6), a continuación se muestra como me funciono:
Gracias eso era
A fecha 20/12/2022 el siguiente código para firefox, W11 y con el ambiente virtual creado.
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.common.by import By class HomePageTest(unittest.TestCase): @classmethod def setUpClass(self): self.driver = webdriver.Firefox(executable_path = r'.\geckodriver.exe') driver = self.driver driver.get('[ENLACE]/') driver.maximize_window() driver.implicitly_wait(15) def test_search_text_field_by_id(self): search_field = self.driver.find_element(By.ID, "search") def test_count_promo_banner_images(self): banner_list = self.driver.find_element(By.CLASS_NAME, "promos") banners = banner_list.find_elements(By.TAG_NAME, "img") self.assertEqual(3, len(banners)) def test_search_private_sales_button_by_xpath(self): XPATH = "/html/body/div/div[2]/div[2]/div/div/div[2]/ul/li[2]/a/img" private_sales_button = self.driver.find_element(By.XPATH, XPATH) def test_search_shopping_cart_icon_by_css_selector(self): shopping_cart_icon = self.driver.find_element(By.CSS_SELECTOR, "div.header-minicart span.icon") @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = 'reportes', report_name = 'HomePageTestReport') )
El uso de find_element_by_SELECTOR esta deprecado.
Ahora lo que se debe hacer es importar from selenium.webdriver.common.by import By y encontrar elementos de la siguiente forma find_elements(By.CLASS_NAME, 'foo')
from selenium.webdriver.common.by import By def test_search(self): search_field = self.driver.find_element(By.ID, 'search') def test_search_test_by_name(self): search_field = self.driver.find_element(By.NAME, 'q') def test_search_test_class_name(self): search_field = self.driver.find_element(By.CLASS_NAME, 'input-text') def test_search_button_enabled(self): search_field = self.driver.find_element(By.CLASS_NAME, 'button') def test_count_of_promo_banner_images(self): banner_list = self.driver.find_element(By.CLASS_NAME, 'promos') banners = banner_list.find_elements(By.TAG_NAME, 'img') self.assertEqual(3, len(banners))
Hola a mi no me funciono la instrucción de fin_alement_by_id entonces investigando encontré otra forma find_element("id","elemento-a-buscar") si queremos buscar otro tipo de selecctor cambiamos id por css, xpath etc.
def test_search_text_field(self): search_field = self.driver.find_element("id","fila-seccion-paginas-principales") print ("hola",search_field)
Hola Comunidad. tengo una duda con el código: ERROR test_search_text_field_class_name (main.HomePageTests) ... no lo reconoce el sistema y siempre sale error.
Selector XPATH, nos permite buscar algun elemento cuando no hay algo lo suficientemente explicito como una classe, id o name. No deberia ser XPATH una de las primeras opciones a utilizar en busqueda de algun elemento
import time time.sleep(15) # en ves de utilizar driver.implicity_wait( ) podemos utilizar time.sleep()
Actualización: search_field = self.driver.find_element("id", "search")
A alguien más le salió este error:
test_search_class (main.FindElements) Error
AttributeError
'WebDriver' object has no attribute 'find_element_by_class_name'
Al parecer esta sintaxis ya no es valida, seria estupendo actualizar este grandioso curso. La documentación para Python es Selenium doc Espero les sirve.
Ya no es válida la sintaxis Self.driver.find_element_by_id(‘id a buscar’), lo correcto sería:
self.driver.find_element(‘id’,’id a buscar’)
<code> ACTUALIZACION: 1- debemos importar: from selenium.webdriver.common.by import By 2- debemos escribir correctamente le siguiente: def test_search_text_field(self): search_field= self.driver search_field.find_element(By.ID, "search") *Me funcionó asi, espero les sirva y se ahorren tiempo. igual si buscan en la documentacion de selenium les sale (por si vuelven a actualizar)