2016-06-01 7 views
0

В настоящее время наша команда пишет тесты с использованием Protractor для нашего программного проекта, написанного в AngularJS. Для конкретного теста мы должны извлечь значения из раскрывающегося списка, чтобы проверить, действительно ли сохранено предыдущее сохраненное значение.getText() на элементах ng-repeat возвращает пустую строку

Код выглядит следующим образом:

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

Кажется, вам сначала нужно открыть раскрывающееся меню, прежде чем вы сможете получить любые значения. Это укрепило нашу проблему. Окончательный код в транспортирторе:

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); 
     }); 
Смежные вопросы