Как мне получить заголовки ответа в Selenium? - PullRequest
7 голосов
/ 16 августа 2010

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

 selenium.captureNetworkTraffic("json");

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

Ответы [ 4 ]

9 голосов
/ 25 августа 2011

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

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

2 голосов
/ 11 июня 2015

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

1 голос
/ 19 июня 2017

Вы можете сделать это, вставив 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, чтобы получить то, что вы хотите.

0 голосов
/ 29 августа 2014

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

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

var globalVariableForSelenium = "";

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

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

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

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

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

}

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

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

...