3

I'm using the code below to start chrome using webdriver (selenium 2)

            Map<String, String> mobileEmulation = new HashMap<String, String>();
            mobileEmulation.put("deviceName", "BlackBerry PlayBook");

            Map<String, Object> chromeOptions = new HashMap<String, Object>();
            chromeOptions.put("mobileEmulation", mobileEmulation);
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
            driver = new ChromeDriver(capabilities);

How can I also load a Chrome extension while also keeping the options above?

Arya
  • 8,473
  • 27
  • 105
  • 175
  • I'm also looking for a way to do this. But every example I have found just has loading one extension, and nothing else. How can someone load an extension AND set any other value, switch, or emulation mode? – MivaScott Mar 17 '17 at 15:43

1 Answers1

0

Finally figured it out!

Per the ChromeDriver capabilites page, you need to convert the .crx file into a base-64 encoded string. So the final answer will look something like this:

ArrayList<String> ext = new ArrayList<>();
extensionLocation = extensionDir + sep + extensionName + ".crx";
extension = new File(extensionLocation);
if (extension.exists() && !extension.isDirectory()) {
    ext.add(Data.base64Encoder(extensionLocation));
}
chromeOptions.put("extensions", ext);

Where Data.base64encoder() is my custom method for encoding. There are plenty of examples of how to do that based on the version of Java you're running. Basically send it the location, have it read in the binary, and return a string.

MivaScott
  • 1,763
  • 1
  • 12
  • 30