Ответ 1
Эти три тайм-аута управляются серверной частью уравнения Selenium. Ваш скрипт, будь то Java, Python, Ruby, С# или любой другой, является клиентом, который отправляет команды на сервер, который живет в браузере. (Может существовать посредник, который передает команды в браузер, например, Selenium grid. К сожалению, его также иногда называют "сервером".)
Спецификация WebDriver, которая была получена из Selenium, основана на следующих значениях:
-
Для неявных ожиданий: 0 секунд. Это означает, что если команда selenium не находит элемент немедленно, она сообщает немедленно, а не ждет, пока элемент будет найден.
-
Для загрузки страницы: 300 секунд.
-
Для времени ожидания сценария: 30 секунд.
(Спецификация дает значения в миллисекундах. Я преобразовал их в секунды для удобства чтения.)
Selenium теперь следует спецификации WebDriver.
Однако в прошлом Selenium использовал другие значения для них. Например, драйвер Firefox использовал его время ожидания следующим образом:
-
Неявное время ожидания по умолчанию установлено в 0. Это означает, что если команда, которая находит элементы, ничего не находит, она не будет ждать.
-
Тайм- аут загрузки страницы по умолчанию установлен на -1. Это означает, что Selenium будет бесконечно ждать загрузки страницы.
То, что обнаружил Сайфур, отличается от времени ожидания загрузки страницы. Это тайм-аут между клиентом Selenium и сервером Selenium, что не очень хорошо объясняется на странице, найденной Сайфуром.
-
Время ожидания скрипта по умолчанию равно 0. Комментарий в исходном коде объясняет:
Время в миллисекундах, в течение которого сеанс должен ожидать завершения выполнения асинхронных сценариев. Если установлено значение 0, тайм-аут не будет срабатывать до следующего цикла событий после выполнения сценария. Это даст скрипты, которые используют 0-основанный setTimeout для завершения.
Таким образом, даже если он установлен на ноль, асинхронный скрипт все еще может выполняться, но он должен завершиться до того, как тайм-аут Selenium получит шанс на повторный запуск.
Это из кода, который Selenium использует для Firefox. Другие браузеры используют разные базы кода, но предполагается, что они ведут себя согласованно, по крайней мере, в отношении вещей, которые соответствуют самой Selenium, таких как эти тайм-ауты. Таким образом, значения и их интерпретации должны быть одинаковыми для других браузеров.