Мне нужен лучший способ проверить заголовки ответов HTTP с помощью Selenium. Я просмотрел документы Selenium и не нашел простого способа сделать это. Помощь высоко ценится.
Лучший способ проверить заголовки ответа HTTP с помощью Selenium
Ответы (6)
Я несколько раз отвечал на этот вопрос на StackOverflow. Найдите мои предыдущие ответы, чтобы откопать это. Ключ, который вы должны написать некоторый собственный код Java, который расширяет ProxyHandler и SeleniumServer. Вам также необходимо использовать версию ПОСЛЕ 1.0 beta 2.
Что касается людей, которые спрашивают, почему вы хотите это сделать: причин много. В моем случае мы тестируем тяжелое приложение AJAX, и когда что-то идет не так, одна из первых вещей, которую мы отлаживаем, — это сетевой провод. Это помогает нам увидеть, произошел ли вызов AJAX, и если да, то каков был ответ. На самом деле мы автоматизировали сбор этой информации и фиксируем ее (вместе со снимком экрана) при каждом тесте Selenium.
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();
java.lang.UnsupportedOperationException: captureNetworkTraffic
- person Satish Pandey; 29.11.2012
Я бы не стал использовать Selenium для такого типа тестов и предлагаю вам решать множество проблем с тестированием с помощью разных инструментов. что мы делаем это:
Используйте модульные тесты для проверки кода: методы и классы
Интеграционные тесты для проверки того, как компоненты приложения взаимодействуют друг с другом.
Простая инфраструктура функционального тестирования, такая как Canoo WebTest (или что-то подобное), для подтверждения таких вещей, как заголовки кэша Http, базовая структура страницы, простое перенаправление и настройки / значения файлов cookie.
Индивидуальные тесты для проверки соответствия страниц стандартам W3C
JSunit для тестирования классов и методов Javascript, которые мы создали
Selenium для тестирования функциональности/поведения пользовательского интерфейса и интеграции Javascript на эти страницы.
Стоит потратить время на то, чтобы избавиться от ответственности за тестирование различных аспектов системы с использованием этих различных инструментов, поскольку использование только Selenium может вызвать проблемы:
- Чем больше набор, тем медленнее они бегут. Действительно, Selenium по своей природе медленнее по сравнению с другими упомянутыми инструментами.
- Он хорошо справляется с поведенческим/функциональным тестированием, но, тем не менее, XPath может быть ненадежным и может потребовать все больше времени и усилий для обслуживания.
- Обычно требуется, чтобы вы настроили данные как будто в реальной жизни в своем приложении для пошагового выполнения пользовательских сценариев (что может быть запутанным и занимать много времени).
Существуют также некоторые приемы, с которыми вы, возможно, сталкивались или не сталкивались, которые вы можете использовать для создания тестов Selenium более устойчивыми.
Я придумал обходной путь, который использует встроенный прокси-сервер, любезно предоставленный проектом Proxoid.
Он легкий, в отличие от практически любой другой альтернативы (например, BrowserMob или даже LittleProxy).
См. HOWTO с кодом здесь: http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers
Что я сделал, чтобы справиться с этим с помощью Selenium (не Selenium RC), так это преобразовал HTML-тесты в JSP, а затем использовал Java, где это необходимо, для чтения заголовков или выполнения любых других действий, которые JavaScript (selenium — это просто Javascript) не мог сделать.
Возможно, вы могли бы рассказать несколько подробностей о том, как вы планируете использовать Selenium?
Прочитайте файлы 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")