Espera en Selenium Python

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

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *