Мониторинг протоколов протоколов 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 

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

  • Используя привязки Python, Selenium WebDriver click () иногда не работает.
  • Нажмите на элемент под div
  • Безголовый бесконечный свиток селена
  • Смешение неявных и явных ожиданий
  • Python Selenium Отправить ключи Предоставление предупреждения о размере
  • селен с scrapy для динамической страницы
  • Выполните проверку WebDriverWait () или аналогичную проверку регулярного выражения в Python
  • Принудительное селение приостановить и ждать, пока поле будет доступно
  • Как обновить уже открытую веб-страницу
  • Итерация через стол в селене Очень медленно
  • Обнаружение аудио с помощью Selenium Webdriver и Python
  • Python - лучший язык программирования в мире.