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

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

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

4 ответа

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

PageFactory Wiki Page

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

By myLocator = By.id("idOfYourElement")

вместо

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

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

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

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

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

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

Вы также можете использовать 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. Я БЫ
  4. ID_OR_NAME
  5. LINK_TEXT
  6. НАЗВАНИЕ
  7. PARTIAL_LINK_TEXT
  8. НАЗВАНИЕ ТЭГА
  9. XPATH
  10. учебный класс

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

С помощью класса PageFactory мы используем аннотации @FindBy найти веб-элементы. Мы используем метод 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`
Другие вопросы по тегам