@Override public GeckoDriverService getDriverService() { return GeckoDriverService.createDefaultService(); } }
ImmutableMap<String, String> environment) { try { GeckoDriverService service = new GeckoDriverService(exe, port, args, environment); String firefoxLogFile = System.getProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE); if (firefoxLogFile != null) { // System property has higher precedence if ("/dev/stdout".equals(firefoxLogFile)) { service.sendOutputTo(System.out); } else if ("/dev/stderr".equals(firefoxLogFile)) { service.sendOutputTo(System.err); } else if ("/dev/null".equals(firefoxLogFile)) { service.sendOutputTo(ByteStreams.nullOutputStream()); } else { service.sendOutputTo(new FileOutputStream(firefoxLogFile)); service.sendOutputTo(new FileOutputStream(getLogFile())); } else { service.sendOutputTo(System.err);
@Override protected void waitUntilAvailable() throws MalformedURLException { PortProber.waitForPortUp(getUrl().getPort(), 20, SECONDS); }
@Override public void start() throws IOException { getThreadlocalGeckoService().start(); }
public static class CustomBuilder extends org.openqa.selenium.firefox.GeckoDriverService.Builder { @Override protected GeckoDriverService createDriverService(File exe, int port, ImmutableList<String> args, ImmutableMap<String, String> environment) { try { return new GeckoDriverService(exe, port, args, environment) { @Override protected void waitUntilAvailable() throws MalformedURLException { logger.info("Waiting until avaliable"); try { Thread.sleep(10000); } catch (InterruptedException e) { } super.waitUntilAvailable(); logger.info("Finished waiting until avaliable"); } }; } catch (IOException e) { throw new WebDriverException(e); } } }
@Override public boolean isRunning() { return getThreadlocalGeckoService().isRunning(); }
@Override public void stop() { getThreadlocalGeckoService().stop(); }
@Override public URL getUrl() { return getThreadlocalGeckoService().getUrl(); }
// determine free ports for Marionette and WebDriver final int marionettePort = PortProber.findFreePort(); final int webDriverPort = PortProber.findFreePort(); // override, as GeckoDriverService provides no direct way to set the Marionette port GeckoDriverService.Builder builder = new GeckoDriverService.Builder() { @Override protected ImmutableList<String> createArgs() { Builder<String> argsBuilder = ImmutableList.builder(); argsBuilder.addAll(super.createArgs()); argsBuilder.add(String.format("--marionette-port=%d", marionettePort)); return argsBuilder.build(); } }; builder.usingPort(webDriverPort); builder.usingDriverExecutable(pathToDriver); GeckoDriverService driverService = builder.build(); try { driverService.start(); } catch (IOException e) { throw new IllegalStateException("Could not start the GeckoDriverService", e); } try { // keep checking the WebDriver port via Socket until it's available; // as far as I could tell, there is nothing more "high level", e.g. REST API waitUntilReady(webDriverPort, TimeUnit.SECONDS.toMillis(30)); } catch (InterruptedException e) { // ignore } return new MarionetteDriver(driverService, capabilities);
@Override public boolean isAvailable() { try { GeckoDriverService.createDefaultService(); return true; } catch (IllegalStateException | WebDriverException e) { return false; } }