Selenium Python es una de las mejores herramientas para la automatización de pruebas. En estos días, la mayoría de las aplicaciones web utilizan técnicas AJAX. Cuando el navegador carga una página, los elementos dentro de esa página pueden cargarse en diferentes intervalos de tiempo. Esto dificulta la localización de elementos: si un elemento aún no está presente en el DOM, una función de localización generará una excepción ElementNotVisibleException. Usando esperas, podemos resolver este problema. La espera proporciona cierta holgura entre las acciones realizadas, principalmente la ubicación de un elemento o cualquier otra operación con el elemento. Selenium Webdriver proporciona dos tipos de espera:
Esperas implícitas
Una espera implícita le dice a WebDriver que sondee el DOM durante un cierto período de tiempo cuando intente encontrar cualquier elemento (o elementos) que no esté disponible de inmediato. La configuración predeterminada es 0. Una vez establecida, la espera implícita se establece durante la vida útil del objeto WebDriver. Consideremos un ejemplo:
# import webdriver from selenium import webdriver driver = webdriver.Firefox() # set implicit wait time driver.implicitly_wait(10) # seconds # get url driver.get("http://somedomain / url_that_delays_loading") # get element after 10 seconds myDynamicElement = driver.find_element_by_id("myDynamicElement")
Esto espera hasta 10 segundos antes de lanzar una TimeoutException a menos que encuentre el elemento para regresar dentro de los 10 segundos. Para comprobar cómo implementar prácticamente las esperas implícitas en Webdriver, consulta las esperas implícitas en Selenium Pyth en
Esperas explícitas
Una espera explícita es un código que define para esperar a que ocurra una determinada condición antes de continuar con el código. El caso extremo de esto es time.sleep(), que establece la condición en un período de tiempo exacto para esperar. Se proporcionan algunos métodos convenientes que lo ayudan a escribir código que esperará solo el tiempo que sea necesario. Las esperas explícitas se logran mediante el uso de la clase webdriverWait en combinación con las condiciones esperadas. Consideremos un ejemplo:
# import necessary classes from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # create driver object driver = webdriver.Firefox() # A URL that delays loading driver.get("http://somedomain / url_that_delays_loading") try: # wait 10 seconds before looking for element element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: # else quit driver.quit()
Esto espera hasta 10 segundos antes de lanzar una TimeoutException a menos que encuentre el elemento para regresar dentro de los 10 segundos. WebDriverWait llama de manera predeterminada a ExpectedCondition cada 500 milisegundos hasta que regresa correctamente.
Condiciones esperadas:
existen algunas condiciones comunes que se usan con frecuencia cuando se automatizan los navegadores web. Por ejemplo, presencia_de_elemento_ubicado, título_es, etc. uno puede verificar métodos completos desde aquí – Métodos de conveniencia . Algunos de ellos son –
- título_es
- título_contiene
- presencia_de_elemento_ubicado
- visibilidad_de_elemento_ubicado
- visibilidad_de
- presencia_de_todos_los_elementos_ubicados
- elemento_ubicado_para_ser_seleccionado
- element_selection_state_to_be
- elemento_ubicado_selección_estado_a_ser
- alerta_es_presente
Para comprobar cómo implementar prácticamente las esperas implícitas en Webdriver, consulta las esperas explícitas en Selenium Python
¿Escribir código en un comentario? Utilice ide.geeksforgeeks.org , genere un enlace y compártalo aquí.
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA