Какая польза от аннотации @FindBy?

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

Где и для чего он используется?


person mra419    schedule 27.01.2012    source источник


Ответы (4)


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

Вики-страница PageFactory

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

By myLocator = By.id("idOfYourElement")

вместо

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

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

person el roso    schedule 04.02.2012
comment
У меня много проблем с пониманием того, почему кто-то может использовать @FindBy вместо объектов By. - person stuart; 02.10.2015
comment
@elroso Могу ли я использовать метод PageFactory.initElements(драйвер, страница) при удалении аннотаций? Спасибо - person Mario Galea; 09.02.2016
comment
Хорошее объяснение использования By вместо @FindBy. Спасибо :) - person Nathan Russell; 15.04.2016

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

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

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

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

person Slava Semushin    schedule 27.01.2012
comment
Спасибо за ваш ответ. Итак, у меня есть еще один вопрос... будет ли он использоваться для элементов, которые динамически меняют свои локаторы? - person mra419; 27.01.2012
comment
@user1163375 user1163375 Что вы имеете в виду, говоря changing their locators dynamically? - person Slava Semushin; 30.01.2012
comment
Как я понимаю, аннотация @FindBy используется, когда идентификаторы элементов динамически меняются в веб-приложении.... Поправьте меня, если я ошибаюсь. - person mra419; 30.01.2012
comment
@FindBy используется для получения доступа к элементу на веб-странице с известным идентификатором/именем/и т. д. Если идентификатор элемента создается автоматически, то как WebDriver узнает об этом? - person Slava Semushin; 30.01.2012
comment
@SlavaSemushin: не могли бы вы обновить ссылки, кажется, они не работают. Было бы здорово помочь. Спасибо - person Naman; 03.06.2016

Вы также можете использовать Pagefactory и иметь что-то вроде:

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

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

Теперь, что касается Как., вы можете иметь:

  1. CLASS_NAME
  2. CSS
  3. ID
  4. ID_OR_NAME
  5. LINK_TEXT
  6. НАЗВАНИЕ
  7. PARTIAL_LINK_TEXT
  8. НАЗВАНИЕ ТЭГА
  9. XPATH
  10. класс

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

person kamal    schedule 20.09.2012

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

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

@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`
person The man    schedule 27.03.2018
comment
отформатируйте кодовые имена, такие как @FindBy в ответе, правильно с помощью `` или ctrl+k - person Morse; 27.03.2018