What is the use of Annotation “@FindBy”?

偶尔善良 提交于 2019-12-18 03:35:17

问题


Can anyone explain me about Annotation @FindBy in WebDriver?

Where and why it is used?


回答1:


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.




回答2:


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.




回答3:


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.




回答4:


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`


来源:https://stackoverflow.com/questions/9028757/what-is-the-use-of-annotation-findby

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!