Эквивалент jQuery.active в javacript Selenium Web Driver

Я использую веб-драйвер Selenium для взаимодействия с каким-либо веб-сайтом.
Если веб-сайт использует jQuery, мы можем получить ожидающий AJAX-запрос, используя jQuery.active:

 JavascriptExecutor jsx = (JavascriptExecutor) driver;

Int totAjaxRequest = (Int)jsx.executeScript("jQuery.active");

Int totAjaxRequest = (Int)jsx.executeScript("return jQuery.active");

В случае, если веб-сайт не использует jQuery, как мы можем подсчитать количество запросов XMLHttpRequest?

Ответ 1

Сохраните это на своем веб-сайте и позвоните ему из селена. Я думаю, что нет никакой подобной встроенной функции js. Я не думаю, что это ответ, который вы ищете, но, как я сказал выше, у javascript нет такой функции.

 var activeXhr = (function(){
    var count = 0;
    XMLHttpRequest.prototype.nativeSend = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function(body) {

    this.onreadystatechange  = function(){
        switch(this.readyState){
            case 2: count++; break
            case 4: count--; break
        }
    };
    this.nativeSend(body);
    };

    return count;
})();

console.log(activeXhr);

Если вы не можете редактировать или добавлять новый скрипт на свой сайт, вы все равно можете запустить скрипт.

Int totAjaxRequest = (Int)jsx.executeScript("
    (function(){
        var count = 0;
        XMLHttpRequest.prototype.nativeSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {

        this.onreadystatechange  = function(){
            switch(this.readyState){
                case 2: count++; break
                case 4: count--; break
                }
            };
            this.nativeSend(body);
        };

        return count;
    })()

");