【问题标题】:How to select single element with protractor如何用量角器选择单个元素
【发布时间】:2016-05-26 12:31:29
【问题描述】:

我是量角器的新手,并且有一个 angularjs 脚本,我正在尝试选择元素“收件箱”。这是 3 个手风琴式下拉菜单中的第二个。

<div class="container">
 <div class="ng-scope" ui-view="" style="">
  <div class="logo-container ng-scope">
  <img class="img-responsive center-block" src="images/logo.png">   
 </div>
  <a class="ng-scope" ng-click="toggleNav('/inboxes/alerts')">
   <div class="inboxes inbox-alerts panel">
   <div class="panel-body">
   <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="panel-text ng-binding">
Alerts
<span class="badge ng-binding">3</span>
</span>
</div>
</div>
</a> 
<a class="ng-scope" ng-click="toggleNav('/inboxes/inbox')">
  <div class="inboxes inbox panel">
    <div class="panel-body">
      <span class="glyphicon glyphicon-inbox" aria-hidden="true"></span>
      <span class="panel-text ng-binding">
      Inbox
    <span class="badge ng-binding">41</span>
   </span>
  </div>
 </div>
</a>

我可以使用 element.all 来做到这一点,但这会返回一个元素数组 “['警报 3', '3', '收件箱 41', '41', 'Watch List104', '104' ]” 但我真正想要的是获得特定的元素。 下面是我的代码

it('should open & close the Inbox panel', function() {
    var inbox_elm1 = element.all(by.binding('Inbox')).get(2);
      inbox_elm1.click();
 ]);
}); 

如前所述,我使用 get(2) 来获取第二个元素。但我不想使用 element.all 来获取这个元素。
我已经尝试过其他返回零的东西,例如

var inbox_elm1 = element(by.binding('Inbox'));

var inbox_elm1 = element.all(by.binding('Inbox')).first(); 

返回错误。

考虑到这一点,我已经成功地选择了 Alerts 元素,因为它是第一个使用的面板:

var alrt_elm = element.all(by.binding('Alerts')).first();
alrt_elm.click();

但是重复上面的代码并将“警报”更改为“收件箱”只是继续选择警报手风琴而不是收件箱手风琴。建议?抱歉读了很久。

【问题讨论】:

    标签: javascript angularjs jasmine protractor


    【解决方案1】:

    您可以使用cssContainingText,它将css定位器作为第一个参数,将文本作为第二个参数。

    var alerts = element(by.cssContainingText('span.panel-text', 'Alerts'));
    var inbox = element(by.cssContainingText('span.panel-text', 'Inbox'));
    

    来源:http://www.protractortest.org/#/api?view=ProtractorBy.prototype.cssContainingText

    【讨论】:

      【解决方案2】:
      var alerts = element(by.xpath('//a[@ng-click='toggleNav('/inboxes/alerts')']'));
      var inbox = element(by.xpath('//a[@ng-click='toggleNav('/inboxes/inbox')']'));
      

      【讨论】:

      • 你真的测试过这个吗?它似乎有一些嵌套的引用问题。此外,虽然这可能在技术上回答问题,但不鼓励仅使用代码的答案,因为您应该为您的答案提供一些解释/上下文。
      • 您能否解释一下您的答案如何解决问题中的问题?仅代码的答案不是很有用,特别是对于偶然发现这篇文章的更多读者。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2018-04-21
      • 2015-03-10
      • 1970-01-01
      • 2018-01-11
      相关资源
      最近更新 更多