CursosEmpresasBlogLiveConfPrecios

Controles dinámicos

Clase 18 de 24 • Curso de Introducción a Selenium con Python

Clase anteriorSiguiente clase

Contenido del curso

Conocer el ecosistema de Selenium
  • 1
    Por qué aprender Selenium y qué verás

    Por qué aprender Selenium y qué verás

    03:15
  • 2
    Historia de Selenium

    Historia de Selenium

    09:05
  • 3
    Otras herramientas de testing y automatización

    Otras herramientas de testing y automatización

    03:40
Preparar entorno de trabajo
  • 4
    Configurar entorno de trabajo

    Configurar entorno de trabajo

    01:43
  • 5

    Compatibilidad con Python 3.9 y aprendiendo a utilizar múltiples versiones

    01:44
  • 6
    ¡Hola, mundo!

    ¡Hola, mundo!

    11:51
Utilizar comandos básicos
  • 7
    Encontrar elementos con find_element

    Encontrar elementos con find_element

    15:23
  • 8
    Preparar assertions y test suites

    Preparar assertions y test suites

    13:50
  • 9

    Entender las clases WebDriver y WebElement

    01:18
Interactuar con elementos
  • 10
    Manejar form, textbox, checkbox y radio button

    Manejar form, textbox, checkbox y radio button

    13:37
  • 11
    Manejar dropdown y listas

    Manejar dropdown y listas

    07:42
  • 12
    Manejar alert y pop-up

    Manejar alert y pop-up

    06:05
  • 13
    Automatizar navegación

    Automatizar navegación

    03:54
Sincronizar pruebas
  • 14
    Demora implícita y explícita

    Demora implícita y explícita

    08:38
  • 15

    Condicionales esperadas

    00:44
Retos
  • 16
    Agregar y eliminar elementos

    Agregar y eliminar elementos

    09:16
  • 17
    Elementos dinámicos

    Elementos dinámicos

    06:46
  • 18
    Controles dinámicos

    Controles dinámicos

    08:01
  • 19
    Typos

    Typos

    05:43
  • 20
    Ordenar tablas

    Ordenar tablas

    07:12
Metodologías de Trabajo
  • 21
    Data Driven Testing (DDT)

    Data Driven Testing (DDT)

    13:35
  • 22
    Page Object Model (POM)

    Page Object Model (POM)

    10:35
