11

任何人都可以向我解释一下 Annotation @FindByinWebDriver吗?

在哪里以及为什么使用它?

4

4 回答 4

16

在使用 Page Factory 支持您的 Page Objects 时协助构建定位器

PageFactory 维基页面

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

By myLocator = By.id("idOfYourElement")

代替

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

这样,您还可以在断言不存在元素时使用定位器或在 ExpectedConditions 帮助器中使用它。

于 2012-02-04T08:09:02.547 回答
11

我可以引用API 文档吗?

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

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

我强烈建议您关注此链接并通过更多示例了解PageObject模式和@FindBy注释的使用。

于 2012-01-27T04:07:47.803 回答
3

您还可以使用Pagefactory,并有类似的东西:

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

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

现在,至于 How.,您可以拥有:

  1. 班级名称
  2. CSS
  3. ID
  4. ID_OR_NAME
  5. LINK_TEXT
  6. 姓名
  7. PARTIAL_LINK_TEXT
  8. 标签名
  9. 路径
  10. 班级

或者您可以使用自己的 DOM Search 和 Xpath,这将在 WebDriver API 之外,但它应该可以工作。

于 2012-09-20T11:56:23.760 回答
0

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

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

@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`
于 2018-03-27T13:43:45.240 回答