2

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;
}
foragerEngineer
  • 149
  • 1
  • 2
  • 13
  • @hev1 Thank you for the reply, it seems that is not working for me. It I get the following message: `It is illegal to access static member 'CHROME' from enum constructor or instance initializer`. – foragerEngineer Jul 08 '20 at 03:02
  • may be it should be `browser = browserName` – deadshot Jul 08 '20 at 03:05
  • @deadshot That didn't seem to work either. I have updated my questions and examples above as there was unecessary info and I just wanted to cut straight to the chase. – foragerEngineer Jul 08 '20 at 03:12
  • I will leave examples updated example of how I'm working through this based on comments so its easier for everyone to follow what I'm doing wrong. – foragerEngineer Jul 08 '20 at 03:13
  • 1
    @Beginner_SQA this will help https://stackoverflow.com/a/2965252/9050514 – deadshot Jul 08 '20 at 03:34
  • I'm calling this answered as this was about the enums. I'll make a post about the new issue I'm having based on my [UPDATE] section. Thank you everyone. – foragerEngineer Jul 08 '20 at 13:29

1 Answers1

1

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;
}
Zeeshan S.
  • 2,041
  • 2
  • 21
  • 40