任何人都可以在@FindBy
向我解释注释WebDriver
吗?
使用它的地点和原因?
答案 0 :(得分:14)
在使用Page Factory支持您的Page Objects
时,可以帮助构建定位器然而,我发现我发现将定位器存储为By对象而不是WebElements更有用,因为它们更灵活,并且您倾向于避免遇到StaleElementException。
By myLocator = By.id("idOfYourElement")
而不是
@FindBy(id = "idOfYourElement")
WebElement myLocator;
通过这种方式,您也可以在声明缺少元素时使用定位器,或者在ExpectedConditions帮助器中使用它。
答案 1 :(得分:11)
我可以引用API-documentation吗?
用于标记页面对象上的字段,以指示用于查找元素的替代机制或元素列表。与
PageFactory#proxyElement
结合使用,这使用户可以快速轻松地创建PageObjects。
因此,如果您使用PageObject
模式,则将此注释添加到类成员中,WebDriver
在对象初始化期间(当WebElement
调用时自动向其注入适当的PageFactory.initElements()
)。
我强烈建议您关注此链接,并阅读有关PageObject
pattern and @FindBy
annotations usage的更多示例。
答案 2 :(得分:3)
您也可以使用Pagefactory,并使用以下内容:
@FindBy(how = How.NAME, using = "logonName")
private WebElement logonNameField;
@FindBy(how = How.NAME, using = "password")
private WebElement passwordField;
现在,关于How。,你可以:
或者您可以使用自己的DOM Search和Xpath,它们可以在WebDriver API之外,但它应该可以使用。
答案 3 :(得分:0)
在PageFactory类的帮助下,我们使用注释@FindBy
来查找WebElements。我们使用initElements方法初始化Web元素。 @FindBy
可以接受tagName,partialLinkText,name,linkText,id,css,className,xpath作为属性。
@FindBy
注释使用单个条件定位一个或多个WebElements。例如,要识别具有相同类属性的所有元素,我们可以使用以下标识:
@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`