【问题标题】:Get ng-model in ng-repeat with Protractor使用量角器在 ng-repeat 中获取 ng-model
【发布时间】:2015-12-16 17:46:02
【问题描述】:

如何使用量角器在 ng-repeat 中获取 ng-model ?

<div ng-repeat="field in master.linker | orderBy:'country.name'">
    <div>
        <p> {{ field.country_name }} </p>
        <input ng-model="field.text">
    </div>
</div>

我用这个,但没有成功:

var result = element.all(by.repeater('field in master.linker').column('field.text'));

result.forEach(function(entry) {
    console.log(entry);
});

我想比较一下:

result.forEach(function(entry) {
    if (entry.country_name === 'en') {       
        expect(entry.text (from ng-repeat)).to.eventually.equal(value)
    }
});

【问题讨论】:

    标签: javascript angularjs protractor bdd end-to-end


    【解决方案1】:

    .column() 仅适用于 bindings,不适用于 models。

    在你的情况下,使用by.model() locator:

    var result = element.all(by.repeater('field in master.linker'));
    
    result.each(function(entry) {
        var input = entry.element(by.model("field.text"));
    
        // do smth with the input
    });
    

    如果要获取输入值,请使用map()

    var inputValues = result.map(function(entry) {
        return entry.element(by.model("field.text")).getAttribute("value");
    });
    
    // printing out input values
    inputValues.then(function (values) {
        console.log(values);
    });
    

    从评论中回答其他问题:

    我有一个数组,没有来自我的 ng-repeat 的其他字段,我如何比较 "if (field.country_name === ""en") { expect(field.text).to.eventually.equal(value )}" ?

    使用filter():

    var fields = element.all(by.repeater('field in master.linker'));
    fields.filter(function (field) {
        return field.element(by.binding("field.country_name")).getText().then(function (country) {
            return country === "en";
        });
    }).then(function (filteredFields) {
         var input = filteredFields[0].element(by.model("field.text"));
         expect(input.getAttribute("value")).to.eventually.equal(value);
    });;
    

    【讨论】:

    • 我有一个对象 ptor : { ptor_: { controlFlow: [Function],
    • @JérémieChazelle 如果你想打印出input,当然——你会得到它,因为这是一个ElementFinder 实例。你想要的输出是什么?输入的值?谢谢。
    • 我有一个数组,没有来自我的 ng-repeat 的其他字段,我如何比较 "if (field.country_name === ""en") { expect(field.text).to.最终.equal(value)}" ?
    • @JérémieChazelle 好的,更新了答案,希望对您有所帮助。
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多