Какая польза от аннотации "@FindBy"? - PullRequest
9 голосов
/ 27 января 2012

Может кто-нибудь объяснить мне аннотацию @FindBy в WebDriver?

Где и почему это используется?

Ответы [ 4 ]

14 голосов
/ 04 февраля 2012

Это поможет в создании локаторов при использовании Page Factory для поддержки ваших объектов Page

PageFactory Wiki Page

Однако я обнаружил, что более полезно хранить ваши локаторы как объекты By, а не WebElements, так как они более гибкие, и вы склонны избегать использования StaleElementException.

By myLocator = By.id("idOfYourElement")

вместо

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

Таким образом, вы также можете использовать свои локаторы при утверждении об отсутствии элемента или использовать его в помощниках ExpectedConditions.

11 голосов
/ 27 января 2012

Могу ли я процитировать API-документацию ?

Используется для пометки поля на объекте страницы для обозначения альтернативного механизма определения местоположения элемента илисписок элементов.При использовании вместе с PageFactory#proxyElement это позволяет пользователям быстро и легко создавать объекты PageObject.

Итак, если вы используете шаблон PageObject, вы добавляете эту аннотацию к членам класса, а WebDriver автоматически добавляет соответствующиеWebElement s к нему во время инициализации объекта (когда PageFactory.initElements() вызывается).

Я настоятельно рекомендую перейти по этой ссылке и прочитать о шаблоне PageObject и использовании @FindBy аннотаций сбольше примеров.

3 голосов
/ 20 сентября 2012

Вы также можете использовать 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. ИМЯ
  7. PARTIAL_LINK_TEXT
  8. TAG_NAME
  9. XPATH
  10. класс

Или вы можете использовать свой собственный DOM Search плюс Xpath, который был бы вне API WebDriver, но он должен работать.

0 голосов
/ 27 марта 2018

С помощью класса PageFactory мы используем аннотации @FindBy для поиска WebElements.Мы используем метод initElements для инициализации веб-элементов.@FindBy может принимать атрибуты tagName ,partalLinkText, name, linkText, id, css, className, xpath.

Аннотация @FindBy находит один или несколько веб-элементов с использованием одного критерия.Например, чтобы идентифицировать все элементы с одинаковым атрибутом класса, мы могли бы использовать следующую идентификацию:

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