ChromeDriver не может работать на Centos 7 без головы - PullRequest
0 голосов
/ 30 мая 2018

Попытка заставить Selenium Testing работать с Chrome Headless (в настоящее время мы используем удаленный веб-драйвер selenium, который работает нормально, но очень медленно).Для экземпляра ChromeDriver:,Журналы показывают:

Starting ChromeDriver (v2.9.248304) on port 1848
[0.705][INFO]: COMMAND InitSession {
   "capabilities": {
      "desiredCapabilities": {
         "browserName": "chrome",
         "goog:chromeOptions": {
            "args": [ "--headless", "--disable-gpu", "--window-size=1920x1080" ],
            "binary": "/usr/bin/google-chrome",
            "extensions": [  ],
            "prefs": {
               "credentials_enable_service": false,
               "password_manager_enabled": false
            }
         }
      },
      "firstMatch": [ {
         "browserName": "chrome",
         "goog:chromeOptions": {
            "args": [ "--headless", "--disable-gpu", "--window-size=1920x1080" ],
            "binary": "/usr/bin/google-chrome",
            "extensions": [  ],
            "prefs": {
               "credentials_enable_service": false,
               "password_manager_enabled": false
            }
         }
      } ]
   },
   "desiredCapabilities": {
      "browserName": "chrome",
      "goog:chromeOptions": {
         "args": [ "--headless", "--disable-gpu", "--window-size=1920x1080" ],
         "binary": "/usr/bin/google-chrome",
         "extensions": [  ],
         "prefs": {
            "credentials_enable_service": false,
            "password_manager_enabled": false
         }
      }
   }
}
[0.708][INFO]: Populating Preferences file: {
   "alternate_error_pages": {
      "enabled": false
   },
   "autofill": {
      "enabled": false
   },
   "browser": {
      "check_default_browser": false
   },
   "distribution": {
      "import_bookmarks": false,
      "import_history": false,
      "import_search_engine": false,
      "make_chrome_default_for_user": false,
      "show_welcome_page": false,
      "skip_first_run_ui": true
   },
   "dns_prefetching": {
      "enabled": false
   },
   "profile": {
      "content_settings": {
         "pattern_pairs": {
            "https://*,*": {
               "media-stream": {
                  "audio": "Default",
                  "video": "Default"
               }
            }
         }
      },
      "default_content_settings": {
         "geolocation": 1,
         "mouselock": 1,
         "notifications": 1,
         "popups": 1,
         "ppapi-broker": 1
      },
      "password_manager_enabled": false
   },
   "safebrowsing": {
      "enabled": false
   },
   "search": {
      "suggest_enabled": false
   },
   "translate": {
      "enabled": false
   }
}
[0.708][INFO]: Populating Local State file: {
   "background_mode": {
      "enabled": false
   },
   "ssl": {
      "rev_checking": {
         "enabled": false
      }
   }
}
[0.712][INFO]: Launching chrome: /opt/google/chrome/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --disable-hang-monitor --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --full-memory-crash-report --ignore-certificate-errors --load-extension=/tmp/.com.google.Chrome.ZsjTh0/internal --logging-level=1 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12771 --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.lVGXx8 data:,
[0.714][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[0.732][WARNING]: PAC support disabled because there is no system implementation
[1.457][DEBUG]: DevTools request failed
[1.507][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.514][DEBUG]: DevTools request failed
[1.564][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.569][DEBUG]: DevTools request failed
[1.620][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.624][DEBUG]: DevTools request failed
[1.674][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.678][DEBUG]: DevTools request failed
[1.728][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.732][DEBUG]: DevTools request failed
[1.782][DEBUG]: DevTools request: http://127.0.0.1:12771/json/version
[1.786][DEBUG]: DevTools request failed

(google-chrome:1887): Gtk-WARNING **: cannot open display:

А потом еще тонну строк "Запрос DevTools: http://127.0.0.1:12771/json/version, Ошибка запроса DevTools" (сотни и сотни).

Я пробовал сSelenium 3.7.1, а затем попытался обновить до Selenium 3.12.0, без изменений в выводе.

Установлен Chrome (версия 66.0.3359.181), как и ChromeDriver (v2.9.248304), и все это работает на коробке Centos 7 без Window Manager.В то время как командная строка, с которой ChromeDriver, по-видимому, запускает Chrome, завершается с ошибкой из командной строки:

$ /opt/google/chrome/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --disable-hang-monitor --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --full-memory-crash-report --ignore-certificate-errors --load-extension=/tmp/.com.google.Chrome.ZsjTh0/internal --logging-level=1 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12771 --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.lVGXx8 data:,

(google-chrome:3346): Gtk-WARNING **: cannot open display:

, это успешно, если я добавлю --headless в строку.

$ /opt/google/chrome/google-chrome --headless --disable-background-networking --disable-client-side-phishing-detection --disable-component-update --disable-default-apps --disable-hang-monitor --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --full-memory-crash-report --ignore-certificate-errors --load-extension=/tmp/.com.google.Chrome.ZsjTh0/internal --logging-level=1 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12771 --safebrowsing-disable-auto-update --safebrowsing-disable-download-protection --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.lVGXx8 data:,
[0529/154351.972190:ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context.

DevTools listening on ws://127.0.0.1:12771/devtools/browser/a008b11c-d1c3-4c56-ba28-7f221eed4507
Fontconfig warning: "/etc/fonts/fonts.conf", line 146: blank doesn't take any effect anymore. please remove it from your fonts.conf

Эта установка прекрасно работает на моем компьютере с Windows (но запрос Launching Chrome на моем компьютере с Windows действительно включает параметр --headless).Я не уверен, почему ChromeDriver, по-видимому, не передает какой-либо из chromeOptions (--headless, --disable-gpu или --window = 1920x1024) процессу chrome при запуске.

Буду признателен за любую помощь ...

1 Ответ

0 голосов
/ 30 мая 2018

Ваш кодовый блок почти идеален.Пара вещей:

  • Если вы посмотрите на исходный код setHeadless(), флаг --headless уже реализован.Так что установка явно addArguments("--headless") будет накладной.Вы можете удалить аргумент.

    def set_headless(self, headless=True):
        """
        Sets the headless argument
    
        Args:
          headless: boolean value indicating to set the headless option
        """
        args = {'--headless', '--disable-gpu'}
        if headless:
            self._arguments.extend(args)
        else:
            self._arguments = list(set(self._arguments) - args)
    
  • Однако вашей основной проблемой является несовместимость среди двоичных версий, которые вы используете, следующим образом:

    • Вы используете chromedriver = 2,9
    • Примечания к выпуску chromedriver = 2,9 ясно упоминает следующее:

    • Поддержка Chrome v31-34

    • Вы используете хром = 66.0

    • Примечания к выпуску ChromeDriver v2.38 четко упоминает следующее:

    • Поддержка Chrome v65-67

  • Таким образом, существует явное несоответствие между ChromeDriver v2.9 и Chrome Browser v66.0

Solution

  • Keep JDK повышен до последних уровней JDK 8u171 .
  • Keep Selenium обновлен до текущих уровней Версия 3.12.0 .
  • Обновление ChromeDriver до текущей ChromeDriver v2.38 level.
  • Keep Chrome версия на Chrome v66.x уровнях.( согласно примечаниям к выпуску ChromeDriver v2.38 )
  • Очистить ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Используйте CCleaner , чтобы стереть все рутинные операции ОС до и после выполнения вашего test Suite .
  • Если ваша базовая веб-клиент версия устарела, удалите ее через Revo Uninstaller и установите последнюю версиюGA и выпущенная версия Веб-клиент .
  • Возьмите Перезагрузка системы .
  • Выполните @Test.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...