在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">
答案 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/));
});