我进去为每个下拉列表创建了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>`
这是错误消息:失败:索引越界。试图访问index:1处的元素,但只有1个元素匹配定位器By(css选择器,* [id =&#34; source_manufacturer&#34;])。我想测试是否可以选择每一个并且它实际上是否会发生变化。
预期显示列表中的每个元素而不是单个元素。
这就是我点击列表中每个元素的方法:
element(by.id('source_manufacturer')).click().
element(by.cssContainingText('option', 'GE')).click();
答案 0 :(得分:0)
首先,您应该确保您确实拥有多个select
个source_manufacturer
个元素的元素。然后,您应该使用each()
而不是常规for循环。而且,我会在建议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]);
});