如何在使用移动仿真 (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);
我在 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);