0. Resumen
Cuando se automatiza la interacción del navegador con Selenium, a menudo nos enfrentamos a escenarios en los que debemos esperar a que un elemento esté disponible o se cumplan ciertas condiciones.
Los métodos de espera en Selenium son 'Time.sleep()', 'Espera implícita', 'Espera explícita'.
Pero, ¿cuál deberíamos usar?
Compararemos detalladamente las diferencias entre los tres a través de sus ventajas y desventajas.
1. Time.sleep()
Esta es la forma básica en Python de introducir un retraso fijo en el script. Cuando se llama a time.sleep(segundos), la ejecución de todo el script se detiene durante el número de segundos especificado.
1.1. Ventajas de Time.sleep()
Es fácil de usar y no requiere configuración.
Se conoce exactamente cuánto tiempo espera el script.
1.2. Desventajas de Time.sleep()
En la mayoría de los casos, el retraso fijo es más largo de lo necesario, lo que aumenta el tiempo de ejecución de las pruebas.
Si la tarea que se está esperando se completa en un tiempo más corto que el tiempo de espera, la prueba puede fallar.
2. Espera implícita
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # WebDriver will wait for up to 10 seconds for an element to appear
driver.get('<https://example.com>')
element = driver.find_element_by_id('some-id')
요소가 웹 페이지에 나타나지 않는 경우 "해당 요소 예외 없음"을 발생시키기 전에 지정된 시간 동안 기다리도록 Selenium WebDriver에 지시합니다.
2.1. Ventajas de la espera implícita:
El WebDriver no espera todo el tiempo si el elemento está disponible antes.
Es más rápido que usar time.sleep().
Se aplica a toda la sesión del WebDriver.
2.2. Desventajas de la espera implícita
Debido a que no se puede estar seguro de cuánto tiempo realmente esperó el WebDriver antes de avanzar o fallar, puede dificultar la depuración.
Al combinar la espera implícita y la espera explícita, pueden surgir tiempos de espera impredecibles.
3. Espera explícita
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
driver = webdriver.Chrome()
driver.get('<https://example.com>')
# Waiting for up to 10 seconds until an element with the specified ID becomes visible
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, 'some-id'))
)
3.1. Ventajas de la espera explícita
Se pueden especificar diversas condiciones además de la presencia del elemento. Por ejemplo, se puede esperar hasta que un elemento sea clickeable, visible o muestre un texto específico.
No se extiende innecesariamente la duración de las pruebas. El script avanza una vez que se cumplen las condiciones.
Proporciona mensajes de error más claros para comprender fácilmente qué salió mal si la prueba falla.
3.2. Desventajas de la espera explícita
A diferencia de la espera implícita, se debe configurar la condición de espera cada vez que sea necesaria.
Solo es adecuada para manejar elementos web que se cargan con AJAX o en intervalos de tiempo variados.
4. Conclusión: Elija el método de espera adecuado para la situación.
La espera implícita es como lanzar una red amplia para asegurarse de que todos los elementos estén disponibles dentro del período establecido, mientras que la espera explícita es como usar una caña de pescar dirigida a un elemento específico con condiciones específicas.
En realidad, no se recomienda mezclar la espera implícita y la espera explícita. Al combinarlas al azar, aumenta la probabilidad de comportamientos impredecibles.
Generalmente, la espera explícita, que permite un control más detallado, es la opción preferida en entornos de aplicaciones web complejas.
Esperamos que aproveche bien esta información y la aplique de manera efectiva en su funcionalidad.
También te puede interesar:
Recopilación de datos, ahora automatizada
Comience en 5 minutos sin necesidad de codificación · Experiencia en rastreo de más de 5,000 sitios web




