无法使用Selenium / Protractor找到Angular ui-grid元素的id

时间:2017-11-11 00:27:29

标签: angularjs selenium protractor angular-ui-grid

我有一些在使用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。但这绝对不是真的。

2 个答案:

答案 0 :(得分:0)

您的代码看起来是正确的。 但是,如果您的console.log(result)没有记录任何内容,则表示您要么找不到该元素,要么执行getAttribute()该元素不再存在的那一刻。

请参阅API description,如果元素存在,则getAttribute() 始终会返回一个值。

也许尝试扩展console.log('======='+result);来弄清楚,如果该行代码被执行(我很确定它没有被执行)。如果确实找到了该元素,请尝试输出console.log(grid.toString());的{​​{1}}。

对于[object Object],我过去常常使用ElementFinder',所以"或更短{{1} }。

请告诉我,如果这有帮助,您可以进一步确定原因。

第2轮

让我们排除一些事情

  1. element(by.css('[id$="-grid-container"]'));更改为$('[id$="-grid-container"]')以查看, 如果有任何记录。

  2. getAttribute('id')更改为getAttribute('outerHTML')以排除,该结果将被插件使用,该插件将(result)作为全局变量。

  3. (resultattr)更改为result
  4. 这些行动的结果是什么?

答案 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');
});