Search code examples
javaseleniumselenium-webdriverhtmlunithtmlunit-driver

HtmlUnitDriver browser emulate mode


I have created a simple factory method that creates a HtmlUnitDriver in a specified mode. For example

public static HtmlUnitDriver createHtmlUnitDriver(String browserMode) {
    switch(browserMode.toLowerCase()) {
        case "chrome":
            return new HtmlUnitDriver(DesiredCapabilities.chrome());
        case "firefox":
            return new HtmlUnitDriver(DesiredCapabilities.firefox());
        case "ie":
        case "internet explorer":
            return new HtmlUnitDriver(DesiredCapabilities.internetExplorer());
        case default:
            return new HtmlUnitDriver(true);
    }
}

I'd like to write a quick unit test of this method, but I can't see how to tell which "mode" the returned HtmlUnitDriver is in. How would I do this?


Solution

  • Using reflection, you can get the private field webClient

    @Test
    public void test() throws Exception {
        WebDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME);
        WebClient webClient = (WebClient) get(driver, "webClient");
        System.out.println(webClient.getBrowserVersion());
        System.out.println(webClient.getBrowserVersion().isIE());
        driver.close();
    }
    
    private static Object get(Object object, String field) throws Exception {
        Field f = object.getClass().getDeclaredField(field);
        f.setAccessible(true);
        return f.get(object);
    }