2012-01-27 55 views

回答

11

我可以引用API-documentation吗?

用于标记上的页面对象的字段来指示替代机制用于定位元件或元素的列表。与PageFactory#proxyElement结合使用可以让用户快速轻松地创建PageObjects。

所以,如果你使用PageObject模式则增加了此批注类成员和WebDriver对象初始化过程中自动注入适当WebElement s到它(当叫PageFactory.initElements())。

我强烈建议使用此链接并阅读有关PageObject pattern and @FindBy annotations usage的更多示例。

+0

感谢您的回复。所以,我有另一个问题......它会被用于元素动态地改变他们的定位器? – mra419 2012-01-27 15:42:49

+0

@ user1163375你说“动态地改变它们的定位器”是什么意思? – 2012-01-30 03:55:16

+0

我的理解是“@FindBy”当元素ID在Web应用程序中动态更改时使用注释....如果错误,请纠正错误。 – mra419 2012-01-30 06:44:05

11

它来帮助定位器的建设使用页面出厂设置时,支持你的页面对象

PageFactory Wiki Page

但是我发现,我觉得它更有助于你的定位器存储为由对象,而而不是WebElements,因为它们更加灵活,并且您倾向于避免遇到StaleElementException。

By myLocator = By.id("idOfYourElement") 

代替

@FindBy(id = "idOfYourElement") 
WebElement myLocator; 

这样断言缺少的元素时,你也可以用你的定位器或ExpectedConditions助手使用它。

+0

我很难理解为什么有人会使用@FindBy而不是By对象。 – stuart 2015-10-02 03:01:11

+0

@elroso在删除注释时,我可以使用PageFactory.initElements(驱动程序,页面)方法吗?谢谢 – 2016-02-08 22:20:44

+0

使用By而不是@FindBy的好解释。谢谢 :) – 2016-04-15 15:28:09

3

您还可以使用Pagefactory,并有类似:现在

@FindBy(how = How.NAME, using = "logonName") 
private WebElement logonNameField; 

@FindBy(how = How.NAME, using = "password") 
private WebElement passwordField; 

,至于怎么,你可以有:

  1. CLASS_NAME
  2. CSS
  3. ID
  4. ID_OR_NAME
  5. LINK_TEXT
  6. NAME
  7. PARTIAL_LINK_TEXT
  8. TAG_NAME
  9. XPATH

或者您可以使用自己的DOM搜索加了XPath,这将是webdriver的API之外,但它应该工作。