// Path: cubano-webdriver/src/main/java/org/concordion/cubano/driver/web/config/WebDriverConfig.java
// public final class WebDriverConfig {
// 
//     private final PropertyLoader propertyLoader;
// 
//     // Browser
//     private String browserProvider;
//     private String browserDimension;
//     private String browserPosition;
//     private boolean browserMaximized;
//     private boolean eventLoggingEnabled;
//     private boolean cleanupDriver;
//     
//     private String remoteUserName;
//     private String remoteApiKey;
// 
//     private int restartBrowserAfterXTests;
// 
//     private static class WDCHolder {
//         static final WebDriverConfig INSTANCE = new WebDriverConfig();
//     }
// 
//     /**
//      * @return singleton instance
//      */
//     public static WebDriverConfig getInstance() {
//         return WDCHolder.INSTANCE;
//     }
// 
//     /**
//      * Uses the default Config class's property loader to import the config and user properties files.
//      */
//     protected WebDriverConfig() {
//         propertyLoader = Config.getInstance().getPropertyLoader();
//         loadProperties();
//     }
// 
//     /**
//      * Uses the supplied PropertiesLoader to import the config and user properties files.
//      *
//      * @param propertiesLoader Configuration loader
//      */
//     protected WebDriverConfig(PropertiesLoader propertiesLoader) {
//         this(propertiesLoader.getProperties());
//     }
// 
//     /**
//      * Allow injection of properties for testing purposes.
//      *
//      * @param properties Default properties
//      */
//     protected WebDriverConfig(Properties properties) {
//         propertyLoader = new DefaultPropertyLoader(properties);
//         loadProperties();
//     }
// 
//     /**
//      * @return a loader for loading properties across config.properties and user.properties, taking environment into account.
//      */
//     public PropertyLoader getPropertyLoader() {
//         return propertyLoader;
//     }
// 
//     private void loadProperties() {
//         // Browser
//         browserProvider = System.getProperty("browserProvider");
//         if (browserProvider == null) {
//             browserProvider = propertyLoader.getProperty("webdriver.browserProvider", "FirefoxBrowserProvider");
//         }
// 
//         if (!browserProvider.contains(".")) {
//             browserProvider = "org.concordion.cubano.driver.web.provider." + browserProvider;
//         }
// 
//         browserDimension = propertyLoader.getProperty("webdriver.browser.dimension", null);
//         browserPosition = propertyLoader.getProperty("webdriver.browser.position", null);
//         browserMaximized = propertyLoader.getPropertyAsBoolean("webdriver.browser.maximized", "false");
//         eventLoggingEnabled = propertyLoader.getPropertyAsBoolean("webdriver.event.logging", "true");
//         cleanupDriver = propertyLoader.getPropertyAsBoolean("webdriver.browserdriver.cleanup", "false");
//                 
//         remoteUserName = propertyLoader.getProperty("remotewebdriver.userName", null);
//         remoteApiKey = propertyLoader.getProperty("remotewebdriver.apiKey", null);
// 
//         // Yandex HtmlElements automatically implement 5 second implicit wait, default to zero so as not to interfere with
//         // explicit waits
//         System.setProperty("webdriver.timeouts.implicitlywait", propertyLoader.getProperty("webdriver.timeouts.implicitlywait", "0"));
// 
//         restartBrowserAfterXTests = propertyLoader.getPropertyAsInteger("webdriver.browser.restartAfterXTests", "0");
//     }
// 
//     public String getBrowserProvider() {
//         return browserProvider;
//     }
// 
//     /**
//      * Position to locate browser window.
//      *
//      * @return Size in WxH format
//      */
//     public String getBrowserPosition() {
//         return browserPosition;
//     }
// 
//     /**
//      * Size to set browser window.
//      *
//      * @return Size in WxH format
//      */
//     public String getBrowserDimension() {
//         return browserDimension;
//     }
// 
//     /**
//      * Number of tests to run before restarting browser to clear memory.
//      * 
//      * @return 0 for never, otherwise limit
//      */
//     public int getRestartBrowserAfterXTests() {
//         return restartBrowserAfterXTests;
//     }
// 
//     /**
//      * Browser should be maximized or not.
//      * 
//      * @return is Browser Maximized
//      */
//     public boolean isBrowserMaximized() {
//         return browserMaximized;
//     }
// 
//     /**
//      * Selenium WebDriver logging should be enabled.
//      *
//      * @return is Event Logging Enabled
//      */
//     public boolean isEventLoggingEnabled() {
//         return eventLoggingEnabled;
//     }
//     
//     /**
//      * Terminate browser driver.
//      * 
//      * @return is cleanup enabled
//      */
//     public boolean isCleanupDriver() {
//         return cleanupDriver;
//     }
//     
//     /**
//      * Username for remote selenium grid service.
//      *
//      * @return Username
//      */
//     public String getRemoteUserName() {
//         return remoteUserName;
//     }
// 
//     /**
//      * Api Key to access a remote selenium grid service.
//      *
//      * @return Api Key
//      */
//     public String getRemoteApiKey() {
//         return remoteApiKey;
//     }
// }


