Following on my recent discovery of Selenium Manager, I checked out another project by Boni Garcia called Selenium-Jupiter.
It uses some advanced features of JUnit 5 (aka Junit-Jupiter) to make tests easier to write with less boilerplate code, part of that is using WebDriverManager to automatically instantiate WebDriver instances without downloading chromedriver, putting it in the path, setting webdriver.chrome.driver
path in properties or as an environment variable, etc.
It starts with an JUnit 5 Extension — similar to JUnit 4 Runners – but you can have more than one extension.
@ExtendWith(SeleniumJupiter.class)
class MyTest { ... }
Then you can pass a WebDriver instance as a parameter to your test method (without having to create the instance — the Extension takes care of that for you.
@Test
void testWithChrome(ChromeDriver driver) { ... }
Or you can specify a different driver, for example FireFoxDriver, EdgeDriver, SafariDriver, etc.
@Test
void testWithFirefox(FirefoxDriver driver) { ... }
You can also specify whether to conditionally run a test with a specified driver, if docker containers are available, or if a site is up, and many other options available for WebDriverManager.
For instance, run this test only if you’re on a mac
@EnabledIfBrowserAvailable(SAFARI)
@ExtendWith(SeleniumJupiter.class)
class SafariTest {
@Test
void testWithSafari(SafariDriver driver) { ... }
}
Or run this test only if your Selenium server is up:
@EnabledIfDriverUrlOnline("http://localhost:4444/")
@ExtendWith(SeleniumJupiter.class)
class RemoteWebDriverTest {
@Test
void testRemote(@DriverUrl("http://localhost:4444/") { ... }
}
Or if Appium is running:
@EnabledIfDriverUrlOnline("http://localhost:4723/")
@ExtendWith(SeleniumJupiter.class)
class AppiumTest {
@Test
void testMobile(AppiumDriver driver) { ... }
}