我是量角器的新手,并且有一个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')']'));