首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用量角器定位元素指令中的元素

使用量角器定位元素指令中的元素
EN

Stack Overflow用户
提问于 2015-04-26 02:56:55
回答 4查看 4.6K关注 0票数 18

考虑以下视图模型:

代码语言:javascript
复制
$scope.data = {};
$scope.data.person = {};
$scope.data.person.firstname = "";
$scope.data.person.lastname = "";
$scope.data.person.username = "";

和以下元素指令:

代码语言:javascript
复制
<custom-form-directive ng-model="data.person"></custom-form-directive>

它包含三个用于显示数据的输入标记。如何使用protractor通过定位ng-model="data.person"来填充输入字段

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-02 05:19:01

这取决于您如何从指令中的输入中获取数据。但是,在所有情况下,您都可以将element(<locator>)调用链接在一起以搜索指令的sub-elements

代码语言:javascript
复制
var directive = element(by.model('data.person'));
var subElement = directive.element(by.<something>);

如果您在指令本身中对每个输入使用ng-model,则可以执行以下操作:

代码语言:javascript
复制
var directive = element(by.model('data.person'));

// Assuming the inputs have attributes like `ng-model="firstname"` in the directive template
var firstnameInput = directive.element(by.model('firstname'));
var lastnameInput = directive.element(by.model('lastname'));
var usernameInput = directive.element(by.model('surnamname'));

然后在每次调用sendKeys

代码语言:javascript
复制
firstnameInput.sendKeys('Peter');
secondnameInput.sendKeys('Piper');
usernameInput.sendKeys('PickledPumpernickle');

如果您没有在指令模板中使用ng-model,则可以使用其他定位器查找子元素,如果需要,还可以使用get,并取决于它们在DOM中的顺序

代码语言:javascript
复制
var inputs = directive.element(by.css('input'));
var firstnameInput = inputs.get(0);
var secondnameInput = inputs.get(1);
var usernameInput = inputs.get(2);

但是,我怀疑如果在指令中指定了replace: true,上述方法都不会起作用,因为它依赖于DOM中具有ng-model属性的原始元素。

票数 6
EN

Stack Overflow用户

发布于 2015-05-08 06:19:13

这正是evaluate方法的用途:http://angular.github.io/protractor/#/api?view=ElementFinder.prototype.evaluate

代码语言:javascript
复制
element(by.model('data.person')).evaluate('data.person.firstname = "yourvaluehere"');

我假设通过“以模型为目标”,您希望更改控制器的值并让ng-model指令更新视图,而不是相反。

票数 5
EN

Stack Overflow用户

发布于 2015-04-26 07:30:55

我认为您想为您的custom-form-directive指令构建一个类似于"pageObject“(参见https://github.com/angular/protractor/blob/master/docs/page-objects.md)的东西。这个对象将理解指令如何映射到Protractor将理解的原语(例如,特定的输入字段)。它应该接受一个定位器,这样它的调用者就可以在页面上传递how to find指令,但对象应该处理之后的所有事情。

代码语言:javascript
复制
var object = new customFormDirectiveObject(by.model('data.person'));

根据您的指令的工作方式,您可以执行如下操作:

代码语言:javascript
复制
object.setName(first, last, user);

或者,如果它更动态,可能是这样的:

代码语言:javascript
复制
object.setName({firstname: first, lastname: last, username: user });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29869372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档