2017-11-11 91 views
1

我有一些使用ui-grid的Angular应用程序运行的量角器测试。我对应用程序有一些工作冒烟测试,但我刚开始使用https://github.com/angular-ui/ui-grid/blob/master/test/e2e/gridTestUtils.spec.js来测试ui网格组件来执行测试。我遇到的问题是我需要网格元素的实际ID以便使用getGrid函数。使用Selenium /量角器找不到角度ui-grid元素的编号

我能够使用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] 
====== 

所以它似乎像元素的控制台输出被发现,我已经检查和执行console.log承诺内部正在执行。

就好像它找不到'id',根据API文档表示元素上没有id。但这绝对不是事实。

+0

猜测它可能是与硒的webdriver把手的方式逃避css(escapeCss方法)? https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/lib/by.js也许添加一个ID标签找到另一种方式? – cnishina

+0

问题是ID是动态分配的,我需要抓住它才能使用getGrid。更改网页的设计不是一种选择,我没有发现webElement本身的问题,只需使用getAttribute()从元素中获取ID即可。 –

回答

0

您的代码看起来正确。 但是,如果你的console.log(result)没有记录任何东西,这意味着你要么没有找到该元素,要么你执行getAttribute()时,该元素不再存在。

请参阅API description,即getAttribute()总是返回值,如果元素存在。

也许尝试扩展console.log('======='+result);找出,如果该行代码得到执行(我敢肯定它没有执行)。如果真的找到元素,请尝试console.log(grid.toString());,它应该输出[object Object]

至于ElementFinder,我已经习惯了使用'"只是其他周围的路,让element(by.css('[id$="-grid-container"]'));或更短$('[id$="-grid-container"]')

让我知道,如果这有帮助,你可以进一步确定原因。

回合2

让我们排除了一些东西

  1. 变化getAttribute('id')getAttribute('outerHTML')看, 如果有任何记录。

  2. 变化(result)(resultattr)排除,该结果还使用一个插件,谁把result为全局变量。

  3. 变化grid.getAttribute()element(by.css("[id$='-grid-container']")).getAttribute

是什么这些行动的结果?

+0

感谢您的建议。然而,我仍然一样困惑,因为 'var grid = element(by.css(“[id $ =' - grid-container']”)); console.log(grid.toString()); (函数(结果){ console.log('======'+ result); var myGrid = gridTestUtils.getGrid(result.toString()); gridTestUtils.expectCellValueMatch(myGrid,0,0, '考克斯'); });' 给出 '[对象的对象]' ======控制台输出 –

+0

即评论是不可能的读 - 我将它添加到我的问题中。 –

+0

这确实是一个奇怪的情况。我现在编辑我的答案进一步的调试说明。 –

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'); 
}); 
+0

我很确定网页上只有一个网格容器(这是一个非常简单的应用程序),但我试图确保你的建议。没有运气。感谢您的建议,让我知道如果你有任何其他的想法。 –

相关问题