我有一些(Angular JS模板)HTML如下:
<div class="data-handler-container">
<div class="row">
<div class="data-handler" ng-if="dataController.showDistance()">
<p>{{ 'Item Count' | translate}}
<p class="metric">{{dataController.project.item_total | converter:dataController.user.unit | number: 6}}<span class="unit">{{dataController.user.unit}}</span></p>
</div>
<div class="data-handler">
<p>{{ 'Total Time' | translate}}</p>
<p class="metric">{{dataController.project.time_total | format:'time':'hh:mm:ss'}}</p>
</div>
</div>
</div>
我现在正在使用量角器编写e2e测试。我需要确定度量元素,以便我可以访问测试中的值。
我不认为在这种情况下我可以简单地使用class
,因为第一个元素在ng-if
中,所以可能不在那里。我必须按类识别,然后在我的测试中编写一些逻辑来计算返回数组中的项目 - 并根据计数匹配它们。在这个例子中,它不会太复杂,但在其他情况下它会很笨拙。
我可以选择具有特定值的项目之后的段落 - 例如Total Time
,这样可行,但似乎不太理想。如果另一个页面元素具有相同的文本怎么办 - 我的测试需要再次更新。
据我所知,我无法按模型识别项目,因为它们是通过过滤器传递的,而我并不想指定所有过滤器等......作为选择器的一部分。< / p>
答案 0 :(得分:6)
- 是否有理想的方法来确定测试指标?
醇>
我会使用by.binding定位器作为部分匹配:
var itemTotalElm = element(by.binding('dataController.project.item_total'));
var timeTotalElm = element(by.binding('dataController.project.time_total'));
- 如果没有理想的方式,没有操纵HTML的最佳方法是什么?
醇>
我发现的最佳方法是使用Andres Chrome扩展程序工具elementor。您会惊讶地发现该工具可以帮助您识别最佳定位器,甚至可以显示与当前页面匹配的总页数。
- 更改HTML的最佳方法是什么?
醇>
我认为,只要他遵循一些良好的做法,例如,应该能够并鼓励QA自动化测试以更新HTML源代码。添加以e2e-
开头的html类名,以便开发人员知道选择器的用途,例如
<p class="metric e2e-item_total">
然后你可以用
来定位它var itemTotalElm = $('.metric.e2e-item_total');
- 通常可以改变HTML以使测试更容易识别组件吗?
醇>
在3 plus中回答说,只要没有好的选择器,只应更新基础HTML,所以在这种情况下by.binding
就足够了。
如果您希望在测试中添加逻辑,例如&#34;如果总项目测试超过5个,那么其他测试&#34;这可能表示您的方案测试数据控制不佳。如果您无法确定当前正在测试的页面的状态,那么您如何通过端到端可靠地找到错误?我的意思是,如果您对当前状态作出反应意味着您事先没有正确验证它,那么您可能会错过正确播种测试数据,这也有助于以后再次发现错误。