目前,我们的团队正在使用Protractor为AngularJS编写的软件项目编写测试。 对于特定测试,我们必须从下拉按钮检索值,以查看是否实际保存了以前保存的值。
代码如下:
this.Then(/^the profile is saved under the name (.*)$/, function (presetName, callback) {
element.all(by.repeater('preset in dropDown.presets')).each(function(element, index){
console.log("Index: ", index);
element.getText().then(function(name){
console.log("Text of element: ", name); //name is empty string
});
});
callback("Error, presetName was not found!");
});
相应的HTML:
<div class="btn-group" uib-dropdown>
<button id="presetList" type="button" class="btn btn-primary" uib-dropdown-toggle
style="min-width:100px" ng-disabled="presets.length == 0">
{{dropDown.selected ? dropDown.selected : ('PRESETS.SELECT_TEXT' | translate)}}
<span class="caret"></span>
</button>
<ul uib-dropdown-menu role="menu" class="listOfPresets">
<li role="menuitem" ng-repeat="preset in dropDown.presets">
<a href ng-click="setSelected(preset)">
{{preset}}
</a>
</li>
</ul>
</div>
正如我们在之前的帖子(here)中已经看到的那样,这不起作用。
我们已尝试element.getAttribute('value')
,但这也不起作用,尽管FAQ会建议这样做。
我们确定元素存在(计数打印1),我们甚至可以在测试结束后看到元素,但是我们仍然无法检索这些条目的名称。
感谢任何帮助!
答案 0 :(得分:0)
在您检索任何值之前,您似乎首先需要打开下拉列表。这解决了我们的问题。 量角器中的最终代码:
this.Then(/^the profile is saved under the name (.*)$/, function (presetName, callback) {
world.pressButtonById('presetDropdownToggle');
var presetOptions = element.all(by.id('presetOption'));
var presetNames = presetOptions
.map(function (preset, index) {
return preset.getText();
});
expect(presetNames).to.eventually.include(presetName).and.notify(callback);
});