【问题标题】:Protractor find element inside a repeater量角器在中继器内查找元素
【发布时间】:2014-03-31 08:53:46
【问题描述】:

下面是我的标记

<tr ng-repeat="post in posts">
  <td ng-click="activePost(post)" class="title">{{post.title}}</td>
  <td><button class="btn btn-danger" ng-click="delete(post)">Delete</button>
  </td>
</tr>

我正在尝试使用 title 类获取元素。

我用来访问中继器的代码是:

postsList = element.all(by.repeater('post in posts'));

有没有办法通过在 jQuery 中执行以下操作来获取元素:

var titleText = $("tr:first").find(".title").text();

有没有办法用量角器做类似的事情?

【问题讨论】:

    标签: angularjs protractor angularjs-e2e


    【解决方案1】:

    这应该适用于您的示例:

    element.all(by.repeater('post in posts')).then(function(posts) {
       var titleElement = posts[0].element(by.className('title'));
       expect(titleElement.getText()).toEqual('YourEnteredTitle');
    });
    

    【讨论】:

    • 无法在文档中找到它。谢谢,做到了。
    • 谢谢 - Voles 指出的第一行缺少括号
    • 我很想知道这是如何工作的,因为元素定位器不返回承诺并且在那里使用 .then 不再工作,你只是做 element.all(by.repeater( '帖子中的帖子))[0].element(by.className('title')); ?
    • 有点晚了...抱歉,我无法为您提供帮助。我改变了工作(回到 C#),我不熟悉当前的量角器语法。如果您仍然有兴趣了解这一点,请打开一个新问题。
    【解决方案2】:

    nilsK 的回答帮助了我,但没有完全奏效。下面的代码成功了:

    element.all(by.repeater('post in posts')).then(function(posts) {
       var titleElement = posts[0].element(by.className('title'));
       expect(titleElement.getText()).toEqual('YourEnteredTitle');
    });
    

    【讨论】:

      【解决方案3】:

      您必须按照此处https://github.com/angular/protractor/issues/877 的说明在数组中找到一个元素

      var items = element.all(by.repeater('userGroup in userGroups')).filter(function(item) {
           return item.element(by.binding('userGroup.name')).getText().then(function(label) {
                 return label === 'MyGroupName';
           });
        });
      items.get(0).element(by.css('.buttongochose')).click();
      

      【讨论】:

      • 我认为这是最好的答案,因为它允许您按文本过滤。
      【解决方案4】:

      来自文档: https://github.com/angular/protractor/blob/master/docs/locators.md

      var clickable = element.all(by.repeater('post in posts')).first().all(by.tagName('td')).first();
      

      【讨论】:

      • 这不是我想要的,我的意思是,它不是确切的代码块,但给了我一个很棒的想法!谢谢! :-)
      【解决方案5】:

      更好的解决方案:

      expect( $$(by.repeater('post in posts')).get(0).$('.title').getText() ).toBe('Your title');

      【讨论】:

        【解决方案6】:

        这些天做同样事情的可读性更高的方式是

        it('test case', async () => {
          let repeaters = element.all(by.repeater('post in posts'));
          let titleElement = repeaters.get(0).element(by.className('title'));
          expect(await titleElement.getText()).toEqual('YourEnteredTitle');
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多