getText () для элементов ng-repeat возвращает пустую строку

0

В настоящее время наша команда пишет тесты с помощью 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), и мы даже можем увидеть элемент после завершения теста, но у нас все еще возникают проблемы с получением имен для этих записей.

Любая помощь приветствуется!

Теги:
testing
protractor

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);
        });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню