Как получить заголовки ответов в Selenium?

Как я могу получить журналы запросов/ответов в selenium? У меня есть вызов ajax, который возвращает информацию для входа, и всякий раз, когда я пытаюсь захватить его через:

 selenium.captureNetworkTraffic("json");

он возвращает только элементы на стороне клиента (например, изображения .pn), но не фактический ответ JSON, который меня интересует.

4 ответов


к сожалению, не похоже, что вы можете сделать это только с селеном в автоматическом режиме, так как это против их принципов проектирования для Селена. Я не согласен с этим (поскольку он поддерживает получение информации о cookie-файлах-какой пользователь на самом деле проходит и анализирует свои файлы cookie?).

их "schtick" - это то, что selenium помогает вам автоматизировать то, что делает пользователь; поскольку пользователь не заботится о заголовках ответов, почему бы этой структуре? Для меня это разочаровывает, потому что мне нужно убедиться, что возвращаемый тип контента-это то, что я считаю, что это должно быть (для тестирования API). Он появляется еще один вопрос переполнения стека пришел к аналогичному выводу.


Я понимаю, что этот вопрос стар, как ад, но я разработал способ сделать это для firefox + selenium, изменив webdriver.xpi и создание драйвера.http_logger.variousLogMethods (). Пожалуйста, ответьте на этот пост, если есть интерес к этому, и я могу отправить код в github.


вы можете сделать это, введя XMLHttpRequest и ожидая результата:

Object response = ((JavascriptExecutor) driver).executeAsyncScript(
       "var callback = arguments[arguments.length - 1];" +
       "var xhr = new XMLHttpRequest();" +
       "xhr.open('GET', '/resource/data.json', true);" +
       "xhr.onreadystatechange = function() {" +
       "  if (xhr.readyState == 4) {" +
       "    callback(xhr.getResponseHeader());" +
       "  }" +
       "};" +
       "xhr.send();");
   JsonObject json = new JsonParser().parse((String) response);
   assertEquals("cheese", json.get("food").getAsString());

вы можете изменить обратный вызов xhr, чтобы получить то, что вы хотите.


Я нашел трюк, если вы используете jquery, вы можете зарегистрировать глобальный слушатель:

сначала вам нужно объявить глобальную переменную в вашем основном скрипте:

var globalVariableForSelenium = "";

в вашем Селене вы регистрируете слушателя:

if (driver instanceof JavascriptExecutor) {
                ((JavascriptExecutor) driver)
                .executeScript("$(document).ajaxSuccess(function(event, xhr, settings) {  globalVariableForSelenium = settings.headers    });");
            }

затем вы выполняете свое действие

Finaly вы получаете значение глобальной переменной:

if (driver instanceof JavascriptExecutor) {
            Object res = ((JavascriptExecutor) driver)
            .executeScript("return  serializeGlobalvariable();");

}

serializeGlobalvariable () - это функция, которая будет сериализовать globalVariableForSelenium, которая содержит массив заголовка.

ps: мне нужно было получить доступ к ответу ajax, поэтому я установил глобальную переменную с помощью xhr.responseJSON.путь mypath