按照这个例子:Protractor get element by model in repeater array,我遇到了一个蠢货。我想将输入值发送到转发器内的元素。希望这是一个简单的解决方案!
我的HTML看起来与此类似。主要区别是“帖子”与“用户。邮件”。
<tr ng-repeat="post in user.posts">
<td ng-click="activePost(post)" class="title">{{post.title}}</td>
<td><button class="btn btn-danger" ng-click="delete(post)">Delete</button></td>
<td><input type="text" ng-model="post.subtitle"
id="{{post.id}}" /></td>
</tr>
然后按照这个例子,我写了这样的东西:
element.all(by.repeater('post in user.posts')).then(function(posts) {
var activePost = posts[0].element(by.model('post.subtitle'));
activePost.sendKeys('My post');
});
量角器测试在“activePost.sendKeys('我的帖子')”失败,出现以下错误:
NoSuchElementError: No element found using locator:
by.model("post.subtitle").
Stacktrace:
NoSuchElementError: No element found using locator: by.model("post.subtitle")
at Array.forEach (native) Error
at /Users/.../e2e/spec.js:51:17
at Array.forEach (native) From: Task: Asynchronous test function: it() Error
at [object Object].<anonymous> (/Users/.../e2e/spec.js:32:3)
at Object.<anonymous> (/Users/.../e2e/spec.js:2:1)
有人会对我可以尝试的内容或不同的方式进行思考吗?谢谢!
答案:量角器抛出的错误与转发器完全无关,而是与视图中缺少的结束div标签无关。这不是偶然的奇怪吗?去搞清楚。
答案 0 :(得分:0)
此处无需解决承诺,只需链element
和element.all()
:
var elm = element.all(by.repeater('post in user.posts')).first().element(by.model('post.subtitle'));
elm.sendKeys('My post');
请注意,我在这里使用first()
。
请注意,一个简单的by.tagName()
定位器也适用于此处:
var elm = element.all(by.repeater('post in user.posts')).first().element(by.tagName('input'));
elm.sendKeys('My post');