最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get ng-model in ng-repeat with Protractor - Stack Overflow

programmeradmin3浏览0评论

How can I get the ng-model in ng-repeat with protractor ?

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

I use this, but without success :

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

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

I would like to pare :

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

How can I get the ng-model in ng-repeat with protractor ?

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

I use this, but without success :

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

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

I would like to pare :

result.forEach(function(entry) {
    if (entry.country_name === 'en') {       
        expect(entry.text (from ng-repeat)).to.eventually.equal(value)
    }
});
Share Improve this question edited Mar 31, 2016 at 12:07 Jérémie Chazelle asked Dec 16, 2015 at 17:46 Jérémie ChazelleJérémie Chazelle 1,8185 gold badges35 silver badges75 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 5

The .column() would only work for bindings, not the models.

In your case, use the 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
});

If you want to get the input values, use 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);
});

Answering additional question from a ment:

I have an array, without other fields from my ng-repeat, how can I pare "if (field.country_name === ""en") { expect(field.text).to.eventually.equal(value)}" ?

Use 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);
});;
发布评论

评论列表(0)

  1. 暂无评论