【问题标题】:Open a select2 select box in angularjs E2E test在angularjs E2E测试中打开一个select2选择框
【发布时间】:2013-06-08 02:51:53
【问题描述】:

我正在尝试 E2E 测试我的 angularjs 应用程序。它有一个 select2 选择框,其中填充了来自 API 的项目。此 select2 选择框具有将添加到搜索中的过滤器列表。

<input id="filter-select2" ui-select2="dataArray" ng-model="selected"/> 

我遇到的问题是我似乎无法在我正在进行的 E2E 测试中打开选择框。如果我加载应用程序,我可以在 Chrome Javascript 控制台中执行 $('#s2id_filter-select2').select2('open'); 以打开 select2 选择框。我也可以angular.element('#s2id_filter-select2').select2('open');

但如果我尝试在 E2E 测试中自己执行此操作,则元素似乎没有 .select2()

element('#s2id_filter-select2').select2('open');

我都试过了
element('#s2id_filter-select2').query(function (e, done) {
    e.select2('open');
    done();
});

在 E2E 测试中。我可以在后一个示例中调用.fadeOut() (element().query()),但不能调用.select2()

我尝试在 E2E 测试配置中包含 select2.js 和 angularui.js(我正在使用来自 angular-ui 的指令),但这并没有改变任何东西。

有没有人成功地从 E2E 测试中调用一些 jQuery 库,例如 select2?

我也想过跳过select2框,即直接设置“selected”模型,因为我有一个$watch会在filter select上更新应用程序,但我似乎找不到办法通过测试本身设置模型。

e2e 配置使用以下文件:

files = [
    ANGULAR_SCENARIO,
    ANGULAR_SCENARIO_ADAPTER,
    'tests/students/scenarios/*.scenario.js',
    'dev/students/js/script.js',
    'dev/students/js/*.js'
];

我尝试在 tests/ 和 dev/ 文件之前和之后都包含 select2、jQuery 和 angular-ui。

编辑:我可以使用input('selected').enter('sth'); 设置所选模型,但我似乎无法将其设置为模型。我可能需要为此编写一个自定义 DSL?

【问题讨论】:

    标签: jquery angularjs


    【解决方案1】:

    您确实可以使用自定义 DSL 在角度 e2e 测试中打开 select2 框。我不相信以下代码块,我在以下位置找到了它: How to execute jQuery from Angular e2e test scope?

    通过添加:

    angular.scenario.dsl('jQueryFunction', function() {
        return function(selector, functionName /*, args */) {
            var args = Array.prototype.slice.call(arguments, 2);
            return this.addFutureAction(functionName, function($window, $document, done) {
                var $ = $window.$; // jQuery inside the iframe
                var elem = $(selector);
                if (!elem.length) {
                    return done('Selector ' + selector + ' did not match any elements.');
                }
                done(null, elem[functionName].apply(elem, args));
            });
        };
    });
    

    到您的 e2e 测试文件的顶部,然后您可以打开一个 select2 框,如下所示:

    jQueryFunction('#s2id_roleselect', 'select2', 'open');
    

    将角色选择替换为您自己的 ID。所有功劳归功于用户 Jeroen V. 提供的 DSL。

    【讨论】:

    • 抱歉,回答晚了,在您回答之前不久,我就停止了这个项目的工作。不过,我现在只是有一些空闲时间,并决定尝试一下,它工作得很好。非常感谢!能够在代码中使用除了丑陋的变通方法之外的东西感觉很好。
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2017-05-09
    相关资源
    最近更新 更多