我有一些在使用ui-grid的Angular应用程序上运行的Protractor测试。我对应用程序进行了一些有效的冒烟测试,但我刚刚开始使用https://github.com/angular-ui/ui-grid/blob/master/test/e2e/gridTestUtils.spec.js来测试ui-grid组件。我遇到的问题是我需要grid元素的实际id才能使用getGrid
函数。
我能够使用element(by.css("[id$='-grid-container']"))
成功找到元素,但由于某些原因,我尝试从元素中获取完整的ID失败了。这是我正在尝试的:
var grid = element(by.css("[id$='-grid-container']"));
grid.getAttribute('id').then(function(result) {
console.log(result);
var myGrid = gridTestUtils.getGrid(result.toString());
gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox');
});
console.log(result);
没有记录任何内容。它并不一定与ui-grid有关,它只是Selenium因某些原因没有找到id。据我所知,我正确使用getAttribute
;它在其他测试中使用这种语法,但也许我错过了一些东西。任何想法为什么这不起作用?
编辑因为我的评论不可读:
感谢您的建议。但是,我仍然感到困惑,因为
var grid = element(by.css("[id$='-grid-container']"));
console.log(grid.toString());
grid.getAttribute('id').then(function(result) {
console.log('======'+result);
var myGrid = gridTestUtils.getGrid(result.toString());
gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox');
});
给出控制台输出
[object Object]
======
所以好像找到了元素,我已经检查过了,并且正在执行promise中的console.log。
它无法找到' id',根据API文档意味着该元素上没有id。但这绝对不是真的。
答案 0 :(得分:0)
您的代码看起来是正确的。
但是,如果您的console.log(result)
没有记录任何内容,则表示您要么找不到该元素,要么执行getAttribute()
该元素不再存在的那一刻。
请参阅API description,如果元素存在,则getAttribute()
始终会返回一个值。
也许尝试扩展console.log('======='+result);
来弄清楚,如果该行代码被执行(我很确定它没有被执行)。如果确实找到了该元素,请尝试输出console.log(grid.toString());
的{{1}}。
对于[object Object]
,我过去常常使用ElementFinder
和'
,所以"
或更短{{1} }。
请告诉我,如果这有帮助,您可以进一步确定原因。
第2轮
让我们排除一些事情
将element(by.css('[id$="-grid-container"]'));
更改为$('[id$="-grid-container"]')
以查看,
如果有任何记录。
将getAttribute('id')
更改为getAttribute('outerHTML')
以排除,该结果将被插件使用,该插件将(result)
作为全局变量。
(resultattr)
更改为result
这些行动的结果是什么?
答案 1 :(得分:0)
不确定语义,但你可以试试这个,只是为了确保你得到第一个元素,如果是多个:
element.all(by.css('[id$="-grid-container"]')).first().getAttribute('id').then(function(result) {
console.log(result);
var myGrid = gridTestUtils.getGrid(result.toString());
gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox');
});