Javascript 循环,该循环将选择dropdownlist中的所有元素

Javascript 循环,该循环将选择dropdownlist中的所有元素,javascript,html,angularjs,protractor,Javascript,Html,Angularjs,Protractor,我进去为每个下拉列表创建了id标签。我尝试创建一个循环来选择下拉列表中的每个制造商,而不必编写300多行代码,因为在一些下拉列表中有许多选项。我试过了,却找不到办法。例如,第二个下拉列表是“source_manufacturer” 这就是我所尝试的: var expected = ['COMFORT-AIRE', 'Daewoo', 'GE']; var els = element.all(by.id('source_manufacturer')); for (var i = 0; i <

我进去为每个下拉列表创建了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]);
}

首先,您应该确保确实有多个
select
元素具有
source\u-manufacturer
id。然后,您应该使用而不是常规for循环。而且,我会在建议的选择选项结构上使用优雅的抽象:


首先,您应该确保确实有多个
select
元素具有
source\u-manufacturer
id。然后,您应该使用而不是常规for循环。而且,我会在建议的选择选项结构上使用优雅的抽象:


如果将代码放入JSFIDLE,您将获得更好的响应。但是,在没有实际看到任何动作的情况下,它看起来像是通过id获取的,根据定义,id必须是唯一的,因此只能生成单个元素。您需要迭代子节点。按id选择唯一为true的下拉列表。必须有一种方法来选择下拉列表中的每个选项。我不确定“选择每个选项”是什么意思,但如果您的意思是希望选择所有选项,则必须首先将“多个”属性添加到select标记,使其成为多个选择元素。其次,这段代码将选择所有的(我假设您使用jQuery,因为这个问题有jQuery标记)$('source_manufacturer option').each(function(){$(this.attr('selected',true);});但也就是说,在创建表单时最好只设置所选属性。也许我完全错过了你想要做的事情。这个问题不应该有jQuery标签。这是一个特定于量角器的问题,具有特定于量角器的解决方案。如果将代码放入JSFIDLE,您会得到更好的回答。但是,在没有实际看到任何动作的情况下,它看起来像是通过id获取的,根据定义,id必须是唯一的,因此只能生成单个元素。您需要迭代子节点。按id选择唯一为true的下拉列表。必须有一种方法来选择下拉列表中的每个选项。我不确定“选择每个选项”是什么意思,但如果您的意思是希望选择所有选项,则必须首先将“多个”属性添加到select标记,使其成为多个选择元素。其次,这段代码将选择所有的(我假设您使用jQuery,因为这个问题有jQuery标记)$('source_manufacturer option').each(function(){$(this.attr('selected',true);});但也就是说,在创建表单时最好只设置所选属性。也许我完全错过了你想要做的事情。这个问题不应该有jQuery标签。这是一个特定于量角器的问题,具有特定于量角器的解决方案。我创建了select-wrapper.js结构,并尝试实现您的建议。我收到以下错误:“失败:无法读取未定义“@jmd1002”的属性“selectByPartialText”。请检查是否已正确导入并实例化该属性。谢谢。我创建了select-wrapper.js结构并尝试实现您的建议。我收到以下错误:“失败:无法读取未定义“@jmd1002”的属性“selectByPartialText”。请检查是否已正确导入并实例化该属性。谢谢
<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>`
    element(by.id('source_manufacturer')).click().
    element(by.cssContainingText('option', 'GE')).click();
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]);
});