如何在使用移动仿真 (Java) 的同时向 ChromeDriver 添加参数?

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

我在 JUnit/Selenium 测试中使用 ChromeDriver。我对桌面和移动设备都有测试。

对于我的 desktop 测试,我指定了几个 Arguments 以确保测试结果一致,因此:

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);

对于我目前使用的移动测试:

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);

我看不到为我的移动测试包含 参数(例如 "disable-extensions")的方法。

有什么方法可以重构移动方法以允许指定参数?

编辑:更清楚一点 - 我想做如下的事情:

        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);

但是功能会相互覆盖。

也许你可以这样做:

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

这是一个类似的答案how to disable chrome extension in selenium

找到解决方案=)

(感谢 chromedriver-users google 组):

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);

对 ChromeOptions 使用 setExperimentalOption() 方法

ChromeOptions 提供了一种方法setExperimentalOption(String name, Object value)。这允许您设置许多选项,包括您设置的 mobileEmulation 参数。

把你的代码放在一起,你可以使用这个:

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);