package net.thucydides.core.webdriver; import org.apache.commons.lang3.StringUtils; import org.openqa.selenium.WebDriver; import java.util.*; /** * One or more WebDriver drivers that are being used in a test. */ public class WebdriverInstances { private final Map<String, WebDriver> driverMap; private String currentDriver; public WebdriverInstances() { this.driverMap = new HashMap<String, WebDriver>(); } public WebDriver getCurrentDriver() { if (driverMap.containsKey(currentDriver)) { return driverMap.get(currentDriver); } else { return null; } } public String getCurrentDriverName() { return currentDriver; } public WebDriver closeCurrentDriver() { WebDriver closedDriver = null; if (getCurrentDriver() != null) { closedDriver = getCurrentDriver(); closeAndQuit(closedDriver); driverMap.remove(currentDriver); currentDriver = null; } return closedDriver; } private void closeAndQuit(WebDriver driver) { //close is not necessary when quitting driver.quit(); } public void resetCurrentDriver() { if (getCurrentDriver() != null) { WebDriver driver = getCurrentDriver(); if (WebDriverFacade.class.isAssignableFrom(driver.getClass())) { ((WebDriverFacade) driver).reset(); } } } public boolean driverIsRegisteredFor(String driverName) { return driverMap.containsKey(normalized(driverName)); } public WebDriver useDriver(final String driverName) { this.currentDriver = normalized(driverName); return driverMap.get(currentDriver); } public Set<WebDriver> closeAllDrivers() { Collection<WebDriver> openDrivers = driverMap.values(); Set<WebDriver> closedDrivers = new HashSet<WebDriver>(openDrivers); for(WebDriver driver : openDrivers) { closeAndQuit(driver); } driverMap.clear(); currentDriver = null; return closedDrivers; } public int getActiveWebdriverCount() { return driverMap.size(); } public final class InstanceRegistration { private final String driverName; public InstanceRegistration(final String driverName) { this.driverName = normalized(driverName); } public void forDriver(final WebDriver driver) { driverMap.put(normalized(driverName), driver); currentDriver = normalized(driverName); } } public InstanceRegistration registerDriverCalled(final String driverName) { return new InstanceRegistration(normalized(driverName)); } private String normalized(String name) { if (StringUtils.isEmpty(name)) { return WebDriverFactory.DEFAULT_DRIVER; } else { return name.toLowerCase(); } } }