2016-08-01 124 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