По вашему вопросу, используя следующую строку кода:
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
уничтожить браузер клиента процесс будет против всех Best Practices .
При автоматизации через Selenium
в соответствии с лучшими практиками, вы должны вызывать метод quit()
в tearDown() {}
. В соответствии с WebDriver W3C Editor's Draft
, вызывающим quit()
DELETE
s текущего сеанса просмотра посредством отправки "quit" команды с {"flags": ["eForceQuit"]} и, наконец, отправляет запрос GET на / shutdown EndPoint
.
В качестве примера можно привести GeckoDriver (вариант WebDriver, совместимый с W3C). Вот последовательность событий:
1503397488598 webdriver::server DEBUG -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74
1503397488607 geckodriver::marionette TRACE -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821 webdriver::server DEBUG -> GET /shutdown
Таким образом, при вызове метода quit()
сеанс Web Client и экземпляр WebDriver полностью уничтожаются. Следовательно, вам не нужно вводить какие-либо дополнительные шаги, которые будут накладными расходами.
Решение
Заменить строку кода:
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
С:
driver.quit();
Здесь вы можете найти подробное обсуждение Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?
Дополнительные замечания
- Убедитесь, что WebDriver Binary имеет разрешение на выполнение для пользователей без полномочий root. (
chmod 777
)
- Убедитесь, что двоичный WebDriver присутствует в указанном месте.
- Выполните
Test
как пользователь без полномочий root.
- Всегда вызывайте
driver.quit()
в методе tearDown(){}
, чтобы изящно закрыть и уничтожить WebDriver и Веб-клиент экземпляров.