Я написал тесты с Selenium2 / WebDriver и хочу проверить, возвращает ли HTTP-запрос HTTP 403 Forbidden.
Можно ли получить код состояния ответа HTTP с помощью Selenium WebDriver?
Я написал тесты с Selenium2 / WebDriver и хочу проверить, возвращает ли HTTP-запрос HTTP 403 Forbidden.
Можно ли получить код состояния ответа HTTP с помощью Selenium WebDriver?
webdriver
ограничениях, а эти ограничения одинаковы как для Python, так и для Java;)Ответы:
Одним словом, нет. Невозможно использовать API Selenium WebDriver. Это до тошноты обсуждалось в системе отслеживания проблем проекта, и эта функция не будет добавлена в API.
источник
Получить код ответа на HTTP-запрос можно с помощью Selenium и Chrome или Firefox. Все, что вам нужно сделать, это запустить Chrome или Firefox в режиме регистрации. Я покажу вам несколько примеров ниже.
java + Selenium + Chrome Вот пример java + Selenium + Chrome, но я предполагаю, что это можно сделать на любом языке (python, c #, ...).
Все, что вам нужно сделать, это указать chromedriver сделать "Network.enable". Это можно сделать, включив ведение журнала производительности.
После выполнения запроса все, что вам нужно сделать, это получить и просмотреть журналы производительности и найти «Network.responseReceived» для запрашиваемого URL:
Вот код:
Результат выглядит так:
java + Selenium + Firefox Я наконец нашел уловку и для Firefox. Вы должны начать с использованием Firefox
MOZ_LOG
иMOZ_LOG_FILE
переменных окружения, и журнал HTTP - запросов на уровне отладки(4 = PR_LOG_DEBUG) - map.put("MOZ_LOG", "timestamp,sync,nsHttp:4")
. Сохраните журнал во временном файле. После этого получите содержимое сохраненного файла журнала и проанализируйте его на предмет кода ответа (используя несколько простых регулярных выражений). Сначала определите начало запроса, определив его идентификатор(nsHttpChannel::BeginConnect [this=000000CED8094000])
, затем, на втором этапе, найдите код ответа для этого идентификатора запроса(nsHttpChannel::ProcessResponse [this=000000CED8094000 httpStatus=200])
.Результатом этого будет
Заголовки ответов также можно найти в файле журнала. Вы можете получить их, если хотите.
источник
Вы можете использовать прокси BrowserMob для захвата запросов и ответов с расширением
HttpRequestInterceptor
. Вот пример на Java:источник
Тем, кто использует Python, вы могли бы рассмотреть Selenium Wire , библиотеку, которую я разработал для проверки запросов, сделанных браузером во время теста.
Вы получаете доступ к запросам через
driver.requests
атрибут:Печать:
Библиотека дает вам возможность доступа к заголовкам, коду состояния, содержимому тела, а также возможность изменять заголовки и перезаписывать URL-адреса.
источник
driver.wait_for_request()
метод, чтобы найти запрос, ответ которого вас интересует. Дополнительную информацию см. В документации .http://myserver.com/some/path/12345/
можно пройтиdriver.wait_for_request(‘.*/12345/‘)
У меня также была такая же проблема, и я застрял на несколько дней, но после некоторого исследования я понял, что мы действительно можем использовать chrome "--remote-debugging-port" для перехвата запросов в сочетании с веб-драйвером selenium. Используйте следующий псевдокод в качестве ссылки: -
создать экземпляр драйвера Chrome с удаленной отладкой
позвоните на http://127.0.0.1:freePort
Извлеките URL-адрес webSocket Chrome для прослушивания, вы можете увидеть ответ и выяснить, как извлечь
Подключитесь к этому сокету, вы можете использовать asyncHttp
Включить сетевой захват
Теперь Chrome будет отправлять все события, связанные с сетью, и фиксировать их следующим образом
вы можете делать все, что описано на сайте инструментов разработчика. см. https://chromedevtools.github.io/devtools-protocol/ Примечание: - используйте chromedriver 2.39 или выше.
Надеюсь, это кому-то поможет.
ссылка: Использование протокола удаленной отладки Google Chrome
источник
selenium-webdriver
, в моем случае), которая автоматически включаласьNetwork.enable
и предоставляла простой способ проверить последний ответ ... напримерdriver.response.status_code
. Может быть, когда-нибудь я добавлю это ... :)status_code
. Он использует протокол удаленной отладки Chrome, как в этом примере.Получите код ответа на любом языке (используя JavaScript):
Если ваши тесты Selenium выполняются в современном браузере, простой способ получить код ответа - отправить синхронный
XMLHttpRequest
* и проверитьstatus
ответ:Вы можете использовать эту технику с любым языком программирования, попросив Selenium выполнить сценарий. Например, в Java вы можете использовать
JavascriptExecutor.executeScript()
для отправкиXMLHttpRequest
:*
XMLHttpRequest
Вместо этого вы можете отправить асинхронное сообщение , но вам нужно будет дождаться его завершения, прежде чем продолжить тест.Получите код ответа на Java:
Вы можете получить код ответа на Java, используя
URL.openConnection()
иHttpURLConnection.getResponseCode()
:Этот метод, вероятно, можно было бы распространить и на другие языки, но его нужно было бы изменить, чтобы он соответствовал API языка (или библиотеки).
источник
Не уверен, что это то, что вы ищете, но у меня была немного другая цель - проверить, существует ли удаленное изображение, и у меня не будет ошибки 403, поэтому вы можете использовать что-то вроде ниже:
источник
Получить код HTTP-ответа напрямую с помощью Selenium WebDriver невозможно. Код может быть получен с помощью кода Java и может быть использован в Selenium WebDriver.
Чтобы получить код ответа HTTP с помощью java:
Теперь вы можете написать свой код Selenium WebDriver, как показано ниже:
источник
Вы можете попробовать Mobilenium ( https://github.com/rafpyprog/Mobilenium ), пакет python, который связывает BrowserMob Proxy и Selenium.
Пример использования:
источник