使用 Protractor 在 ng-repeat 中获取 ng-model
Get ng-model in ng-repeat with Protractor
如何使用量角器在 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)
}
});
.column()
仅适用于 binding
s,不适用于 model
s。
在你的情况下,使用 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);
});
回答评论中的附加问题:
I have an array, without other fields from my ng-repeat, how can I compare "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);
});;
如何使用量角器在 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)
}
});
.column()
仅适用于 binding
s,不适用于 model
s。
在你的情况下,使用 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);
});
回答评论中的附加问题:
I have an array, without other fields from my ng-repeat, how can I compare "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);
});;