量角器定位器之间的差异

时间:2014-06-30 21:30:06

标签: protractor

我在这里查看了量角器指南:https://github.com/angular/protractor/blob/master/docs/api.md#api-protractor

它说为了找到一个元素,我可以使用

var temp = element(by.css("someclass"));

or alternatively

var temp1 = ptor.findElement(protractor.By.css('someclass'))

何时使用哪种定位器?有人可以澄清

2 个答案:

答案 0 :(得分:5)

他们是一样的。 element是首选语法,因为它更短,因为您可以链接定位器并使用一些花哨的量角器功能。 Protractor扩展了webdriver api,这就是为什么你可以使用你在普通webdriver中使用的相同功能。

例如,以下表达式是等效的:

ptor.findElement(by.css('.foo')).getText()

element(by.css('.foo')).getText()

$('.foo').getText()

要查找多个元素,请使用:

ptor.findElements(by.css('.foo'))

element.all(by.css('.foo'))

$$('.foo')

api.md文档中有很多例子:

https://github.com/angular/protractor/blob/master/docs/api.md#elementfinderprototypeelement

答案 1 :(得分:2)

ptor.findElementelement之间的区别在于第一个应该使用没有 Angular的页面,而第二个用于 Angular的页面 。这与量角器syncs with Angular的方式有关。第一个返回WebDriver WebElement,第二个返回一个Protractor ElementFinder

但是,要直接解决您的问题,by.cssprotractor.By.css返回的定位器之间无差异。 两者是等效。全局by对象引用的对象与protractor.By引用的对象相同。

来自量角器' runner.js

global.by = global.By = protractor.By;

API有两个版本。旧版本使用protractor.By,而新版本使用by。您可能经常看到旧式,但如果您有疑问,可以使用新款式,并确保不会发生任何意外情况。