selenium-webdriver - Selenium:@FindBy 注解和 initElemets() 方法
问题描述
我是 Selenium 和 StackOverflow 的新手。
如果有任何错误,我提前道歉。
我的问题是:
@FindBy()
注释如何在内部工作以及为什么initElemets()
需要方法?
解决方案
该方法使用 Java 反射 APIinitElements()
初始化所有WebElement
和字段。List<WebElement>
它基本上将默认null
值更改为使用Proxy
. 它还提供了一种懒惰的实例化WebElement
方式——只有在需要时才找到(寻找?)WebElements——当你对它们调用操作时。
更深入地:
initElements
接受Object
orClass<?>
作为参数并从中创建一个对象。有了它,PageFactory
获取类中的所有字段,验证它们中的任何一个是否是类型WebElement
或 List 并初始化它们。
如果WebElement
未使用 then 注释,@FindBy
则PageFactory
尝试通过变量名创建选择器。像这样的东西WebElement username
实际上可能在没有注释的情况下工作。
如果WebElement
用@FindBy
then注释,则By
创建对象并连接到 以WebElement
供以后使用。这部分只是一个假设。
然后,WebElement
创建实例。因为它是一个接口,所以不能直接用 Reflection API 实例化。代理用于处理WebElement
. PageFactory
使用反射使用新创建的 WebElements 实例初始化提供的页面对象中的元素。
两者,WebDriver
并WebElement
实现接口SearchContext
,该接口还告诉WebDriver
如何查找元素。是在整个页面源还是范围缩小到特定的WebElement
。这就是为什么我们可以像这样通过其他元素搜索元素element.findElement(By.id("username"))
:
希望我解释一下!
推荐阅读
- dynamic - 重写规则以修改动态 url
- node.js - Bot 部署失败,出现 500 服务器错误
- python - 拆分数据集以按行进行训练和测试
- xrp - 格式错误:XRP 到 XRP 不允许限制质量
- sql - SQL Server 查询:从 1 列获取工作小时数
- c# - 如何在datagridview中动态获取同一列中每个按钮的不同文本
- react-native - expo react-native 中的捆绑工作流
- postgresql - PostgreSQL - 使用窗口函数时如何知道我在哪个分区?
- java - 在 jboss 中部署 Java/JEE .war 时防止覆盖某些文件夹/文件
- django - 努力通过 Celery Beat on Digital Ocean 将对象保存到 Django 数据库