Какая польза от аннотации "@FindBy"?
Может ли кто-нибудь объяснить мне о аннотации @FindBy
в WebDriver
?
Где и почему это используется?
4 ответа
Это поможет в создании локаторов при использовании Page Factory для поддержки ваших объектов 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;
Теперь, что касается как., Вы можете иметь:
- CLASS_NAME
- CSS
- Я БЫ
- ID_OR_NAME
- LINK_TEXT
- НАЗВАНИЕ
- PARTIAL_LINK_TEXT
- НАЗВАНИЕ ТЭГА
- XPATH
- учебный класс
Или вы можете использовать свой собственный 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`