package org.richfaces.arquillian.browser; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; import org.openqa.selenium.remote.BrowserType; import org.openqa.selenium.remote.RemoteWebDriver; import com.opera.core.systems.OperaDriver; public enum Browser { FIREFOX(FirefoxDriver.class, BrowserType.FIREFOX), INTERNET_EXPLORER(InternetExplorerDriver.class), CHROME(ChromeDriver.class, BrowserType.CHROME), OPERA(OperaDriver.class), HTML_UNIT(HtmlUnitDriver.class), PHANTOMJS(PhantomJSDriver.class, BrowserType.PHANTOMJS); private final Class<?> clazz; private final Set<String> browserNames; private Browser(Class<?> clazz, String... browserNames) { this.clazz = clazz; this.browserNames = new HashSet<String>(Arrays.asList(browserNames)); } public static Browser getCurrentType(WebDriver wd) { for (Browser type : values()) { if (type.clazz.isInstance(wd)) { return type; } if (wd instanceof RemoteWebDriver) { String browserName = ((RemoteWebDriver) wd).getCapabilities().getBrowserName(); if (type.browserNames.contains(browserName)) { return type; } } } throw new IllegalArgumentException("Unknown Driver"); } public boolean is(WebDriver wd) { Browser type = getCurrentType(wd); return type == this; } }