2016-08-01 131 views
1

我進入併爲每個下拉列表創建了id標籤。我嘗試創建一個循環來選擇每個製造商,而不必編寫300多行代碼,因爲在某些下拉列表中有很多選項。我嘗試過,並找不到一種方法。第二個下拉菜單例如是「source_manufacturer」。循環將選擇下拉列表中的所有元素

這是我的嘗試:

var expected = ['COMFORT-AIRE', 'Daewoo', 'GE']; 
var els = element.all(by.id('source_manufacturer')); 
for (var i = 0; i < expected.length; ++i) { 
expect(els.get(i).getText()).toEqual(expected[i]); 
} 

下面是HTML代碼:

<select id="source_manufacturer" ng-class="{'btn btn-default' : !$root.isMobile.iOS()}" class="form-control ng-valid btn btn-default ng-not-empty ng-touched ng-dirty ng-valid-parse" ng-model="manufacturer" ng-options="m.name for m in manufacturers"> 

`<option selected="selected" value="object:439" label="COMFORT-AIRE">COMFORT-AIRE</option> 
.... 
<option value="object:443" label="Whirlpool">Whirlpool</option></select>` 

這是錯誤消息:失敗:索引超出界限。嘗試訪問索引爲1的元素,但只有1個元素匹配locator By(css selector,* [id =「source_manufacturer」])。我想測試是否每個人都可以被選中,並且它實際上是變化的。

期望顯示列表中的每個元素而不是一個單獨的元素。

這是我怎麼會去點擊列表中的每個元素:

所有的
element(by.id('source_manufacturer')).click(). 
    element(by.cssContainingText('option', 'GE')).click(); 
+0

你會得到更好的反應,如果你把你的代碼放到一個的jsfiddle。但是實際上沒有看到任何動作,看起來你是通過id獲得的,它的定義必須是唯一的,因此只會產生一個單一的元素。您需要遍歷子節點。 – Steve

+0

https://jsfiddle.net/5owyt0tt/由id選擇下拉是唯一的真實。必須有一種方法可以選擇下拉菜單中的每個選項。 – jmd1002

+1

我不確定您的意思是「選擇每個選項」,但是如果您的意思是您希望選擇所有選項,則必須首先將此「多個」屬性添加到選擇標記,使其成爲多選元素。其次,這段代碼會選擇所有這些代碼(我假設你使用的是jQuery,因爲這個問題有jQuery標籤) $('#source_manufacturer option')。each(function(){(this))。 attr('selected',true); }); 但是,那就是說,創建表單時只需設置所選屬性即可。也許我錯過了你想要完成的事情。 – Steve

回答

0

首先,你應該確保你確實有多個select元素與source_manufacturer ID。然後,您應該使用each()而不是常規循環。而且,我會用一個優雅的抽象在選擇選項結構建議here

var expected = ['COMFORT-AIRE', 'Daewoo', 'GE'] 
var selects = element.all(by.id('source_manufacturer')); 
selects.each(function (select, index) { 
    var selectWrapper = SelectWrapper(select); 
    selectWrapper.selectByPartialText(expected[index]); 

    expect(selectWrapper.getSelectedOptions().first().getText()).toEqual(expected[index]); 
}); 
+0

我創建了select-wrapper.js結構,並試圖實現你的建議。我收到以下錯誤:「失敗:無法讀取undefined」 – jmd1002

+0

@ jmd1002屬性'selectByPartialText',請檢查您是否已正確導入並實例化它。謝謝。 – alecxe