2016-05-03 102 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