Page 296 - AngularJS权威教程
P. 296
276 第 19 章 测试
element(by.binding('user.name'));
});
要把这个测试丢到node调试器里运行,可以在调试模式下运行测试:
$ protractor debug conf.js
在调试模式下运行Protractor时,我们得到的好处是让浏览器的执行停止,而且Protractor提供
的每个客户端脚本在控制台中都可用。
要对Protractor的客户端脚本进行访问,我们可以用Protractor插入的window.clientSideScripts
对象来调用它们。
2. element
element函数帮助我们找到正在测试的页面上的元素,并且与它们交互。
记住, element 的 返 回值并不是一 个 DOM元素 ,它是 ElementFinder 的 一个实例,
ElementFinder是一个通过webdriver运作的对象。可以用这个对象的方法,如sendKeys和click,
来跟页面上的对象交互。
完整的API太多了,更多的文档可以在Github上的文档页找到:https://github.com/angular/
protractor/blob/master/docs/api.md
3. by
这个选项是元素定位策略的集合。可以通过CSS选择器、ID或者甚至绑定了ng-model的属性
用它来查找元素。
by.binding 利用这个选项能可以查找使用ng-bind或者模板标记{{ }}绑定的元素,比如:
<h2 ng-bind="person.name"></h2>
我们可以在测试中使用下面这句来定位<h2>元素:
element(by.binding('person.name'))
by.model 可以使用by.model来搜索使用ng-model绑定的输入元素,比如:
<div my-directive ng-model="user.name"></div>
可以使用这句来定位<div>指令:
element(by.model('user.name'))
by.repeater 可以搜索包含了ng-repeat指令的元素。
比如,如果我们在一个ng-repeat中循环一个用户列表:
<ul>
<li ng-repeat="user in users"></li>
</ul>
可以定位<li>指令,用下面的方式使用by.repeater来获取一个行的列表:
element.all(by.repeater('user in users'))