Мобильный эмулятор Chrome для тестирования Selenium - не может использовать все устройства

Я провожу тесты 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

Есть идеи, почему? огромное спасибо

Я думаю, проблема в том, что chromedriver не поддерживает iPhone 7. Список эмулируемых устройств можно найти в здесь, а в здесь - имена предустановок устройств.

Sean Breckenridge 16.03.2018 23:47

Спасибо! Я уже перешел ко второй ссылке, которую вы предоставили, и вижу, что там __ "title": "iPhone 6/7/8", а также для iPhone X ...

Yair 17.03.2018 01:04

Да, я тоже это видел, не знаю, в чем дело. Образ для iPhone 6/7/8 Plus имеет iPhone6Plus-landscape.svg в качестве образа, так что, может быть, он там просто заполнитель?

Sean Breckenridge 17.03.2018 01:07

Спасибо! это многое объясняет. Но все же я в замешательстве. Раньше я переходил ко второй ссылке, которую вы предоставили, и видел, что там есть «title»: «iPhone 6/7/8», а также для iPhone X и других ... так что это значит? здесь перечислены все устройства. даже новые

Yair 17.03.2018 01:10

ммм ... может быть причиной заполнитель. хорошо спасибо еще раз!

Yair 17.03.2018 01:11

Подождите, я не думаю, что то, что вы написали о первой ссылке, является правильным, потому что я МОГУ использовать «Galaxy S5», которого нет в этом списке.

Yair 17.03.2018 01:20

Да, я не совсем уверен. Я не могу найти документацию по этому поводу, так что в большинстве своем это просто предположения.

Sean Breckenridge 17.03.2018 01:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
1 765
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Почему бы не использовать класс Измерение?

Определите перечисление EmulatedDevices и используйте следующий стиль:

driver.manage().window().setSize(new Dimension(EmulatedDevices.IPHONE7.getWidth(),EmulatedDevices.IPHONE7.getHeight()));

Как это поможет? это только из-за размера экрана? (Я имею в виду, это единственное изменение конфигурации, которое дает нам эмулятор, размер экрана?)

Yair 24.03.2018 18:39
Ответ принят как подходящий

Я нашел решение, и теперь оно работает правильно. Сначала мне нужно было установить объект 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");

Другие вопросы по теме