通过绑定' ng-src'来获取元素不工作,量角器

时间:2015-01-28 20:45:22

标签: javascript angularjs html5 protractor

在Angular Phone cat应用程序中(步骤10),我无法使用element(by.binding('bindingName')) Protractor locators

教程链接Angular phone cat app (step-10, test)

详情

// Working
expect(element(by.css('img.phone')).getAttribute('src'))
  .toMatch(/img\/phones\/nexus-s.0.jpg/);

// Not Working
expect(element(by.binding('mainImageUrl')).getAttribute('src'))
  .toMatch(/img\/phones\/nexus-s.0.jpg/);
<img ng-src="{{mainImageUrl}}" class="phone">

3 个答案:

答案 0 :(得分:4)

by.binding在这种情况下不起作用by definition

根据source code,如果元素上至少存在ng-binding类,则它只匹配一个元素。

答案 1 :(得分:2)

我想稍微了解alecxe的答案。任何{{ }}表达式都有效,只要它不属于某个属性

例如:

<p class="phone">{{someText}}</p>

可以通过以下方式找到:

element(by.binding('someText'))

换句话说,您的模板不需要包含ng-binding类,因为它是由Angular自动生成的。话虽如此,目前还有一个bug,如果绑定是属性或属性值的一部分,则Angular不会生成ng-binding类,而Protractor将无法找到该元素。

答案 2 :(得分:0)

这也是我的问题,我找不到任何量角器功能来解决这个问题,所以这是我建议的解决方案。 :) 这个基于量角器的解决方案可以通过ng-bind获取元素并获取输入的value属性。 (我不知道为什么getText()输入不起作用:D)

..
  <img ng-src="{{mainImageUrl}}" class="phone">
  <input type="hidden" ng-bind="mainImageUrl" value="{{mainImageUrl}}">
..

在javascript中:

    element(by.binding('mainImageUrl')).getAttribute('value')
       .then(function(text){
          expect(text.toMatch(/img\/phones\/nexus-s.0.jpg/));
       });