如何使用量角器选择单个元素



我是量角器的新手,并且有一个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', '监视列表104', '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 来获取这个元素。
我已经尝试了其他返回 nil 的事情,例如

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

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

返回错误。

现在考虑到这一点,我已经成功地选择了警报元素,因为它是第一个使用以下内容的面板:

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

但是重复上面的代码并将"警报"更改为"收件箱"只是继续选择警报手风琴而不是收件箱手风琴。建议? 抱歉阅读时间过长。

您可以使用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

var alerts = element(by.xpath('//a[@ng-click='toggleNav('/inboxes/alerts')']'));
var inbox = element(by.xpath('//a[@ng-click='toggleNav('/inboxes/inbox')']'));

最新更新