В настоящее время наша команда пишет тесты с помощью 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>
Как мы уже видели в предыдущих сообщениях (здесь), это не работает. Мы попробовали element.getAttribute('value')
но это тоже не сработает, хотя это предлагается в FAQ. Мы точно знаем, что элемент существует (подсчет отпечатков 1), и мы даже можем увидеть элемент после завершения теста, но у нас все еще возникают проблемы с получением имен для этих записей.
Любая помощь приветствуется!
Кажется, вам сначала нужно открыть раскрывающийся список, прежде чем вы сможете получить любые значения. Это укрепило нашу проблему. Окончательный код в Протрактор:
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);
});