8

I just discovered selenium - a great tool!
I plan to run/use selenium-ide generated junit4 code. But I need it to run with many browsers/web drivers. Is there a junit/java-pattern for this use case? My first idea was to use @RunWith(Parameterized.class) and provide a List of WebDrivers (the parameter for the class - probably provided as an external file listing browsers and versions?!). Is this a good idea? Is it possible to provide a central @Parameters -method to be used by all my Selenium-tests?

What alternatives are there?

Probably it is possible to change the "Format" that Selenium exports to minimize manual changes?

3 Answers 3

5

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(); //... } 
Sign up to request clarification or add additional context in comments.

Comments

1

Use Selenium RC/Selenium Server. These come with the API's you will need to run remote tests in multiple browsers simply. Happy Hunting!

1 Comment

i just read the docu (code.google.com/p/selenium/wiki/Grid2) it seems that the problem remains. with selenium server i also have to instantiate "webdriver" with "capabilities" (a specific browser). at the moment using rc server only implies configuration overhead.
-1

Check out the Selenide library. It's an open source wrapper for selenium that makes UI testing a breeze. Here's an example test.

@Test public void userCanLoginByUsername() { open("/login"); $(By.name("user.name")).setValue("johny"); $("#submit").click(); $(".loading_progress").should(disappear); // Waits until element disappears $("#username").shouldHave(text("Hello, Johny!")); // Waits until element gets text } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.