Я взял ваш код, немного его изменил, чтобы он соответствовал моей Тестовой среде , и вот результаты выполнения:
Заключение
Довольно очевидно, что ваша программа логически безупречна и просто идеальна.
Этот сценарий использования
Поскольку вы упоминали, что эта ошибка появляется после нескольких часов очистки, я подозреваю, что это связано с тем, что WebDriver не является потоком -safe . Тем не менее, если вы можете сериализовать доступ к базовому экземпляру драйвера, вы можете поделиться ссылкой более чем в одном потоке. Это не рекомендуется. Но вы всегда можете создать один экземпляр WebDriver для каждого потока.
В идеале проблема thread-safety не в вашем коде, а в реальных привязках браузера. Все они предполагают, что будет только одна команда за раз (например, как настоящий пользователь). Но с другой стороны, вы всегда можете создать один экземпляр WebDriver для каждого потока, который будет запускать несколько вкладок просмотра / windows. До этого момента кажется, что ваша программа идеальна.
Теперь разные потоки могут быть запущены на одном Webdriver , но тогда результаты тестов не будут вы ожидаете. Причина в том, что когда вы используете многопоточность для запуска разных тестов на разных вкладках / windows требуется немного кодирования безопасности потока, иначе вы будете выполнять такие действия, как click()
или send_keys()
, будет go к открытой вкладке / окну, которое в настоящее время имеет focus независимо от того, какой поток вы ожидаете запустить. По сути, это означает, что все тесты будут выполняться одновременно на одной вкладке / окне с focus , но , а не на предполагаемой вкладке / окне.