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

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


person globulus    schedule 24.03.2009    source источник
comment
Что именно ты пытаешься сделать? Selenium работает в браузере. Есть ли какая-то конкретная информация, которую вы ищете?   -  person Ben    schedule 25.03.2009


Ответы (6)


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

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

person Patrick Lightbody    schedule 24.03.2009
comment
Я отмечаю этот ответ как тот, который мне нравится, поскольку он действительно решает мою проблему. :) У нас есть причины также проверять заголовки. Я согласен с вышеприведенными сообщениями, но нам очень полезно добраться до заголовков. - person globulus; 25.03.2009
comment
Ну, так как это сам мистер Селениум, тут не поспоришь ;). Я знал, что вы также можете расширить классы Java на сервере. - person Eric Wendelin; 25.03.2009
comment
Я просмотрел ваши ответы и не могу найти тот, на который вы ссылаетесь. Какой это был ответ? У вас есть примеры расширения этих двух классов Java? - person rbrayb; 29.06.2010
comment
@nzpcmad Извините, это было непонятно. Ситуация немного изменилась с планами Selenium + по проверке HTTP-трафика. В значительной степени мы все сейчас сосредоточены на использовании одного из инструментов с открытым исходным кодом, который создала моя компания, BrowserMob. Посетите browsermob.com/tools, чтобы узнать больше о browsermob-proxy (подходит для Se 1 + все браузеры) и browsermob-page-perf (хорошо для Se 2 + Firefox — использует Firebug). Удачи! - person Patrick Lightbody; 29.07.2010
comment
Если поиск моих предыдущих ответов, чтобы выкопать его, больше не является действительным советом, не могли бы вы отредактировать ответ, чтобы отразить это? В настоящее время это довольно вводит в заблуждение (я также копался в ваших предыдущих ответах, по-видимому, напрасно)... - person Jonik; 08.11.2010
comment
@PatrickLightbody, пожалуйста, обновите свой ответ. - person HakunaM; 02.11.2018

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();
person Community    schedule 24.07.2009
comment
этот метод не поддерживается в селене 2. Я получаю java.lang.UnsupportedOperationException: captureNetworkTraffic - person Satish Pandey; 29.11.2012

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

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

  • Интеграционные тесты для проверки того, как компоненты приложения взаимодействуют друг с другом.

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

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

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

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

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

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

Существуют также некоторые приемы, с которыми вы, возможно, сталкивались или не сталкивались, которые вы можете использовать для создания тестов Selenium более устойчивыми.

person j pimmel    schedule 24.03.2009

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

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

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

person superkelvint    schedule 22.06.2011

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

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

person Eric Wendelin    schedule 24.03.2009
comment
Я использую драйвер Ruby для Selenium RC. Я не уверен, что понимаю, что вы имеете в виду о преобразовании тестов HTML в JSP. Сайт, который я тестирую, написан на .Net, хотя я не думаю, что это изменит подход. Значит, есть способ перехватить заголовки, о чем вы говорите? - person globulus; 25.03.2009

Прочитайте файлы 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")
person Nimo    schedule 02.05.2013