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
Hace clic en los enlaces de los cursos y se redirige a https://practice.geeksforgeeks.org/
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA