使用Javascript滚动不会调用Ajax调用。 (硒自动化)

时间:2013-09-23 10:11:25

标签: javascript ajax selenium webdriver

我们在ExtJs中构建了一个应用程序。由于ExtJs app自动化没有可用的外部库,我使用Javascript创建了自己的库。我将通过selenium调用这些Javascript函数。

这里是我被困的地方,我有一个数据网格,我想用javascript读取数据并将其存储在二维数组中。如果网格中的数据是静态的,则可以完美地工作。如果数据是动态的,让我们说,当我向下滚动网格时,网格底部的数据仅在滚动条到达某一点时出现,即仅当用户向下滚动时底部数据才出现在HTML中。我相信这是Ajax的图片。所以我使用scrollTop向下滚动网格。这是问题所在,如果我在chrome控制台上手动执行下面的代码(使用scrollTop),那么当滚动到达某一点时会显示动态数据,但如果我在网格读取代码中包含此调用,则动态数据不会即使滚动到达触发点,也会出现

    // ** code to scroll the grid **

        scrollLen = 21;

        function scrollDown(){  
            var scrollDiv = document.getElementById('treeview-1085');
            scrollDiv.scrollTop = scrollDiv.scrollTop + scrollLen;

        }


    // ** code to read data from grid **
    ExtSelenium.getElementMatrix = function(){

        // 'this' refers to ExtJs grid component
        var rowElements = [];
        var matrix = [];

        // get table element
        var tableElement = this.element.getElementsByTagName('table')[0];

        // get first table row
        var trElement = tableElement.getElementsByTagName('tr')[0];

        // Check if table has row elements, if not then return empty matrix
        if(!trElement){
            return matrix;
        }

        // Iterate through the table

        // Iterate by <tr>
        do{
            if(trElement.hasClass('x-grid-row')){

                // get the all data cells for the row
                var tdElements  = trElement.getElementsByTagName('td');

                // see if particular row has any data cells
                if(tdElements.length>0){

                    // get the first cell data
                    var tdElement = tdElements[0];
                    rowElements = [];

                    // Iterate by <td>
                    do{
                        rowElements.push(tdElement);
                    } while(tdElement = tdElement.nextSibling);

                    // once the iteration through all cell data is complete
                    // push the elements in matrix array
                    matrix.push(rowElements);
                }

            }

            // This is where I scroll the grid 
            scrollDown(); 

        }while(trElement = trElement.nextSibling);

        return matrix;
    }

}

动态数据仅在执行上述功能后出现,但我希望在滚动到达某一点时执行期间显示数据,以便我可以捕获网格中的完整数据。目前我只能捕获部分数据。

有人可以帮忙吗?如果Javascript不起作用,那么我必须使用ExtJs内部函数(这对于自动化非常糟糕)。

提前致谢!

0 个答案:

没有答案