Selenium webdriver Selenium:@FindBy注释和initElemets()方法

Selenium webdriver Selenium:@FindBy注释和initElemets()方法,selenium-webdriver,page-factory,Selenium Webdriver,Page Factory,我对Selenium和StackOverflow是新手 如果有任何错误,我提前道歉 我的问题是: @FindBy()。它基本上将默认的null值更改为使用Proxy的接口实现。它还提供了WebElement的延迟实例化,这意味着只有在需要的时候,当您调用对WebElement的操作时,才会找到(查找?) 更深入地说: initElements接受Object或Class作为参数,并从中创建对象。这样,PageFactory获取类中的所有字段,验证其中是否有属于WebElement或List类型的

我对Selenium和StackOverflow是新手

如果有任何错误,我提前道歉

我的问题是:


@FindBy()。它基本上将默认的
null
值更改为使用
Proxy
的接口实现。它还提供了
WebElement
的延迟实例化,这意味着只有在需要的时候,当您调用对WebElement的操作时,才会找到(查找?)

更深入地说:
initElements
接受
Object
Class
作为参数,并从中创建对象。这样,
PageFactory
获取类中的所有字段,验证其中是否有属于
WebElement
或List类型的字段,并对其进行初始化

如果未使用
@FindBy
注释
WebElement
,则
PageFactory
尝试通过变量名创建选择器。像这样的
WebElement用户名
可能在没有注释的情况下实际工作

如果用
@FindBy
注释
WebElement
,则创建
By
对象并将其连接到
WebElement
以供以后使用。这部分只是一个假设

然后,创建
WebElement
的实例。因为它是一个接口,所以不能用反射API直接实例化。代理用于处理
WebElement
的创建
PageFactory
使用反射,使用新创建的WebElements实例初始化所提供页面对象中的元素

WebDriver
WebElement
都实现了界面
SearchContext
,它还告诉
WebDriver
如何查找元素。它是在整个页面的源代码还是范围被缩减到特定的
WebElement
。这就是为什么我们可以通过像这样的其他元素来搜索元素:
element.findElement(By.id(“用户名”))

希望我能解释一下