t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как вебдрайвером отлавливать реквесты с сайта

csharp
fiddler
selenium
webdriver
.net
Теги: #<Tag:0x00007f9c4aeb0490> #<Tag:0x00007f9c4aeb0350> #<Tag:0x00007f9c4aeb0210> #<Tag:0x00007f9c4aeb00d0> #<Tag:0x00007f9c4aeb19a8>

(Dmitry) #1

Добрый день, может кто-то сталкивался с подобным тестированием и может помочь

Задача: Нужно отлавливать реквесты, которые уходят с сайта при выполнении любых действий (клик на ссылку, переход по линке, заполнение формы и т.д.). В параметрах этих реквестов хранится множество аналитической информации, которую нужно проверять.
Подскажите, как с помощью вебдрайвера можно получить реквесты, которые уходят с сайта? Возможно есть какие то другие утилиты? Может можно подключить фидлер, который будет ловить эти запросы? Но тесты должны оставаться параллельными

image


QA Weekly #10_2019: валидации тест кейсов, реквесты с сайта, ISTQB, TCP/IP, Headless
(Valentin G ) #2

Сам не пробовал, но тут есть информация.


(Alexander Raichman) #3

У меня было много подобных тестов.
Есть 2 спсооба:

  1. Более лёгкий, но работает только с хромом: http://chromedriver.chromium.org/logging/performance-log
  2. Использовать прокси. Я знаю две тулы: https://github.com/lightbody/browsermob-proxy и https://weblog.west-wind.com/posts/2014/jul/29/using-fiddlercore-to-capture-http-requests-with-net
    Работал с обеими, по мне первый предпочтительней.

(Dmitry) #4

Спасибо за советы, буду пробовать


(Юрий Аксютин) #5

Вариант первый, как пишут выше - использовать прокси
Вариант второй, более интересный, перехватывать запросы на уровне JavaScript
Я так делаю в своем проекте. Не могу привести пример, потому что меня интересовал только запрос и дополнительные данные которые туда подставляют(application insight javascript)
Вам необходимо перехватывать последнюю стадию запроса - сам респонс(их там около 4, могу ошибаться)
По запросу: intercept ajax requests javascript, выдает сотни ответов


Перехватчик ставлю на уровне Selenium Execute JavaScript, результат пишу в лог файл


(Dmitry) #6

Спасибо за совет, звучит очень интересно. Но я не совсем разобрался как это работает.
Пробовал руками посмотреть на возвращаемый результат. Для этого использовал функцию JS

(function(send) {
    XMLHttpRequest.prototype.send = function(body) {
        var info="send data\r\n"+body;
        alert(info);
        send.call(this, body);
    };
})(XMLHttpRequest.prototype.send);

Но body в данном случае равен null. И возможно ли как то фильтровать запросы? Например не все запросы выводить, а которые содержат “/analytics/”


(Юрий Аксютин) #7

так выглядит скрипт для перехвата request:

window.ajaxInterceptor = function addXMLRequestCallback(callback) {
                    var oldSend, i;
                    if( XMLHttpRequest.callbacks ) 
                    {
                        XMLHttpRequest.callbacks.push(callback);
                    } 
                    else
                    {
                        XMLHttpRequest.callbacks = [callback];
                        oldSend = XMLHttpRequest.prototype.send;
                        XMLHttpRequest.prototype.send = function(){
                            for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) 
                            {
                                XMLHttpRequest.callbacks[i](this);
                            }
                        oldSend.apply(this, arguments);
                        }
                    }
                };
                window.ajaxInterceptor(function(xhr) {
                   if (xhr.ajaxData)
                   {
                       window.logs += '\n' + (xhr.ajaxData.id + ' | ' + xhr.ajaxData.requestUrl);
                       console.dir(xhr.ajaxData.id + ' | ' + xhr.ajaxData.requestUrl);
                   }
                });

и то меня только интересуют id, url: xhr.ajaxData.id, xhr.ajaxData.requestUrl

для перехвата респонса, надо этот скрипт дописать, но сейчас есть задания с более высоким приоритетом


(Dmitry) #8

Что делать, если иногда улетают GET запросы, а иногда POST?
И как быть, если нужно словить запросы на загрузку страницы или переход на другую страницу? Когда подсовывать этот js?


(Sergei) #9

Тоже пытался на уровне браузера перехватывать. Когда понял, что на этапе загрузки страницы не перехватить, кончилось все установкой митм прокси между браузером и реальным сервером. А уж с прокси можно было делать все что угодно.


(Юрий Аксютин) #10

Get или Post это без разницы
А вот во время загрузки страницы или редиректе на другую табу(загрузка новой страницы) этот способ не подходит.
Извините, в моем случае это неважно, поэтому не написал