Carmen, miembro de nuestro staff, nos ha hecho el favor de redactar esta sección porque domina muy bien este tema.
Solución:
Estos tres tiempos de espera son administrados por el lado del servidor de la ecuación de Selenium. Su secuencia de comandos, ya sea en Java, Python, Ruby, C# o lo que sea, es un cliente que envía comandos a un servidor que vive en el navegador. (Puede haber un intermediario que transmita comandos al navegador, como Selenium grid. Desafortunadamente, a veces también se le llama “servidor”).
La especificación WebDriver, que se derivó de Selenium, se ha establecido en los siguientes valores:
-
Para esperas implícitas: 0 segundos. Esto significa que si un comando de Selenium no encuentra un elemento de inmediato, informa de inmediato, en lugar de esperar hasta que se encuentre un elemento.
-
Para cargas de página: 300 segundos.
-
Para tiempos de espera de secuencias de comandos: 30 segundos.
(La especificación proporciona los valores en milisegundos. Los he convertido a segundos para facilitar la lectura).
Selenium ahora sigue la especificación WebDriver.
Sin embargo, en el pasado, Selenium ha usado otros valores para estos. Por ejemplo, el controlador de Firefox solía definir sus tiempos de espera de esta manera:
-
El tiempo de espera implícito se establece en 0 de forma predeterminada. Esto significa que si un comando que encuentra elementos no encuentra nada, no esperará.
-
El tiempo de espera de carga de la página está establecido en -1 de forma predeterminada. Esto significa que Selenium esperará indefinidamente a que se cargue la página.
Lo que Saifur encontró es no lo mismo que el tiempo de espera de carga de la página. Ese es un tiempo de espera entre el cliente Selenium y el servidor Selenium, que no se explica particularmente bien en la página que encontró Saifur.
-
El tiempo de espera del script se establece en 0 de forma predeterminada. Un comentario en el código fuente explica:
La cantidad de tiempo, en milisegundos, que esta sesión debe esperar para que terminen de ejecutarse los scripts asincrónicos. Si se establece en 0, el tiempo de espera no se activará hasta el próximo ciclo de eventos después de que se ejecute el script. Esto dará secuencias de comandos que emplean un setTimeout basado en 0 para finalizar.
Entonces, incluso si se establece en cero, un script asincrónico aún puede ejecutarse, pero debe completarse antes de que el tiempo de espera de Selenium tenga la oportunidad de ejecutarse nuevamente.
Esto es del código que usa Selenium para Firefox. Los otros navegadores usan diferentes bases de código, pero se supone que se comportan de manera consistente, al menos con respecto a las cosas que son propias de Selenium, como estos tiempos de espera. Por lo tanto, los valores y sus interpretaciones también deberían ser los mismos para otros navegadores.
valoraciones y comentarios
Recuerda que puedes dar visibilidad a esta noticia si lograste el éxito.