Убедитесь, что ChromeDriver закрывается при принудительном выходе - PullRequest
0 голосов
/ 29 июня 2018

При запуске chromeDriver я использую оператор try / catch / finally , чтобы гарантировать, что в случае каких-либо исключений мой WebDriver закроется правильно. Это прекрасно работает, если выдается исключение; в случае, если пользователь принудительно покидает мое приложение, экземпляр браузера не закрывается. Это может привести к созданию нежелательных потоков Google Chrome, работающих в фоновом режиме.

Как я могу гарантировать, что браузер закроется, когда пользователь принудительно закроет мое приложение?

Вот пример кода:

public class WebDriverTest {

    WebDriver driver;
    WebDriverWait wait;

    public WebDriverTest() {
        System.setProperty("webdriver.chrome.driver", "res/chromedriver");
        driver = new ChromeDriver();
        this.wait = new WebDriverWait(driver, 1);
    }

    public static void main(String[] args) {
        WebDriverTest main = new WebDriverTest();
        main.test();
    }

    private void test() {
        try {
            driver.get("https://www.google.com");
            WebElement element = driver.findElement(By.name("q"));
            element.sendKeys("test");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //If force quit the browser is never closed
            driver.quit();
        }
    }

}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Чтобы гарантировать, что методы принудительного завершения работы драйвера будут вызываться при принудительном завершении работы, вы можете использовать ловушку завершения работы приложения. Он может быть зарегистрирован в методе инициализации драйвера и будет вызываться в любой ситуации Ctrl-C / другое принудительное завершение. Рассмотрим следующий фрагмент.

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
  driver.close();
  driver.quit();
}));
0 голосов
/ 29 июня 2018

Ну, вы, кажется, делаете правильную работу, помещая выход в блок finnaly.

Как насчет того, чтобы выполнить это в конце теста?

Runtime.getRuntime().exec("taskkill /F /IM <processname>.exe")

Так что вы можете убить chromedriver.exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...