Я провожу тесты Selenium JAVA для мобильных устройств, используя драйвер Chrome с его эмулятором. Проблема в том, что я не могу использовать самые продвинутые мобильные устройства, такие как iPhone 7,8 и т. д., Хотя они есть в моем раскрывающемся списке при ручном тестировании в инструментах разработки. Это драйвер init. который отлично работает со многими мобильными устройствами:
if (browser.equalsIgnoreCase("mobileIPhone6")){
Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "iPhone 6");
String exePathChromeDriver = Consts.chromeDriverPath;
System.setProperty("webdriver.chrome.driver", exePathChromeDriver);
PropertyLoader.loadCapabilities();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
driver = new ChromeDriver(chromeOptions);
НО, когда я меняю строку 3 на «iPhone 7», я получаю эту ошибку:
2018-03-16 21:25:49 INFO LogLog4j:210 - org.openqa.selenium.WebDriverException: unknown error: cannot parse capability: chromeOptions
from unknown error: cannot parse mobileEmulation
from unknown error: 'iPhone 7' must be a valid device
from unknown error: must be a valid device
Есть идеи, почему? огромное спасибо
Спасибо! Я уже перешел ко второй ссылке, которую вы предоставили, и вижу, что там __ "title": "iPhone 6/7/8", а также для iPhone X ...
Да, я тоже это видел, не знаю, в чем дело. Образ для iPhone 6/7/8 Plus имеет iPhone6Plus-landscape.svg в качестве образа, так что, может быть, он там просто заполнитель?
Спасибо! это многое объясняет. Но все же я в замешательстве. Раньше я переходил ко второй ссылке, которую вы предоставили, и видел, что там есть «title»: «iPhone 6/7/8», а также для iPhone X и других ... так что это значит? здесь перечислены все устройства. даже новые
ммм ... может быть причиной заполнитель. хорошо спасибо еще раз!
Подождите, я не думаю, что то, что вы написали о первой ссылке, является правильным, потому что я МОГУ использовать «Galaxy S5», которого нет в этом списке.
Да, я не совсем уверен. Я не могу найти документацию по этому поводу, так что в большинстве своем это просто предположения.




Почему бы не использовать класс Измерение?
Определите перечисление EmulatedDevices и используйте следующий стиль:
driver.manage().window().setSize(new Dimension(EmulatedDevices.IPHONE7.getWidth(),EmulatedDevices.IPHONE7.getHeight()));
Как это поможет? это только из-за размера экрана? (Я имею в виду, это единственное изменение конфигурации, которое дает нам эмулятор, размер экрана?)
Я нашел решение, и теперь оно работает правильно. Сначала мне нужно было установить объект Device Metrics:
...else if (browser.equalsIgnoreCase("iPhone678")){
String exePathChromeDriver = Consts.chromeDriverPath;
System.setProperty("webdriver.chrome.driver", exePathChromeDriver);
Map<String, Object> deviceMetrics = new HashMap<>();
deviceMetrics.put("width", 375);
deviceMetrics.put("height", 667);
deviceMetrics.put("pixelRatio", 2.0);
Map<String, Object> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceMetrics", deviceMetrics);
mobileEmulation.put("userAgent", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
driver = new ChromeDriver(chromeOptions); }
Это должно работать:
Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "iPhone 6");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.co.uk");
Я думаю, проблема в том, что chromedriver не поддерживает iPhone 7. Список эмулируемых устройств можно найти в здесь, а в здесь - имена предустановок устройств.