Setup proxy in Firefox browser via marionette driver
The old tricks with firefoxProfile or Proxy class do not work any more. All you have to do is pass through requiredCapabilities a JSON with the new Marionette proxy format:
[{proxy={"proxyType":"MANUAL","httpProxy":"host.proxy","httpProxyPort":80,"sslProxy":"host.proxy","sslProxyPort":80}}]
No more "proxyHost:proxyPort" format, but httpProxy=host, httpProxyPort=port.
JsonObject json = new JsonObject();json.addProperty("proxyType", "MANUAL");json.addProperty("httpProxy", aHost);json.addProperty("httpProxyPort", aPort);json.addProperty("sslProxy", aHost);json.addProperty("sslProxyPort", aPort);required.setCapability("proxy", json);driver = new FirefoxDriver(service, cap, required);
Here is all the code:
import java.io.File;
import java.io.IOException;
import org.apache.commons.lang.SystemUtils;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxBinary;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.firefox.GeckoDriverService;import org.openqa.selenium.remote.DesiredCapabilities;import com.google.common.collect.ImmutableMap;import com.google.gson.JsonObject;public class TestProxy{ public static void main(String[] args) { if (args.length == 0) { System.out.println("usage: IP port"); System.exit(-1); } String proxyServer = args[0]; int proxyPort = Integer.parseInt(args[1]); try { TestProxy test = new TestProxy(); test.TestDriver(proxyServer, proxyPort); } catch (IOException e) { e.printStackTrace(); } } private void TestDriver(String aHost, int aPort) throws IOException { WebDriver driver = null; GeckoDriverService service = null; if (SystemUtils.IS_OS_LINUX) { FirefoxBinary firefoxBinary = new FirefoxBinary(new File("/home/ubuntu/firefox/firefox")); service = new GeckoDriverService.Builder(firefoxBinary) .usingDriverExecutable(new File("/usr/bin/geckodriver")) .usingAnyFreePort() .usingAnyFreePort() .withEnvironment(ImmutableMap.of("DISPLAY",":20")) .build(); service.start(); } else if (SystemUtils.IS_OS_WINDOWS) { FirefoxBinary firefoxBinary = new FirefoxBinary(new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe")); service = new GeckoDriverService.Builder(firefoxBinary) .usingDriverExecutable(new File("C:\\Windows\\geckodriver.exe")) .usingAnyFreePort() .usingAnyFreePort() .build(); service.start(); } else { System.out.println("Unknown operation system"); System.exit(-1); } DesiredCapabilities cap = DesiredCapabilities.firefox(); DesiredCapabilities required = new DesiredCapabilities(); JsonObject json = new JsonObject(); json.addProperty("proxyType", "MANUAL"); json.addProperty("httpProxy", aHost); json.addProperty("httpProxyPort", aPort); json.addProperty("sslProxy", aHost); json.addProperty("sslProxyPort", aPort); required.setCapability("proxy", json); driver = new FirefoxDriver(service, cap, required); driver.navigate().to("https://api.ipify.org/?format=text"); System.out.println(driver.getPageSource()); driver.quit(); }}
https://github.com/SeleniumHQ/selenium/issues/2963
https://github.com/mozilla/geckodriver/issues/97#issuecomment-255386464