Мониторинг протоколов протоколов JSON

Согласно документации на селен, взаимодействие между клиентом webdriver и браузером осуществляется через JSON Wire Protocol . В основном клиент, написанный на python, ruby, java, отправляет сообщения JSON в веб-браузер, а веб-браузер также отвечает на JSON.

Есть ли способ просмотреть / уловить / зарегистрировать эти сообщения JSON во время тестирования селена?

Например (в Python):

from selenium import webdriver driver = webdriver.Chrome() driver.get('http://google.com') driver.close() 

Я хочу посмотреть, какие сообщения JSON идут между клиентом pelon selenium webdriver и браузером при создании экземпляра драйвера (в данном случае Chrome): webdriver.Chrome() , когда я получаю страницу: driver.get('http://google.com') и когда я его закрываю: driver.close() .

FYI, в учебнике #SFSE: Stripping Down Remote WebDriver это делается путем захвата сетевого трафика между локальным компьютером, на котором выполняется сценарий, и удаленным сервером селена.

Я помещаю вопрос как специфичный для Python , но действительно был бы доволен любыми указателями.

2 Solutions collect form web for “Мониторинг протоколов протоколов JSON”

Когда вы используете Chrome, вы можете направить экземпляр chromedriver который будет управлять Chrome, чтобы регистрировать больше информации, чем то, что доступно через пакет logging . Эта информация включает команды, отправленные в браузер, и ответы, которые он получает. Вот пример:

 from selenium import webdriver driver = webdriver.Chrome(service_log_path="/tmp/log") driver.get("http://www.google.com") driver.find_element_by_css_selector("input") driver.quit() 

Приведенный выше код выведет журнал в /tmp/log . Часть журнала, соответствующая find_element_... выглядит следующим образом:

 [2.389][INFO]: COMMAND FindElement { "sessionId": "b6707ee92a3261e1dc33a53514490663", "using": "css selector", "value": "input" } [2.389][INFO]: Waiting for pending navigations... [2.389][INFO]: Done waiting for pending navigations [2.398][INFO]: Waiting for pending navigations... [2.398][INFO]: Done waiting for pending navigations [2.398][INFO]: RESPONSE FindElement { "ELEMENT": "0.3367185448296368-1" } 

Насколько я знаю, команды и ответы точно представляют, что происходит между клиентом и сервером. Я отправил отчеты об ошибках и исправления в проект Selenium на основе того, что я видел в этих журналах.

Нашел один вариант, который почти соответствует моим потребностям.

Простое подключение регистратора к stdout позволяет увидеть сделанные базовые запросы:

 import logging import sys from selenium import webdriver # pipe logs to stdout logger = logging.getLogger() logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.NOTSET) # selenium specific code driver = webdriver.Chrome() driver.get('http://google.com') driver.close() 

Он печатает:

 POST http://127.0.0.1:56668/session {"desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "javascriptEnabled": true, "chromeOptions": {"args": [], "extensions": []}}} Finished Request POST http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/url {"url": "http://google.com", "sessionId": "5b6875595143b0b9993ed4f66f1f19fc"} Finished Request DELETE http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/window {"sessionId": "5b6875595143b0b9993ed4f66f1f19fc"} Finished Request 

Я не вижу ответов, но это уже прогресс.

  • Селену требуется много времени, чтобы найти элемент. Есть ли что-то, что я могу сделать?
  • Webdriver phantomjs больше не ссылается на ссылку на клик
  • Переключить окно на Selenium
  • Можно ли запускать сценарии Selenium без запуска X-сервера?
  • Получить HTML-источник WebElement в Selenium WebDriver с помощью Python
  • Интернет-исследователь Selenium python
  • Как получить текст элемента в Selenium WebDriver (через Python api) без включения текста дочернего элемента?
  • в веб-драйвере селена, как выбрать правильный iframe
  • Python - лучший язык программирования в мире.