Page 303 - AngularJS权威教程
P. 303
19.23 测试输入框 283
定位元素之后,就可以在element.all()对象上要求一个总量,并且设置一个有30个元素的 19
预期:
it('should have 30 issues', function() { 20
var elems = element.all(by.repeater('d in data'));
expect(elems.count()).toBe(30);
});
21
太棒了。我们来更深入了解这些重复的元素,确保每个元素都能显示头像。可以作一个合理
的假设:每个元素都是由多个其他元素重复构成的,所以我们会建立一个测试来测试单个元素。
22
为了取得页面上的元素,我们会使用.repeater()方法,以同样的方式开始。 element.all()
方法返回一个对象,包含了多个方法,可以用来与重复的列表元素交互。在这种情况下,我们只 23
使用first()方法来找到列表中的第一个元素。
鉴于列表还没有在页面上展示,first()方法返回一个promise,会在页面上解析为第一个 24
元素。
it('includes a user gravatar per-element', function() { 25
var elems = element.all(by.repeater('d in data'));
elems.first().then(function(elm) {
// elm就是第一个元素
}); 26
});
鉴于我们只对一个子元素感兴趣,所以会使用findElement()方法取得<img>元素。可以用 27
多种方式定位这个元素,我们会使用.tagName()方法。跟first()方法一样,findElement()也
因为同样的原因返回了一个promise。
28
it('includes a user gravatar per-element', function() {
var elems = element.all(by.repeater('d in data'));
elems.first().then(function(elm) { 29
elm.findElement(by.tagName('img')).then(function(img) {
// img就是<img>元素
});
}); 30
});
我们特别感兴趣的是确保src属性包含了一个头像URL。可以使用element对象提供的各种 31
方法去更加深入这个元素的细节。在本例中,我们会使用getAttribute()方法来找到src属性。
跟前两个方法一样,也需要把它设置为promise:
32
it('includes a user gravatar per-element', function() {
var elems = element.all(by.repeater('d in data'));
elems.first().then(function(elm) { 33
elm.findElement(by.tagName('img')).then(function(img) {
img.getAttribute('src').then(function(src) {
// src就是文本格式的img源地址 34
});
});
});
}); 35
鉴于我们得到src属性,所以可以建立一个期望:图片源与gravatar.com相匹配,如同GitHub
使用Gravatar: 36