В этой статье речь пойдет о том как правильно останавливать работу драйвера или, другими словами, как закрыть браузер.
Запускается Selenium driver автоматически во время инициализации, для запуска у него нет отдельного метода.
FirefoxDriver driver = new FirefoxDriver();
Если по какой-либо причине запуск браузера не произойдет, то возникнет исключение и вебдрайвер не создастся.
А вот остановка его работы в определенное время ложится на разработчика тестов. WebDriver содержит два метода – quit()
и close()
, которые можно использовать для остановки работы браузера.
- void close() — закрывает только одно текущее окно, и в случае, если это было последнее открытое окно — закрывает браузер.
- void quit() — закрывает все открытые окна, завершает работу браузера и сервисов, и освобождает все ресурсы.
Поэтому для корректного завершения работы драйвера после выполнения теста используйте метод quit()
.
driver.quit();
Если же вам нужно закрыть отдельное открытое окно, используйте метод close(). Обратите внимание, что метод close()
после закрытия одного из окон не передает управление в предыдущее открытое окно, Вы должны сделать это самостоятельно:
// переключаемся в новое окно driver.switchTo().window(newWindowHandler); // закрываем его driver.close(); // возвращаемся в предыдущее окно driver.switchTo().window(oldWindowHandler);
Если вы хотите просто уйти с текущей страницы, но не закрывать ее или браузер, можете просто использовать:
driver.get("");
Еще маленький нюанс с close() и quit() при работе с IE (с другими не проверял)
При выполнении close():
— НЕ стопается IEDriverServer.exe
— НЕ возвращаются прежние настройки прокси (если WebDriver стартовал с кастомными настройками)
К сожалению, выполнить сначала close(), потом quit() (если было открыто одно окно браузера) не удается. WebDriver на попытку quite() вываливает «session XXX does not exist». Как это красиво обойти — пока не известно
С другими браузерами тоже самое. Эти 2 метода принципиально разные, метод close() не завершает работу сервисов, он просто закрывает одну страницу (браузер уже закрывается сам собой, если страница последняя), поэтому так и происходит. Для корректного завершения работы всегда используйте quit(), он закроет все открытые окна сам. Если же необходимо использовать close() для закрытия одного окна, но оно может быть и единственным, то сделайте обвертку и проверяйте количество открытых окон:
а,если закрылся браузер — как проверить можно?
driver.getWindowHandles().size() — не работает — ошибку — или таймаут выдает