我们在 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 内部函数(这对自动化非常不利)。
提前致谢!