Захват сетевых журналов XHR (запрос/ответ с параметрами) с помощью Selenium

Я попытался захватить сетевые журналы XHR (браузер Chrome), которые обычно показывают запрос (тип метода, заголовки, параметры) и ответ с веб-драйвером Selenium, но я смог получить только запрос API, который клиент отправил на сервер (без параметра), во время поиска я нашел ниже кода, и он предоставляет мне только запрос apis: -

LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
          for (LogEntry entry : logEntries) {
            System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage())
}

Но я хочу также получить все параметры, отправленные клиентом (браузером) на сервер, а также ответ. * как эта же функция будет работать в Firefox.

Заранее спасибо!!


person Suresh Sharma    schedule 21.03.2018    source источник
comment
Я думаю, что Selenium имеет доступ только к DOM, поэтому вам нужно будет сделать что-то странное, используя javascript, что немного загрязнит ваш тестовый пример. В DOM должно быть все, что отправляется... включая кэш-память HTML5... но чтобы получить заголовки, вам нужно выполнить javascript. Одна вещь, которая здесь кажется возможной, - это войти в структуру, которую использует сайт, и изменить ее для маршрутизации/дублирования запросов... поэтому, если они, например, использовали jQuery, поместите перехватчики в вызовы AJAX, которые возвращают или записывают в DOM нужная вам информация.   -  person pcalkins    schedule 01.10.2019


Ответы (2)


Вы можете использовать browsermobproxy .

Следующий фрагмент кода фиксирует все журналы запросов и ответов.

    // start the proxy
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.start(0);

    // get the Selenium proxy object
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

    // configure it as a desired capability
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);

    // start the browser up
    WebDriver driver = new FirefoxDriver(capabilities);

    // enable more detailed HAR capture, if desired (see CaptureType for the complete list)
    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

    // create a new HAR with the label "yahoo.com"
    proxy.newHar("yahoo.com");

    // open yahoo.com
    driver.get("http://yahoo.com");

    // get the HAR data
    Har har = proxy.getHar();

Захваченный ответ может быть просмотрен любой программой просмотра har.

HARReport

person Manmohan_singh    schedule 06.10.2019

Если вы используете такую ​​библиотеку, как Axios, для выполнения вызовов XHR, вы можете воспользоваться преимуществами перехватчиков запросов и перехватчиков ответов в качестве промежуточного программного обеспечения для перехвата и, в конечном итоге, регистрации каждого вызова XHR с его ответом. не полагаясь на интерфейсы безголовых браузеров.

Пример запроса

client.interceptors.request.use(
  req => {
     // req contains your request data 
  },
  err => Promise.reject(err),
);

Пример ответа

client.interceptors.response.use(
  response => response, // XHR Response
  error => {
    const originalRequest = error.config; // Error.config contains too the original request
    // ...code
  })
person Mosè Raguzzini    schedule 03.10.2019