In Java, best way to check if Selenium WebDriver has quit

James Dunn picture James Dunn · Sep 4, 2013 · Viewed 29.1k times · Source

I need to check a collection of Page Objects to see, for each one, if quit() has been called on its WebDriver.

I've written the following method to check a WebDriver's state:

public static boolean hasQuit(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (SessionNotFoundException e) {
            return true;
        }
}

Here's the problem: I don't like having to throw and catch an exception to discover the truth of a boolean, but it seems I have no choice since the WebDriver API doesn't provide a method to check if the driver has quit.

So my question is, is there a better way to check if a WebDriver has quit?

I found a similar (and more general) question here, but the question did not have any code that had been tried, and the only answer was to always set the WebDriver to null after quiting (which I don't necessarily have control over).

Answer

Dingredient picture Dingredient · Sep 4, 2013

If quit() has been called, driver.toString() returns null:

>>> FirefoxDriver: firefox on XP (null))

Otherwise, it returns a hashcode of the object:

>>> FirefoxDriver: firefox on XP (9f897f52-3a13-40d4-800b-7dec26a0c84d)

so you could check for null when assigning a boolean:

boolean hasQuit = driver.toString().contains("(null)");