2016-05-03 71 views
0
<div> 
       <label localize="{data: 'Name', suffix: ':'}">Name:</label> 
       <span class="required" ng-class="{'disabled': meterCreating}" input-control="{title: 'Meter', okCallback:setMeterName, value: meter.meterName, ss: 'meters'}"> 
        <span hs-placeholder="Enter Name" class="ng-binding"></span> 
       </span> 
      </div> 

找到元素的最佳方式是什么:placeholder =“Enter Name”?在量角器中查找元素

方案:找到使用片段的元素上面上的“Enter名称”框中

用户点击,另一个窗口弹出,用于输入一个名称。

回答

3

基于关闭该HTML,我可以看到最清晰的方式是CSS链接:

element(by.css('span.required span.ng-binding'))(通常只span.ng-binding,但我很怀疑这是唯一我也怀疑span.required span.ng-binding是独一无二的无论是。)

还有很多其他的选择,但他们不会很漂亮,因为他们会是类似的链条。

element(by.cssContainingText('label', 'Name:')).element(by.css('span > span'));

element(by.css('div label span.ng-binding'))等。

我建议你问开发商为更好地定位器(具体的ID),它使JavaScript的方式更容易。不幸的是,我不认为你能够通过HTML属性找到这个元素,这是我最喜欢的方式之一。它会看起来像这样:

element(by.css('span[placeholder=Enter Name]')) - 但我敢肯定,将为无效的定位器抛出一个错误。它接受大多数“标准”的HTML属性,如value,option,style等等......

+0

@ Gunderson,你的怀疑是对的。该元素没有根据您的建议找到。 (找不到元素)... 找到量角器中的元素的最佳定位器,开发人员更改可能性较小,因此我们将拥有稳定的测试用例和较少的维护? – Kevin

+0

@Kevin'id'是迄今为止最好的,因为它是独一无二的。 Xpath是最糟糕的,因为它具有很高的维护和运行时间。在我看来,任何内容('css','model'等)都是个人偏好。 – Gunderson

+0

我告诉我的开发者,我不在乎'id'实际上叫什么名字,只要它在那里。即使它是'id =“spanPlaceHolderEnterName”' - 量角器会立即使用'element(by.id(...))'(并且没有像“找到多于一个元素...”的错误那样的问题) – Gunderson