0

我们在 ExtJs 中构建了一个应用程序。由于没有可用于 ExtJs 应用程序自动化的外部库,因此我使用 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 内部函数(这对自动化非常不利)。

提前致谢!

4

0 回答 0