Cierre del curso
  • 23
    Realizar una prueba técnica

    Realizar una prueba técnica

    11:33
  • 24
    Conclusiones

    Conclusiones

    01:43
    Royer Guerrero Pinilla

    Royer Guerrero Pinilla

    student•
    hace 5 años

    Si les cuesta leer la pausa explicita siempre pueden formatear su codigo asi

    WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#checkbox-example > button')) )
      Juan Zenón

      Juan Zenón

      student•
      hace 5 años

      Incluso pueden identar aún más para que siga viéndose bien incluso en un espacio angosto como este.

      WebDriverWait(driver, 15).until( EC.element_to_be_clickable( (By.CSS_SELECTOR, "#checkbox-example > button") ) )
      Ariel Aracena Alvarez

      Ariel Aracena Alvarez

      student•
      hace 5 años

      Gracias

    Ricardo Cuéllar

    Ricardo Cuéllar

    student•
    hace 5 años

    Excelente clase me quedo más claro que en la clase dedicado a Demora implicita y explicita. :)

    Les comparto el código de la clase por si alguien tiene problemas en el futuro:

    import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #Esperas explicitas class DynamicControls(unittest.TestCase): #Prepara entorno de la prueba. def setUp(self): self.driver = webdriver.Chrome('chromedriver') driver = self.driver driver.get("http://the-internet.herokuapp.com/") driver.find_element_by_link_text('Dynamic Controls').click() #Casos de prueba def test_dynamic_controls(self): driver = self.driver checkbox = driver.find_element_by_css_selector("#checkbox > input[type=checkbox]") checkbox.click() remove_add = driver.find_element_by_css_selector("#checkbox-example > button") remove_add.click() #Webdriver wait (driver, espera). hasta que (EC.el elemento sea clickable(tupla)) tupla (por selector CSS, "Selector") WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#checkbox > input[type=checkbox]"))) remove_add.click() enable_disable_button = driver.find_element_by_css_selector("#input-example > button") enable_disable_button.click() WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#input-example > button"))) text_area = driver.find_element_by_css_selector("#input-example > input[type=text]") text_area.send_keys('Platzi') enable_disable_button.click() #Finalizar def tearDow(self): self.driver.quit() #Revisar con close if __name__ == "__main__": unittest.main(verbosity=2)
      Fredy Mendoza Vargas

      Fredy Mendoza Vargas

      student•
      hace 5 años

      Muchas gracias

      Antonio Demarco Bonino

      Antonio Demarco Bonino

      student•
      hace 5 años

      Me sirvió mucho tu código. Lo use para arreglar cosas que estaban mal en el mío. Muchas gracias por tu ayuda.

    Sandra Milena Rojas Herrán

    Sandra Milena Rojas Herrán

    student•
    hace 4 años

    Yo tuve un problema durante mi codificación y el error que me salía era que los elementos no tenían el atributo clic, pues son una lista dentro del site:

    Lo que yo hice fue iterar dentro de la lista y ahí si darle click al elemento. Así:

    checkboxs = driver.find_elements_by_css_selector("#checkbox > input[type=checkbox]") for checkbox in checkboxs: checkbox.click()

    Luego de haber implementado esto, el código me funciono sin ningún problema.

    Les dejo el código completo:

    from lib2to3.pgen2 import driver from pickletools import uint1 import unittest from venv import create from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By class DynamicControls(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'C://Users//saman//Downloads//Studies//Selenium_python//chromedriver_win32//chromedriver.exe') driver = self.driver driver.maximize_window() driver.get("Aquí va el site de prueba") driver.find_element_by_link_text('Dynamic Controls').click() def test_add_remove(self): driver = self.driver checkboxs = driver.find_elements_by_css_selector("#checkbox > input[type=checkbox]") for checkbox in checkboxs: checkbox.click() remove_add_buttons = driver.find_elements_by_css_selector('#checkbox-example > button') for remove_add_button in remove_add_buttons: remove_add_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#checkbox-example > button'))) remove_add_button.click() enable_disable_buttons = driver.find_elements_by_css_selector('#input-example > button') for enable_disable_button in enable_disable_buttons: enable_disable_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#input-example > button'))) text_areas = driver.find_elements_by_css_selector('#input-example > input[type=text]') for text_area in text_areas: text_area.send_keys('Los amo familia') for enable_disable_button in enable_disable_buttons: enable_disable_button.click() def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)

    Si tienen alguna otra duda, no duden en preguntar, aquí estamos para ayudarnos.... <3

      Francisco Peñalo Feliz

      Francisco Peñalo Feliz

      student•
      hace 3 años

      @samantharojash veo que te retorna una lista de elementos porque usaste el método find_elements_by_css_selector en vez de find_element_by_css_selector.

      Otra cosa es que en las versiones recientes de Selenium ya no existen dichos metodos que utilizar el profesor en los videos para buscar los elementos.

      Para buscar un elemento debes usar el metodo find_element o para buscar una lista de elementos usar find_elements

      Ejemplo:

      driver.find_element(By.CSS_SELECTOR, '#checkbox-example > button')
    estefany Liza

    estefany Liza

    student•
    hace 4 años

    Comparto mi código

    import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome import options class Dynamic_controls(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome("D:\webdriver-chrome/chromedriver.exe") driver = self.driver driver.implicitly_wait(50) driver.maximize_window() driver.get('https://the-internet.herokuapp.com/') driver.find_element_by_link_text("Dynamic Controls").click() def test_dynamic_controls(self): driver = self.driver checkbox = driver.find_element_by_css_selector("#checkbox > input[type=checkbox]") checkbox.click() remove_add_buttom = driver.find_element_by_css_selector("#checkbox-example > button") remove_add_buttom.click() WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#checkbox-example > button"))) remove_add_buttom.click() enable_desable_buttom = driver.find_element_by_css_selector("#input-example > button") enable_desable_buttom.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#input-example > button"))) text_area = driver.find_element_by_css_selector("#input-example > input[type=text]") text_area.send_keys('Platzi') enable_desable_buttom.click() def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2,testRunner=HTMLTestRunner(output="reportes", report_name="prueba_asssert"))
    Luis Eduardo Lerena Pereira

    Luis Eduardo Lerena Pereira

    student•
    hace 4 años
    import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep class DynamicControls(unittest.TestCase): @classmethod def setUpClass(self): self.driver = webdriver.Chrome(executable_path=r'C:/Users/Usuario/Documents/platzi/python/Clases del Curso de Introducción a Selenium con Python/chromedriver.exe') driver = self.driver driver.get('https://the-internet.herokuapp.com/') driver.maximize_window() driver.find_element(By.LINK_TEXT, 'Dynamic Controls').click() def test_add_remove(self): driver = self.driver button_remove = driver.find_element(By.XPATH, '//*[@id="checkbox-example"]/button[contains(text(),"Remove")]') button_remove.click() button_add = WebDriverWait(driver=driver, timeout=10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="checkbox-example"]/button[contains(text(),"Add")]'))) paragraph = driver.find_element(By.XPATH, '//*[@id="message"][contains(text(),"It\'s gone!")]') button_add.click() button_remove = WebDriverWait(driver=driver, timeout=10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="checkbox-example"]/button[contains(text(),"Remove")]'))) paragraph = driver.find_element(By.XPATH, '//*[@id="message"][contains(text(),"It\'s back!")]') def test_enable_disable(self): driver = self.driver button_action = driver.find_element(By.XPATH, '//*[@id="input-example"]/button[contains(text(),"Enable")]') button_action.click() self.status_field(self.get_input()) button_action.click() self.status_field(self.get_input()) def get_input(self): return WebDriverWait(driver=self.driver, timeout=10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="input-example"]/input'))) def status_field(self, input_enable): sleep(3) if input_enable.is_enabled(): print('The field is enable.') else: print('The field is disable.') @classmethod def tearDownClass(self): driver = self.driver driver.close() driver.quit() if __name__ == '__main__': unittest.main(verbosity=1)
    jason alejandro martinez jimenez

    jason alejandro martinez jimenez

    student•
    hace 5 años

    Aquí esta el código actualizado, hay que hacerle unos cambios al css selector en el primer webdriver que usamos, ya que el css selector de remove no es el mismo que el de add :D ( agregue unos sleeps de mala practica abajo para que se logre ver la diferencia xD si pudiste quitar esos sleeps con algún webdriver me gustaría verlo UwU

    from time import sleep import unittest from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver class DynamicControls(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'inserta tu acceso rapido') driver = self.driver driver.get('inserte link') driver.find_element_by_link_text('Dynamic Controls').click() def test_dynamic_controls(self): driver = self.driver checkbox = driver.find_element_by_css_selector('#checkbox > input:nth-child(1)') checkbox.click() remove_add_button = driver.find_element_by_css_selector('#checkbox-example > button:nth-child(2)') remove_add_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#checkbox-example > button:nth-child(1)'))) remove_add_button.click() enable_disable_button = driver.find_element_by_css_selector('#input-example > button:nth-child(2)') enable_disable_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#input-example > button:nth-child(2)'))) text_area = driver.find_element_by_css_selector('#input-example > input:nth-child(1)') text_area.click() sleep(3) text_area.send_keys('Hola') sleep(3) enable_disable_button.click() def tearDown(self): self.driver.close() if __name__ == '__main__': unittest.main()
    Leonardo Ismael Hakim

    Leonardo Ismael Hakim

    student•
    hace 5 años

    Hace varios dias que no funciona el sitio de prácticas. Lo van a solucionar en algun momento?? Se hace dificil seguir las practicas sin este sitio porq no es facil encontrar otro tan especifico. Gracias

      Cristian David Restrepo Marin

      Cristian David Restrepo Marin

      student•
      hace 5 años

      Hola leonardo-ismael-hakim la pagina de pruebas https://the-internet.herokuapp.com/ se encuentra activa y funcionando. Saludos!

      Leonardo Ismael Hakim

      Leonardo Ismael Hakim

      student•
      hace 5 años

      Siii, luego me di cuenta que estaba mal la URL. Gracias!!

    Ismael Danilo Herrera Sánchez

    Ismael Danilo Herrera Sánchez

    student•
    hace 4 años

    A alguien le sale este error?

    Sin título.jpg

    Si te sale es porque en tu codigo estas utilizando:

    checkbox = driver.find_elements_by_css_selector("#checkbox > input[type=checkbox]")

    En vez de:

    checkbox = driver.find_element_by_css_selector("#checkbox > input[type=checkbox]")

    Sip el error es porque nos equivocamos en la letra "s"

    Miguel Ángel Carrillo Hernández

    Miguel Ángel Carrillo Hernández

    student•
    hace 4 años

    Hola alguien sabe, porque si utilizo

    Para revisar que no este el elemento si funciona

    WebDriverWait(driver, 120).until(EC.invisibility_of_element(checkbox))

    #WebDriverWait(driver, 60).until_not(EC.invisibility_of_element(checkbox))

    También probe en su versión visibility_of_element, pero el resultado fue el mismo.

    Pero si utilizo para revisar que si este no funciona

    def test_dynamic_checkbox(self): driver = self.driver

    checkbox = driver.find_element_by_xpath('//*[@id="checkbox"]') checkbox_xpath = '//*[@id="checkbox"]' checkbox_button = driver.find_element_by_xpath('//*[@id="checkbox-example"]/button') checkbox_button.click() WebDriverWait(driver, 120).until(EC.invisibility_of_element(checkbox)) checkbox_button.click() WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPATH, checkbox_xpath))) # Con el de abajo no funciona #WebDriverWait(driver, 60).until_not(EC.invisibility_of_element(checkbox))
      Edgar Vallejo Curti

      Edgar Vallejo Curti

      student•
      hace 4 años

      Creo que es por la forma como pasas el parametro <checkbox>. Si mal no recuerdo, debería ser una tupla con un By y la referencia del checkbox.

      Hugo Gomez Tinoco

      Hugo Gomez Tinoco

      student•
      hace 4 años

      Te falta un paréntesis y el By en

      checkbox_button.click() WebDriverWait(driver, 120).until(EC.invisibility_of_element(checkbox)) #Debería ser checkbox_button.click() WebDriverWait(driver, 120).until(EC.invisibility_of_element((BY.NAME, 'checkbox')))
    oscar de la cruz

    oscar de la cruz

    student•
    hace 4 años

    Buenos dias, debo realizar la descarga de un archivo desde una url, pero no se cuanto tiempo se demora hacerlo. A prueba y error he logrado dejar el navegador abierto 30 segundos "sleep(30)" y funciona. No creo que sea la mejor opción ¿Como puedo condicionar el cierre del navegador una vez se halla descargado el archivo?. Adjunto el codigo que estoy utlizando. Gracias.

    import unittest from time import sleep from selenium import webdriver class BankRep(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path='../driver/chromedriver') def test_download_monedas_disponible(self): driver = self.driver driver = self.driver driver.get('https://totoro.banrep.gov.co/analytics/saw.dll?Go&NQUser=publico&NQPassword=publico123') driver.get('https://totoro.banrep.gov.co/analytics/saw.dll?Go&NQUser=publico&NQPassword=publico123&Path=/shared/Series%20Estad%C3%ADsticas_T/1.%20Monedas%20disponibles/1.3.TCM_Descarga_CSV_XML&download_type=csv&lang=es') # Espera 30 segundo mientras se realiza la descarga del archivo de texto sleep(30) def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main(verbosity=2)
    ANIBAL OZIEL ALVARADO CERVANTES

    ANIBAL OZIEL ALVARADO CERVANTES

    student•
    hace 4 años

    Hola :

    Alguien sabrá porque cuando corro los códigos, que si los ejecuta exitosamente, sale un mensaje al inicio : DevTools listening on ws:

    favor de apoyarme con lo anterior.

    ¡Saludos !

    Atte.

    Aníbal

      Héctor Daniel Vega Quiñones

      Héctor Daniel Vega Quiñones

      teacher•
      hace 4 años

      Posiblemente esto se deba a que el driver que estás utilizando esté desactualizado y debas descargar el de la versión actual de tu navegador.

      ANIBAL OZIEL ALVARADO CERVANTES

      ANIBAL OZIEL ALVARADO CERVANTES

      student•
      hace 4 años

      Hola Héctor :

      Gracias por tu aporte.

      Tengo otra pregunta, acabo de terminar el curso de SELENIUM, pero tuve problemas para que se cargara el navegador de WEBDRIVER desde WSL2, tuve que pasarme a CMDER para poder accesar el WEBDRIVER.

      La pregunta es si en WSL2 no es posible ver gráficamente SELENIUM ?.

      ¡Saludos!

      Atte.

      Aníbal

    Mario Alexander Vargas Celis

    Mario Alexander Vargas Celis

    student•
    hace 2 años

    Mi codigo:

    import unittest from selenium import webdriver from pyunitreport import HTMLTestRunner from selenium.webdriver.common.by import By #from time import sleep from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class DynamicControls(unittest.TestCase): def setUp(self): chrome_driver_path = r"/chromedriver.exe" self.driver = webdriver.Chrome() driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("https://the-internet.herokuapp.com/") driver.find_element(By.LINK_TEXT, "Dynamic Controls").click() def test_dynamic_controls(self): driver = self.driver checkbox = driver.find_element(By.CSS_SELECTOR, '#checkbox > input[type=checkbox]') checkbox.click() remove_add_button = driver.find_element(By.CSS_SELECTOR, '#checkbox-example > button') remove_add_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#checkbox-example > button'))) remove_add_button.click() enable_disable_button = driver.find_element(By.CSS_SELECTOR, '#input-example > button') enable_disable_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#input-example > button'))) text_area = driver.find_element(By.CSS_SELECTOR, '#input-example > input[type=text]') text_area.send_keys('Platzi') enable_disable_button.click() def tearDown(self) -> None: self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = "reportes", report_name = "dynamic_controls_test_report")) ```import unittestfrom selenium import webdriverfrom pyunitreport import HTMLTestRunnerfrom selenium.webdriver.common.by import By#from time import sleepfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected\_conditions as EC class DynamicControls(unittest.TestCase): &#x20; def setUp(self): chrome\_driver\_path = r"/chromedriver.exe" self.driver = webdriver.Chrome() driver = self.driver driver.implicitly\_wait(30) driver.maximize\_window() driver.get("https://the-internet.herokuapp.com/") driver.find\_element(By.LINK\_TEXT, "Dynamic Controls").click() &#x20; def test\_dynamic\_controls(self): driver = self.driver &#x20; checkbox = driver.find\_element(By.CSS\_SELECTOR, '#checkbox > input\[type=checkbox]') checkbox.click() &#x20; remove\_add\_button = driver.find\_element(By.CSS\_SELECTOR, '#checkbox-example > button') remove\_add\_button.click() &#x20; WebDriverWait(driver, 15).until(EC.element\_to\_be\_clickable((By.CSS\_SELECTOR, '#checkbox-example > button'))) remove\_add\_button.click() &#x20; enable\_disable\_button = driver.find\_element(By.CSS\_SELECTOR, '#input-example > button') enable\_disable\_button.click() &#x20; WebDriverWait(driver, 15).until(EC.element\_to\_be\_clickable((By.CSS\_SELECTOR, '#input-example > button'))) &#x20; text\_area = driver.find\_element(By.CSS\_SELECTOR, '#input-example > input\[type=text]') text\_area.send\_keys('Platzi') &#x20; enable\_disable\_button.click() &#x20; def tearDown(self) -> None: self.driver.close() if \_\_name\_\_ == "\_\_main\_\_": unittest.main(verbosity = 2, testRunner = HTMLTestRunner(output = "reportes", report\_name = "dynamic\_controls\_test\_report"))
    Yoshie Garcés Rodríguez

    Yoshie Garcés Rodríguez

    student•
    hace 2 años

    Dejo mi version con reporte y realizaco con XPATH

    import unittest from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from pyunitreport import HTMLTestRunner class DynamicControls(unittest.TestCase): @classmethod def setUpClass(cls): # Configurar el WebDriver y abrir la página web cls.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver = cls.driver driver.get('URL') driver.implicitly_wait(10) driver.maximize_window() driver.find_element(By.LINK_TEXT, 'Dynamic Controls').click() #Se define el método de prueba test_remove_checkbox(). Este método realiza las siguientes acciones: #Espera a que el elemento de checkbox sea visible. #Hace clic en el checkbox. #Encuentra el botón de eliminar mediante su XPath. #Verifica que el checkbox esté visible. #Hace clic en el botón de agregar nuevamente. def test_remove_checkbox(self): driver = self.driver checkbox = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'checkbox'))) checkbox.click() remove_button = driver.find_element(By.XPATH, '//*[@id="checkbox-example"]/button') self.assertTrue(checkbox.is_displayed()) remove_button.click() checkbox = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="checkbox-example"]/button'))) checkbox.click() #Se define el método de prueba test_enable_text_field(). Este método realiza las siguientes acciones: #Encuentra el botón de habilitar mediante su XPath. #Encuentra el campo de texto mediante su XPath. #Verifica que el campo de texto no esté habilitado. #Hace clic en el botón de habilitar. #Espera a que el campo de texto sea clicable. #Ingresa un texto de prueba en el campo de texto. #Encuentra el botón de deshabilitar mediante su XPath. def test_enable_text_field(self): driver = self.driver enable_button = driver.find_element(By.XPATH, '//*[@id="input-example"]/button') text_field = driver.find_element(By.XPATH, '//*[@id="input-example"]/input') self.assertFalse(text_field.is_enabled()) enable_button.click() text_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="input-example"]/input'))) text_field.send_keys("Texto de prueba") disable_button = driver.find_element(By.XPATH, '//*[@id="input-example"]/button') disable_button.click() #Se define el método tearDownClass() con el decorador @classmethod. Este método se ejecuta después de todas las pruebas de la clase y se encarga de cerrar el WebDriver. @classmethod def tearDownClass(cls): cls.driver.quit() #Se verifica si el archivo se está ejecutando directamente y no siendo importado como un módulo. En caso afirmativo, se ejecuta unittest.main() para ejecutar las pruebas y generar el informe HTML. if __name__ == "__main__": unittest.main(testRunner=HTMLTestRunner(output='reportes', report_name='dynamic_controls'))
    William Daniel Avila Barbeito

    William Daniel Avila Barbeito

    student•
    hace 3 años

    Dejo aquí mi versión (firefox)

    import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep class DynamicControls(unittest.TestCase): @classmethod def setUpClass(self): self.driver = webdriver.Firefox(executable_path = r'.\geckodriver.exe') driver = self.driver driver.get('URL') driver.maximize_window() driver.implicitly_wait(10) def test_remove_add_button(self): driver = self.driver remove_button = driver.find_element(By.XPATH, '//*[@id="checkbox-example"]/button[contains(text(),"Remove")]') remove_button.click() self.validate_paragraph_text("It's gone!") button_add = driver.find_element(By.XPATH, '//*[@id="checkbox-example"]/button[contains(text(),"Add")]') button_add.click() self.validate_paragraph_text("It's back!") remove_button.click() self.validate_paragraph_text("It's gone!") def test_enable_disable(self): driver = self.driver enable_disable_button = driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/form[2]/button') enable_disable_button.click() self.validate_paragraph_text("It's enabled!") enable_disable_button.click() self.validate_paragraph_text("It's disabled!") enable_disable_button.click() self.validate_paragraph_text("It's enabled!") def validate_paragraph_text(self, expectedText): paragraph = self.driver.find_element(By.CSS_SELECTOR, '#message') paragraph_text = paragraph.text self.assertEqual(paragraph_text, expectedText) @classmethod def tearDownClass(self): driver = self.driver driver.close() driver.quit() if __name__ == '__main__': unittest.main(verbosity=1)
    Diego Antonio Castellanos

    Diego Antonio Castellanos

    student•
    hace 3 años

    Recuedren que el CSS_SELECTOR del botón Remove/Add son diferentes.

    Rubén Cuello

    Rubén Cuello

    student•
    hace 4 años

    Muy entretenido la verdad. Me salió a la primera por suerte :smile:

    Juan Carlos Ortiz Romero

    Juan Carlos Ortiz Romero

    student•
    hace 4 años
    import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class DynamicControl(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path= './chromedriver') driver = self.driver driver.get('https://the-internet.herokuapp.com/') driver.find_element_by_link_text('Dynamic Controls').click() def test_check_box(self): driver = self.driver checkbox= driver.find_element_by_css_selector('#checkbox') checkbox.click() remove_add_button = driver.find_element_by_css_selector('#checkbox-example > button') remove_add_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#checkbox-example > button"))) remove_add_button.click() enable_disable_button = driver.find_element_by_css_selector('#input-example > button') enable_disable_button.click() WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#input-example > button'))) text_area = driver.find_element_by_css_selector('#input-example > input[type=text]') text_area.send_keys('Jeyfred') enable_disable_button.click() def test_button_enabled(self): pass def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)
    Enrique Uzcategui

    Enrique Uzcategui

    student•
    hace 4 años

    Este fue mi solución antes de ver la clase

    import unittest from selenium import webdriver from selenium.webdriver.common.by import By # Helps get elements through selectors for interaction from selenium.webdriver.support.ui import WebDriverWait # Helps uses expected conditions and explicit waits from selenium.webdriver.support import expected_conditions as EC class AddRemoveElements(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path='./chromedriver') driver = self.driver driver.get('Ya saben') driver.find_element_by_link_text('Dynamic Controls').click() def test_add_remove_checkbox(self): driver = self.driver remove_checkbox_btn = driver.find_element_by_xpath( '/html/body/div[2]/div/div[1]/form[1]/button' ) remove_checkbox_btn.click() message = WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located((By.ID, 'message'))) if message.text == "It's gone!": add_checkbox_btn = remove_checkbox_btn add_checkbox_btn.click() message = WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located((By.ID, 'message'))) if message.text == "It's back!": print('Button removed and added successfully!') checkbox = driver.find_element_by_id('checkbox') checkbox.click() WebDriverWait(self.driver, 10).until( EC.element_to_be_selected(checkbox)) def test_enable_disable_input(self): driver = self.driver enable_input_btn = driver.find_element_by_xpath( '/html/body/div[2]/div/div[1]/form[2]/button' ) enable_input_btn.click() input_xpath = '/html/body/div[2]/div/div[1]/form[2]/input' input = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, input_xpath))) if input.is_enabled: disable_input_btn = enable_input_btn input.send_keys("It's working!") disable_input_btn.click() message = WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located((By.ID, 'message'))) if message.text == "It's disabled!": print('Button enabled and disabled successfully!') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
    Miguel Angel Berrio Huamani

    Miguel Angel Berrio Huamani

    student•
    hace 4 años

    Comparto mi solución. Tal vez falta optimizar algunas cosas. Pero es funcional.

    import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait class Reto3(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Edge(executable_path="./msedgedriver.exe") driver = self.driver driver.maximize_window driver.get("https://the-internet.herokuapp.com") def test3(self): self.driver.find_element_by_link_text("Dynamic Controls").click() self.driver.find_element_by_xpath('//*[@id="checkbox"]/input').click() self.driver.find_element_by_xpath( '//*[@id="checkbox-example"]/button').click() button_remove = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="checkbox-example"]/button'))) button_remove.click() WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="checkbox-example"]/button'))) button_activate_deactivate = self.driver.find_element_by_xpath( '//*[@id="input-example"]/button') button_activate_deactivate.click() test = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable( (By.XPATH, '//*[@id="input-example"]/input'))) test.send_keys("Hola") button_activate_deactivate.click() WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable( (By.XPATH, '//*[@id="input-example"]/button'))) def tearDown(self) -> None: self.driver.close() if __name__ == "__main__": unittest.main(verbosity=2)
    Jose Noriega

    Jose Noriega

    student•
    hace 4 años

    Reto

    from os import remove import unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from common import SERVICE from common import CHROME_OPTIONS class DynamicElementsTestCase(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.driver = webdriver.Chrome( service=SERVICE, options=CHROME_OPTIONS, ) cls.driver.get('https://the-internet.herokuapp.com/dynamic_controls') cls.driver.maximize_window() cls.driver.implicitly_wait(1) def test_async_remove_add(self): remove_add_button: WebElement remove_add_button = self.driver.find_element(By.XPATH, '//*[@id="checkbox-example"]/button') self.assertEqual(remove_add_button.text, 'Remove') self.driver.find_element(By.ID, 'checkbox') # Remove remove_add_button.click() WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, '//*[@id="checkbox-example"]/button'))) self.assertEqual(remove_add_button.text, 'Add') # Add remove_add_button.click() WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, '//*[@id="checkbox-example"]/button'))) self.assertEqual(remove_add_button.text, 'Remove') self.driver.find_element(By.ID, 'checkbox') def test_async_enable_disabled(self): toggle_button: WebElement toggle_button = self.driver.find_element(By.XPATH, '//*[@id="input-example"]/button') self.assertEqual(toggle_button.text, 'Enable') self.assertFalse(self.driver.find_element(By.XPATH, '//*[@id="input-example"]/input').is_enabled()) # Enable toggle_button.click() WebDriverWait(self.driver, 10).until(expected_conditions.invisibility_of_element_located((By.XPATH, '/html/body/div[2]/div/div[1]/form[2]/div'))) self.assertEqual(toggle_button.text, 'Disable') self.assertTrue(self.driver.find_element(By.XPATH, '//*[@id="input-example"]/input').is_enabled()) # Disable toggle_button.click() WebDriverWait(self.driver, 10).until(expected_conditions.invisibility_of_element_located((By.XPATH, '/html/body/div[2]/div/div[1]/form[2]/div'))) self.assertEqual(toggle_button.text, 'Enable') self.assertFalse(self.driver.find_element(By.XPATH, '//*[@id="input-example"]/input').is_enabled()) @classmethod def tearDownClass(cls) -> None: cls.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads