How do I return an enum as a string for my WebDriverManager in Java?

Viewed 319

How do I create an enum as a String and call it for my WebDriverManager?

Resource I'm following: http://tutorials.jenkov.com/java/enums.html#enum-example

I want to clean up my webdrivermanager and make it cleaner and flexible by providing enums. Here is my attempt as I'd like every browser type to be returned as a String.

Enums:

public enum BrowserEnv {

    CHROME("chrome"),
    FIREFOX("firefox"),
    IE("internet explorer"),
    SAFARI("safari");

    private String browser;

    BrowserEnv(String browserName){
        browserName = browserName.CHROME;
        
    }

My webdrivermanager code:
I want to call on BrowserEnv but not sure how to get it to work.

public WebDriver initializeDriver() {

    if (BrowserEnv.CHROME)) { // I want to be able to change these on the fly
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
    } else if (BrowserEnv.CHROME)) { // Want to be able to change this anytime
        WebDriverManager.firefoxdriver().setup();
        driver = new FirefoxDriver();
    }
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    return driver;
}

[UPDATE] - Code below is what I'm trying to work out based on comments and continuous solutions until I get it to work.

Moved driver decisions to enums. used if statements to launch another browser in case chrome in this example should fail. Currently, getDriver is asking for WebDriverManager to return as an object.

public enum BrowserEnv {

    CHROME("chrome"),
    FIREFOX("firefox");

    private String browser;

    BrowserEnv(String browserName) {
        this.browser = browserName;
    }

    public WebDriverManager getWebDriverManager() {
        if (this == BrowserEnv.CHROME) {
            return WebDriverManager.chromedriver();
        } else if (this == BrowserEnv.FIREFOX) {
            return WebDriverManager.firefoxdriver();
        }

    public WebDriver getDriver() {
            if (this == BrowserEnv.CHROME) {
                return new ChromeDriver();
            } else if (this == BrowserEnv.FIREFOX) {
                return new FirefoxDriver();
            }
        }
    }

Initializing browser a Base class

public WebDriver initializeDriver(BrowserEnv browser) {
    setUrl();

    browser.getWebDriverManager().setup();
    driver = browser.getDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    return driver;
}
1 Answers

Move all driver related decision making to your enum.

public enum BrowserEnv {

    CHROME("chrome"), FIREFOX("firefox"), IE("internet explorer"), SAFARI("safari");

    private String browser;

    BrowserEnv(String browserName){
        this.browser = browserName;        
    }
    
    public WebdriverManager getWebDriverManager() {
        switch(this) {
            case CHROME:
                return WebdriverManager.chromedriver();
                break;
            case FIREFOX:
                return WebdriverManager.firefoxdriver();
                break;
            case IE:
                return WebdriverManager.iedriver();
                break;
            case SAFARI:
                return WebdriverManager.safaridriver();
                break;
            default:
                break;
            
        }
    }
    
    public WebDriver getDriver() {
        switch(this) {
            case CHROME:
                return new ChromeDriver();
                break;
            case FIREFOX:
                return new FirefoxDriver();
                break;
            case IE:
                return new InternetExplorerDriver();
                break;
            case SAFARI:
                return new SafariDriver();
                break;
            default:
                break;
            
        }
    }
}

Then you can initialize and drive the browser type externally.

public WebDriver initializeDriver(BrowserEnv browser) {
    browser.getWebDriverManager().setup();
    driver = browser.getDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    return driver;
}
Related