import org.concordion.cubano.driver.web.config.WebDriverConfig;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
                iPhone6();
                break;

            case "iPhone6PlusEmulator":
                iPhone6PlusEmulator();
                break;

            case "samsungGalaxyS5":
                samsungGalaxyS5();
                break;

            case "samsungGalaxyS4Emulator":
                samsungGalaxyS4Emulator();
                break;

            case "googleNexus7CEmulator":
                googleNexus7CEmulator();
                break;


            default:
                break;
        }

        throw new RuntimeException("Browser '" + browser + "' is not currently supported");
    }

    @Override
    protected String getRemoteDriverUrl() {
        return REMOTE_URL.replace("[USER_NAME]",
// Path: cubano-webdriver/src/main/java/org/concordion/cubano/driver/web/config/WebDriverConfig.java
// public final class WebDriverConfig {
// 
//     private final PropertyLoader propertyLoader;
// 
//     // Browser
//     private String browserProvider;
//     private String browserDimension;
//     private String browserPosition;
//     private boolean browserMaximized;
//     private boolean eventLoggingEnabled;
//     private boolean cleanupDriver;
//     
//     private String remoteUserName;
//     private String remoteApiKey;
// 
//     private int restartBrowserAfterXTests;
// 
//     private static class WDCHolder {
//         static final WebDriverConfig INSTANCE = new WebDriverConfig();
//     }
// 
//     /**
//      * @return singleton instance
//      */
//     public static WebDriverConfig getInstance() {
//         return WDCHolder.INSTANCE;
//     }
// 
//     /**
//      * Uses the default Config class's property loader to import the config and user properties files.
//      */
//     protected WebDriverConfig() {
//         propertyLoader = Config.getInstance().getPropertyLoader();
//         loadProperties();
//     }
// 
//     /**
//      * Uses the supplied PropertiesLoader to import the config and user properties files.
//      *
//      * @param propertiesLoader Configuration loader
//      */
//     protected WebDriverConfig(PropertiesLoader propertiesLoader) {
//         this(propertiesLoader.getProperties());
//     }
// 
//     /**
//      * Allow injection of properties for testing purposes.
//      *
//      * @param properties Default properties
//      */
//     protected WebDriverConfig(Properties properties) {
//         propertyLoader = new DefaultPropertyLoader(properties);
//         loadProperties();
//     }
// 
//     /**
//      * @return a loader for loading properties across config.properties and user.properties, taking environment into account.
//      */
//     public PropertyLoader getPropertyLoader() {
//         return propertyLoader;
//     }
// 
//     private void loadProperties() {
//         // Browser
//         browserProvider = System.getProperty("browserProvider");
//         if (browserProvider == null) {
//             browserProvider = propertyLoader.getProperty("webdriver.browserProvider", "FirefoxBrowserProvider");
//         }
// 
//         if (!browserProvider.contains(".")) {
//             browserProvider = "org.concordion.cubano.driver.web.provider." + browserProvider;
//         }
// 
//         browserDimension = propertyLoader.getProperty("webdriver.browser.dimension", null);
//         browserPosition = propertyLoader.getProperty("webdriver.browser.position", null);
//         browserMaximized = propertyLoader.getPropertyAsBoolean("webdriver.browser.maximized", "false");
//         eventLoggingEnabled = propertyLoader.getPropertyAsBoolean("webdriver.event.logging", "true");
//         cleanupDriver = propertyLoader.getPropertyAsBoolean("webdriver.browserdriver.cleanup", "false");
//                 
//         remoteUserName = propertyLoader.getProperty("remotewebdriver.userName", null);
//         remoteApiKey = propertyLoader.getProperty("remotewebdriver.apiKey", null);
// 
//         // Yandex HtmlElements automatically implement 5 second implicit wait, default to zero so as not to interfere with
//         // explicit waits
//         System.setProperty("webdriver.timeouts.implicitlywait", propertyLoader.getProperty("webdriver.timeouts.implicitlywait", "0"));
// 
//         restartBrowserAfterXTests = propertyLoader.getPropertyAsInteger("webdriver.browser.restartAfterXTests", "0");
//     }
// 
//     public String getBrowserProvider() {
//         return browserProvider;
//     }
// 
//     /**
//      * Position to locate browser window.
//      *
//      * @return Size in WxH format
//      */
//     public String getBrowserPosition() {
//         return browserPosition;
//     }
// 
//     /**
//      * Size to set browser window.
//      *
//      * @return Size in WxH format
//      */
//     public String getBrowserDimension() {
//         return browserDimension;
//     }
// 
//     /**
//      * Number of tests to run before restarting browser to clear memory.
//      * 
//      * @return 0 for never, otherwise limit
//      */
//     public int getRestartBrowserAfterXTests() {
//         return restartBrowserAfterXTests;
//     }
// 
//     /**
//      * Browser should be maximized or not.
//      * 
//      * @return is Browser Maximized
//      */
//     public boolean isBrowserMaximized() {
//         return browserMaximized;
//     }
// 
//     /**
//      * Selenium WebDriver logging should be enabled.
//      *
//      * @return is Event Logging Enabled
//      */
//     public boolean isEventLoggingEnabled() {
//         return eventLoggingEnabled;
//     }
//     
//     /**
//      * Terminate browser driver.
//      * 
//      * @return is cleanup enabled
//      */
//     public boolean isCleanupDriver() {
//         return cleanupDriver;
//     }
//     
//     /**
//      * Username for remote selenium grid service.
//      *
//      * @return Username
//      */
//     public String getRemoteUserName() {
//         return remoteUserName;
//     }
// 
//     /**
//      * Api Key to access a remote selenium grid service.
//      *
//      * @return Api Key
//      */
//     public String getRemoteApiKey() {
//         return remoteApiKey;
//     }
// }


// Path: cubano-webdriver/src/main/java/org/concordion/cubano/driver/web/provider/SauceLabsBrowserProvider.java
import org.concordion.cubano.driver.web.config.WebDriverConfig;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

                iPhone6();
                break;

            case "iPhone6PlusEmulator":
                iPhone6PlusEmulator();
                break;

            case "samsungGalaxyS5":
                samsungGalaxyS5();
                break;

            case "samsungGalaxyS4Emulator":
                samsungGalaxyS4Emulator();
                break;

            case "googleNexus7CEmulator":
                googleNexus7CEmulator();
                break;


            default:
                break;
        }

        throw new RuntimeException("Browser '" + browser + "' is not currently supported");
    }

    @Override
    protected String getRemoteDriverUrl() {
        return REMOTE_URL.replace("[USER_NAME]",
                WebDriverConfig.getInstance().getRemoteUserName()).replace("[API_KEY]",