在UI-Grid的Protractor e2e测试中,我使用了函数dataCell(gridId,fetchRow,fetchCol),该函数已在ui.grid.e2eTestLibrary.api中提供:gridTest,
来源: - https://github.com/angular-ui/ui-grid/tree/master/test/e2e。
dataCell: function( gridId, fetchRow, fetchCol ) {
var row = this.getGrid( gridId ).element(by.css('.ui-grid-render-container-body')).element( by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows track by $index').row( fetchRow ) );
return row.element( by.repeater('(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name').row( fetchCol ));}
在评论部分清楚地提到,dataCell(fetchRow,fetchColumn)必须在页面中可见,用于访问数据单元并填充它。
@param {string} gridId要检查的网格的ID
@param {integer} fetchRow要返回的行数(在可见行内)
@param {integer} fetchCol col的编号(在可见cols内) 你想要回归
我有一个大的UI网格(~100行和~50列),因此所有的行和列都不可见。因此,为了在量角器自动化测试期间使它们在页面中可见,我修改了dataCell()的代码,如下所示: -
dataCell: function( gridId, fetchRow, fetchCol ) {
var row = this.getGrid( gridId ).element( by.css('.ui-grid-render-container-body')).element( by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows track by $index').row( fetchRow ) );
browser.executeScript("arguments[0].scrollIntoView(true);", row.getWebElement());
return row.element( by.repeater('(colRenderIndex, col) in colContainer.renderedColumns track by col.uid').row( fetchCol ));
},
在此之后,它应该滚动到适当的单元格,然后选择它,并相应地进行编辑。
但是,我得到的dataCell是可点击的(),但当我通过方法给出输入时: -
cell.element(by.css("input")).sendKeys("Data to be filled");
量角器崩溃了,显示的错误如下所示: -
Failed: No element found using locator: By(css selector, input).
请建议一种方法,在UI网格中编辑网格单元格,这些方法通过适当的滚动不可见。
采取的附加行动: -
通过在创建UI网格的开发人员代码中增加virtualizationThreshold和columnvirtualizationThreshold的值,我使用了渲染行和列的解决方法。单元正确定位,但现在遇到了性能问题。 RAM和交换完全被自动化过程消耗,随后过程变得太慢。有什么方法可以解决内存性能问题吗?
答案 0 :(得分:0)
虚拟化数据的自动化e2e测试很难。要找到它,它必须在DOM中,要进入DOM,您必须滚动到它。因此,您需要在循环中使用您的finder:find / scroll / find / scroll;只有当你匹配或用完滚动时才会爆发。希望我错了,但我在ui.grid.e2eTestLibrary.api:gridTest中看不到任何内容。