量角器可以使用两个" by选择一个元素。"声明?

时间:2015-01-06 22:18:32

标签: angularjs selenium-webdriver protractor

我的团队的网络应用程序有几个具有相同绑定的元素和几个具有相同CSS的元素。在我的量角器测试中,我需要使用by.css和by.binding来捕获我正在寻找的元素。

以下是Angular标记的示例部分:

<!-- eiHand -->
<td ng-show="assessment.type === 'EI'">{{assessment.ratedDate || assessment.scores.eiHand[0].ratedDate | date:'MMMM d, y h:mm a'}}</td>
<td ng-show="assessment.type === 'EI'">{{assessment.raterName || assessment.scores.eiHand[0].rater}}</td>
<td ng-show="assessment.type === 'EI'">{{assessment.averageScore * 100 | number:0}}</td>
<!-- lsa -->
<td ng-show="assessment.type === 'LSA'">{{assessment.ratedDate || assessment.scores.lsa[0].ratedDate | date:'MMMM d, y h:mm a'}}</td>
<td ng-show="assessment.type === 'LSA'">{{assessment.raterName || assessment.scores.lsa[0].rater}}</td>
<td ng-show="assessment.type === 'LSA'">{{assessment.averageScore | number:1}}</td>

浏览器生成的HTML如下所示:

<!-- eiHand -->
<td ng-show="assessment.type === 'EI'" class="ng-binding ng-hide"></td>
<td ng-show="assessment.type === 'EI'" class="ng-binding ng-hide"></td>
<td ng-show="assessment.type === 'EI'" class="ng-binding ng-hide">500</td>
<!-- lsa -->
<td ng-show="assessment.type === 'LSA'" class="ng-binding">December 1, 2013 5:00 AM</td>
<td ng-show="assessment.type === 'LSA'" class="ng-binding">John Doe</td>
<td ng-show="assessment.type === 'LSA'" class="ng-binding">5.0</td>

我想选择具有绑定assessment.raterName和CSS ng-show="assessment.type === 'LSA'"的元素,除非LSA是不可见的并且EI是可见的,在这种情况下我将使用另一个assessment.type。我知道如何单独进行其中任何一项,但我不确定如何将两者都归零。

我已尝试使用element(by.css([the_table])).all(by.binding([see above])).element(by.css([see above])),但收到错误Object [object Object] has no method 'element'

我也尝试了element(by.css([the_table])).all(by.binding([see above])).get([a numerical expression based on the value of the assessment.type variable]),但它提供了错误Object 2000 has no method 'apply'

我确信这是一个优雅的解决方案,但我不知道它是什么。

难看的解决方案

我现在使用的是element(by.css([the_table])).element(by.binding('assessment.scores.' + (assessmentType == "LSA" ? "lsa" : "eiHand") + '[0].rater'))。它适用于这种特定情况,但没有回答更广泛的问题,因此我不会将其作为答案发布。

0 个答案:

没有答案