What is the use of Annotation “@FindBy”?

早过忘川 提交于 2019-11-29 02:05:57
el roso

It's to assist with the construction of locators when using the Page Factory to support your Page Objects

PageFactory Wiki Page

However I'm discovering that I find it more useful to store your locators as By objects rather than WebElements as they are more flexible and you tend to avoid running into the StaleElementException.

By myLocator = By.id("idOfYourElement")

instead of

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

This way you can also use your locators when asserting the absence of an element or use it in the ExpectedConditions helpers.

Can I cite API-documentation?

Used to mark a field on a Page Object to indicate an alternative mechanism for locating the element or a list of elements. Used in conjunction with PageFactory#proxyElement this allows users to quickly and easily create PageObjects.

So, if you use PageObject pattern then you adds this annotation to class members and WebDriver automatically inject appropriate WebElements to it during object initialization (when PageFactory.initElements() called).

I strongly recommend to follow this link and read about PageObject pattern and @FindBy annotations usage with more examples.

kamal

You can also use Pagefactory, and have something like:

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

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

Now, as for How., you can have:

  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. class

Or you can use your own DOM Search plus Xpath, that would be outside of WebDriver API , but it should work.

With the help of PageFactory class, we use annotations @FindBy to find WebElements. We use initElements method to initialize web elements. @FindBy can accept tagName, partialLinkText, name, linkText, id, css, className, xpath as attributes.

The @FindBy annotation locates one or more WebElements using a single criterion. For example, to identify all elements that have the same class attribute, we could use the following identification:

@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!