Мне нужен лучший способ проверки заголовков HTTP-ответов с помощью Selenium. Я просмотрел документы Selenium и не видел простых способов сделать это. Помощь высоко ценится.Лучший способ проверить заголовки ответов HTTP с помощью Selenium
ответ
Я ответил на этот вопрос пару раз на StackOverflow. Найдите мои предыдущие ответы, чтобы выкопать его. Ключ, в котором вам нужно написать какой-то пользовательский код Java, который расширяет ProxyHandler и SeleniumServer. Вам также необходимо использовать выпуск AFTER 1.0 beta 2.
Что касается людей, которые спрашивают , почему вы хотите сделать это: есть много причин. В моем случае мы тестируем тяжелое приложение AJAX, и когда все идет не так, одна из первых вещей, которую мы отлаживаем, - это сетевой провод. Это помогает нам увидеть, произошел ли звонок AJAX, и если да, то каков был ответ.Мы фактически автоматизировали сбор этой информации и фиксировали ее (вместе с скриншотом) с каждым тестом Selenium.
Я отмечаю этот ответ как тот, который мне нравится, поскольку он фактически решает мою проблему. :) У нас есть причины и для проверки заголовков. Я согласен с вышеуказанными сообщениями, но нам очень полезно попасть в заголовки. – globulus
Ну, так как это сам г-н Селен, не может спорить;). Я знал, что вы также можете расширить классы Java на сервере. –
Я просмотрел ваши ответы и не могу найти тот, на который вы ссылаетесь. Какой ответ был? Есть ли у вас примеры расширения этих двух классов Java? – nzpcmad
Что я сделал с этим, используя Selenium (а не Selenium RC), было преобразование тестов HTML в JSP, а затем использование Java, где необходимо читать заголовки, или делать все, что JavaScript (селен - это просто Javascript) не мог сделать ,
Возможно, вы можете сообщить несколько сведений о том, как вы планируете использовать Selenium?
Я использую драйвер Ruby для Selenium RC. Я не уверен, что я следую тому, что вы подразумеваете в преобразовании тестов HTML в JSP. Сайт, который я тестирую, написан на .Net, хотя я не могу себе представить, что это повлияло бы на подход. Итак, есть способ перехватить заголовки, что вы говорите? – globulus
Я бы не использовал Selenium для этого типа теста и предлагаю вам решить множество проблем с различными инструментами. что мы делаем:
Использование модульных тестов для тестирования кода: методы и классы
Интеграционные тесты, чтобы проверить, как компоненты приложения висят вместе
Простой функциональный тест рамки, как Canoo WebTest (или некоторый эквивалент), чтобы утверждать такие вещи, как заголовки кэша Http, базовая структура страницы, простое перенаправление и настройки/значения файлов cookie
Напольные тесты для обеспечения достоверности страниц до Стандарты W3C
JsUnit протестировать классы и методы, которые мы создали
Селена для тестирования пользовательского интерфейса функциональности/поведения Javascript и интеграцию Javascript в этих страницы
Его стоит тратить время вспыхивает ответственность за тестирование различных аспектов системы с использованием этих различных инструментов, поскольку использование только селена может вызвать проблемы:
- Чем больше сюита, тем медленнее они бегают. Действительно Селен неотъемлемо медленнее по сравнению с другими инструментами упоминалось
- Он обрабатывает поведение/функциональное тестирование, но тем не менее XPaths может быть хрупким и может потребовать увеличения количества времени и усилий, чтобы поддерживать
- Обычно требуется вам настроить «как если бы -действительная жизнь» данных с вашим приложением для пошаговых пользовательских сценариев (который может быть грязными и занять много времени)
есть также некоторые методы - которые вы можете или не сталкивались - что вы можете использовать для проведения тестов Selenium more resilient.
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();
этот метод не поддерживается в селене 2 .. я получаю 'java.lang.UnsupportedOperationException: captureNetworkTraffic' –
Мне кажется, что это может быть очень полезно, чтобы проверить заголовки ответа HTTP с селеном. Не в 100% случаев, возможно ... но, конечно же, есть некоторые. Если вы проверяете последовательность страниц, кажется, было бы полезно протестировать некоторые заголовки ответов как часть этого тестирования (тип Content-Type и Pragma).
Ну, я надеялся выяснить, содержит ли свойство Accept-Encoding из HTTP-заголовка «gzip», потому что в нашей компании мы сжимаем CSS и JS-файлы в нашем веб-приложении gzip, и мы хотим проверить его Selenim после каждого фиксации.
Я придумал обходное решение, которое использует встроенный прокси-сервер, любезно предоставленный проектом Proxoid.
Его легкий, в отличие от практически любой другой альтернативы там (как BrowserMob или даже LittleProxy)
Смотрите HOWTO, с кодом, здесь: http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers
Читать сессионные куки с селеном, а затем использовать реальный 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")
Что именно вы пытаетесь сделать? Selenium работает в браузере. Есть ли какая-то конкретная информация, которая вам нужна? – Ben