How do I add arguments to ChromeDriver while also using mobile emulation (Java)?

折月煮酒 提交于 2019-12-11 04:07:31

问题


I'm using ChromeDriver with my JUnit/Selenium tests. I have tests for both desktop and mobile.

For my desktop tests I specify several Arguments to ensure test results are consistent, as so:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions desktopOptions = new ChromeOptions();

desktopOptions.addArguments("start-maximized", "disable-extensions",
    "test-type", "no-default-browser-check", "ignore-certificate-errors");

capabilities.setCapability(ChromeOptions.CAPABILITY, desktopOptions);
driver = new RemoteWebDriver(service.getUrl(), capabilities);

For my mobile tests I currently use:

Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Apple iPhone 6");

Map<String, Object> mobileOptions = new HashMap<String, Object>();
mobileOptions.put("mobileEmulation", mobileEmulation);

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, mobileOptions);
driver = new RemoteWebDriver(service.getUrl(), capabilities);

I can't see a way of including the Arguments (such as "disable-extensions") for my mobile tests.

Is there any way I can refactor the mobile method to allow for arguments to be specified?

EDIT: To be a little clearer - I'd like to do something like the below:

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

        Map<String, Object> mobileOptions = new HashMap<String, Object>();
        mobileOptions.put("mobileEmulation", mobileEmulation);

        ChromeOptions chromeArgs = new ChromeOptions();
        chromeArgs.addArguments("disable-extensions",
                "test-type", "no-default-browser-check", "ignore-certificate-errors");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, mobileOptions);
        capabilities.setCapability(ChromeOptions.CAPABILITY, chromeArgs);
        driver = new RemoteWebDriver(service.getUrl(), capabilities);

But the capabilities overwrite each other.


回答1:


Got a solution =)

(thanks to chromedriver-users google group):

DesiredCapabilities capabilities = DesiredCapabilities.chrome();

Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Apple iPhone 6");
Map<String, Object> mobileOptions = new HashMap<String, Object>();
mobileOptions.put("mobileEmulation", mobileEmulation);

mobileOptions.put("args", Arrays.asList("disable-extensions",
"test-type", "no-default-browser-check", "ignore-certificate-errors"));

capabilities.setCapability(ChromeOptions.CAPABILITY, mobileOptions);
driver = new RemoteWebDriver(service.getUrl(), capabilities);



回答2:


Use the setExperimentalOption() method for ChromeOptions

ChromeOptions provides an method setExperimentalOption(String name, Object value). This allows you to set a number of options, including the mobileEmulation parameters you have set.

Putting your code together, you can use this:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions chromeOptions= new ChromeOptions();

chromeOptions.addArguments("start-maximized", "disable-extensions",
"test-type", "no-default-browser-check", "ignore-certificate-errors");

Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Apple iPhone 6");
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);

capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
driver = new RemoteWebDriver(service.getUrl(), capabilities);



回答3:


May be you can do it so:

capabilities.setCapability("chrome.switches", Arrays.asList("--disable-extensions"));

Here was a similar answer how to disable chrome extension in selenium



来源:https://stackoverflow.com/questions/38612157/how-do-i-add-arguments-to-chromedriver-while-also-using-mobile-emulation-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!