项目上的getText()ng-repeat返回空字符串

时间:2016-06-01 13:40:54

标签: javascript html angularjs testing protractor

目前,我们的团队正在使用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),我们甚至可以在测试结束后看到元素,但是我们仍然无法检索这些条目的名称。

感谢任何帮助!

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