Well, I do need to switch drivers from time to time, so I did this:
I initialize selenium related stuff in my own Class - called by name of the application and the driver is approached by the getters. When calling my class constructor, I use enum type of driver to initialize with:
private WebDriver driver; public TestUI(Environment.DriverToUse drv){ switch (drv){ case CHROME:{ ChromeDriverService service = ChromeDriverService.createDefaultService(); File file = new File(TestUI.class.getResource("/chromedriver.exe").toURI()); System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, file.getAbsolutePath()); ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized"); driver = new ChromeDriver(service,options); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); break; } case FIREFOX:{ FirefoxProfile ffProfile = new FirefoxProfile(); ffProfile.setPreference("browser.safebrowsing.malware.enabled", false); driver = new FirefoxDriver(ffProfile); driver.manage().window().setPosition(new Point(0, 0)); java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); driver.manage().window().setSize(dim); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); break; } public WebDriver getDriver(){ return driver; }
of course my Environment class looks like this
public class Environment { public enum DriverToUse {FIREFOX, CHROME}; // .. and some other stuff, because I need to test on different environments, so I store here Environment URL for example
And my test class looks something like this
@Before public static final Environment.DriverToUse USED_DRIVER = Environment.DriverToUse.FIREFOX; @Test public void testVersionNumber() throws Exception{ TestUI testUI= new TestUI(USED_DRIVER); WebElement version = testUI.getDriver().findElement(By.id("the Id of element")); version.click(); //... }