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
   298   299   300   301   302   303   304   305   306   307   308