注释“@FindBy”有什么用?

时间:2012-01-27 03:50:49

标签: selenium-webdriver annotations webdriver findby

任何人都可以在@FindBy向我解释注释WebDriver吗?

使用它的地点和原因?

4 个答案:

答案 0 :(得分:14)

在使用Page Factory支持您的Page Objects

时,可以帮助构建定位器

PageFactory Wiki Page

然而,我发现我发现将定位器存储为By对象而不是WebElements更有用,因为它们更灵活,并且您倾向于避免遇到StaleElementException。

By myLocator = By.id("idOfYourElement")

而不是

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

通过这种方式,您也可以在声明缺少元素时使用定位器,或者在ExpectedConditions帮助器中使用它。

答案 1 :(得分:11)

我可以引用API-documentation吗?

  

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

因此,如果您使用PageObject模式,则将此注释添加到类成员中,WebDriver在对象初始化期间(当WebElement调用时自动向其注入适当的PageFactory.initElements() )。

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

答案 2 :(得分:3)

您也可以使用Pagefactory,并使用以下内容:

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

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

现在,关于How。,你可以:

  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
  10. 或者您可以使用自己的DOM Search和Xpath,它们可以在WebDriver API之外,但它应该可以使用。

答案 3 :(得分:0)

在PageFactory类的帮助下,我们使用注释@FindBy来查找WebElements。我们使用initElements方法初始化Web元素。 @FindBy可以接受tagName,partialLinkText,name,linkText,id,css,className,xpath作为属性。

@FindBy注释使用单个条件定位一个或多个WebElements。例如,要识别具有相同类属性的所有元素,我们可以使用以下标识:

@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`