Files
JIMRI/java/test/jmri/util/web/BrowserFactory.java
T
2026-06-17 14:00:51 +02:00

92 lines
3.6 KiB
Java

package jmri.util.web;
import java.util.Map;
import java.util.HashMap;
import org.openqa.selenium.firefox.FirefoxDriverLogLevel;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
/**
* Provide browsers for use in web tests. Adapted from: http://toolsqa.com/selenium-webdriver/factory-design-principle-in-frameworks/
*
* @author Paul Bender Copyright 2018
*/
public class BrowserFactory {
private static final Map<String, EventFiringWebDriver> drivers = new HashMap<>();
/**
* Factory method for getting browsers
*
* @param browserName name of the web browser to open.
* @return the web driver for that browser.
*/
public static EventFiringWebDriver getBrowser(String browserName) {
EventFiringWebDriver driver = null;
switch (browserName) {
case "Firefox":
driver = drivers.get("Firefox");
if (driver == null) {
WebDriverManager.getInstance(FirefoxDriver.class).setup();
FirefoxBinary firefoxBinary = new FirefoxBinary();
firefoxBinary.addCommandLineOptions("--headless");
FirefoxOptions firefoxOptions = new FirefoxOptions()
.setBinary(firefoxBinary)
.setLogLevel(FirefoxDriverLogLevel.FATAL);
// the following causes javascript console messages to be output to standard out.
//firefoxOptions.addPreference("devtools.console.stdout.content", true);
driver = new EventFiringWebDriver(new FirefoxDriver(firefoxOptions));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
drivers.put("Firefox", driver);
}
break;
case "Chrome":
driver = drivers.get("Chrome");
if (driver == null) {
WebDriverManager.getInstance(ChromeDriver.class).setup();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless", "--log-level=3", "--disable-extensions");
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.SEVERE);
chromeOptions.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
driver = new EventFiringWebDriver(new ChromeDriver(chromeOptions));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
drivers.put("Chrome", driver);
}
break;
default:
jmri.util.LoggingUtil.warnOnce(log, "Unexpected browserName = {}", browserName);
break;
}
return driver;
}
/**
* close all currently open web browsers.
*/
public static void closeAllDrivers() {
drivers.forEach((name, o) -> o.close());
}
// initialize logging
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BrowserFactory.class);
}