Лучший способ проверки заголовков HTTP-ответов с помощью Selenium

Мне нужен лучший способ проверить заголовки HTTP-ответов с Selenium. Я просмотрел документы Selenium и не видел простых способов сделать это. Помощь высоко ценится.

Ответы

Ответ 1

Я ответил на этот вопрос пару раз на StackOverflow. Найдите мои предыдущие ответы, чтобы выкопать его. Ключ, в котором вам нужно написать какой-то пользовательский код Java, который расширяет ProxyHandler и SeleniumServer. Вам также необходимо использовать версию AFTER 1.0 beta 2.

Что касается людей, которые спрашивают, почему вы хотите это сделать: есть много причин. В моем случае мы тестируем тяжелое приложение AJAX, и когда все идет не так, одна из первых вещей, которую мы отлаживаем, - это сетевой провод. Это помогает нам увидеть, произошел ли звонок AJAX, и если да, то каков был ответ. Мы фактически автоматизировали сбор этой информации и фиксировали ее (вместе с скриншотом) с каждым тестом Selenium.

Ответ 2

API

captureNetworkTraffic() в DefaultSelenium захватывает заголовки HTTP-запроса/ответа, и вы можете получить к ним доступ в формате html/xml/plain.

Вот пример кода:

Selenium s = new DefaultSelenium(...);
s.start("captureNetworkTraffic=true");
s.open("http://www.google.com");
String xml = s.captureNetworkTraffic("xml"); // html, plain
s.stop();

Ответ 3

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

  • Используйте модульные тесты для проверки кода: методы и классы

  • Интеграционные тесты для проверки совместимости компонентов приложения

  • Простая функциональная тестовая среда, такая как Canoo WebTest (или некоторый эквивалент) для утверждения таких вещей, как заголовки кеша Http, базовая структура страницы, простое перенаправление и настройки/значения cookie

  • Выполнение тестов для обеспечения достоверности страниц по стандартам W3C

  • JSunit для тестирования классов и методов Javascript, которые мы создали

  • Селен для проверки функциональности/поведения пользовательского интерфейса и интеграции Javascript на эти страницы

Его стоит потратить время, выбирая ответственность за тестирование различных аспектов системы, используя эти различные инструменты, поскольку использование только Selenium может вызвать проблемы:

  • Чем больше набор, тем медленнее они работают. Действительно, селен по своей природе медленнее по сравнению с другими упомянутыми инструментами.
  • Он хорошо справляется с поведением/функциональным тестированием, но, тем не менее, XPath могут быть хрупкими и могут потребовать увеличения времени и усилий для поддержания
  • Обычно вам необходимо настроить "как-бы-реальную" данные с вашим приложением, чтобы выполнить пользовательские сценарии (которые могут быть беспорядочными и занимать много времени).

Есть также некоторые методы, которые вы можете или не могли найти, которые вы можете использовать, чтобы ваши тесты Selenium были более устойчивыми.

Ответ 4

Я придумал обходное решение, которое использует встроенный прокси-сервер, любезно предоставленный проектом Proxoid.

Его легкий, в отличие от практически любой другой альтернативы (например, BrowserMob или даже LittleProxy)

Смотрите HOWTO с кодом, здесь: http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers

Ответ 5

То, что я сделал для этого, используя Selenium (не Selenium RC), состояло в том, чтобы преобразовать тесты HTML в JSP, а затем использовать Java, где необходимо читать заголовки, или делать что-то, что JavaScript (селен просто Javascript) не мог сделать.

Возможно, вы могли бы дать несколько подробностей о том, как вы планируете использовать Selenium?

Ответ 6

Мне кажется, что очень полезно тестировать заголовки ответов HTTP из селена. Не в 100% случаев, возможно... но, конечно же, есть некоторые. Если вы проверяете последовательность страниц, кажется, было бы полезно протестировать некоторые заголовки ответов как часть этого тестирования (Content-Type и Pragma прыгают на ум).

Ответ 7

Ну, я надеялся выяснить, содержит ли свойство Accept-Encoding из HTTP-заголовка "gzip", потому что в нашей компании мы сжимаем CSS и JS файлы в нашем веб-приложении gzip, и мы хотим проверить его Selenim после каждая фиксация.

Ответ 8

Прочитайте файлы cookie сеанса из Selenium, а затем используйте настоящую HTTP-библиотеку вне Selenium, чтобы запросить конкретную страницу.

Вот код Python:

# get session cookies from Selenium
cookies = {}
for s_cookie in self.selenium.get_cookies():
    cookies[s_cookie["name"]]=s_cookie["value"]

# request the pdf using the cookies:
response = requests.get(self.full_url('/vms/business_unit/2002/operational_unit/200202/guest/40/bill/pdf/'), cookies = cookies)
self.assertEqual(response.headers["content-type"], "application/pdf")