Selenium предназначен для уничтожения процесса Geckodriver при удалении экземпляра веб-драйвера следующим образом: driver.quit()
. В моей среде тестирования я настроил вызов driver.quit()
после каждого теста.
Однако в некоторых случаях тест аварийно завершается по разным причинам, после чего этапы завершения (например, выход из драйвера) не выполняются. В результате я получаю несколько процессов geckodriver, которые я могу убить только вручную.
Есть ли хорошая практика, как обойти эту проблему? Возможно, как-то отслеживать процессы и убивать те, которые не передают никаких данных?
Или, может быть, создать несколько экземпляров, а затем использовать их повторно?
Я запускаю свои тесты в Grid, поэтому управление процессом через командную строку не сработает, так как это повлияет только на концентратор сетки.
ИЗМЕНИТЬ:
Существует возможность использования taskkill
для завершения всех процессов geckodriver на машине, но это не очень хорошее решение, поскольку:
- Я запускаю свои тесты через Selenium Grid, поэтому это повлияет только на концентратор сетки, а не на узлы.
- Есть несколько тестов, которые выполняются одновременно, и если я использую
taskkill
, я также уничтожу те, которые все еще используются. - Я не думаю, что уничтожение процессов с помощью
taskkill
в целом является хорошей практикой, я хотел бы найти более элегантное решение. Например. (1) процессы geckodriver отслеживаются на узле и завершаются только локально, когда они не используются или (2) каким-либо образом повторно используются.
taskkill
является хорошей практикой, и, поскольку я запускаю свои тесты через сетку, это повлияет только на концентратор сетки, а не на узлы. Во-вторых, я хотел бы найти более элегантное решение, при котором процессы geckodriver отслеживаются на узле и завершаются только локально, когда они не используются. Другой вариант, как я уже упоминал, как-то повторно использовать эти процессы. Я также добавил это к моему вопросу. - person Eugene S   schedule 17.01.2018