Esperas explícitas 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 esperas: implícita y explícita. Este artículo gira en torno a la espera explícita en Selenium Python.

Esperas
explícitas Una espera explícita es un código que usted 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

¿Cómo crear una espera explícita en Selenium Python?

La espera explícita, tal como se define, sería la combinación de WebDriverWait y las condiciones esperadas. Implementemos esto en https://www.geeksforgeeks.org/ y esperemos 10 segundos antes de ubicar un elemento.

# import webdriver 
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
  
# create webdriver object 
driver = webdriver.Firefox() 
    
# get geeksforgeeks.org 
driver.get("https://www.geeksforgeeks.org/") 
    
# get element  after explicitly waiting for 10 seconds
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.link_text, "Courses"))
    )
# click the element 
element.click() 

Salida:
primero abre https://www.geeksforgeeks.org/ y luego encuentra el enlace Cursos
driver-methods-Selenium-Python

Hace clic en los enlaces de los cursos y se redirige a https://practice.geeksforgeeks.org/

action-chains-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 *