【发布时间】:2020-08-14 12:46:48
【问题描述】:
所以我有一个稍微复杂一点的问题。
是否可以将 C# selenium [FindsBy(.....)] 与某种自定义初始化程序一起使用?
我知道 PageFactory 已被删除,无论哪种方式,它都不会像我想要的那样工作,因为我感兴趣的是让初始化程序在使用元素时完成它的工作。
例如:
在页面对象中我有一些定位器
...
[FindsBy(How = How.Class, Using = "class1"))]
private IWebElement someElement { get; set;}
[FindsBy(How = How.Class, Using = "class2", Priority = 0))]
[FindsBy(How = How.XPATH, Using = "some_xpath", Priority = 1))]
private IWebElement someElement2 { get; set;}
...
现在通常使用PageFactory,您将在页面的构造函数中使用初始化程序,但我感兴趣的是初始化这些对象并在使用元素时执行驱动程序查找。
例如:
...
//In a test or method .....
someElement2.Click() // and have this element initialized and found right here before the click and every time it is used to be re found
...
为此,您至少需要事先初始化或注入驱动程序,因此我不确定如何做到这一点。
现在我知道您可以使用其他方法(例如委托)来实现这一点,但它们不会像这样干净和直观,而且我知道 PageFactory 具有更多功能,例如缓存元素,但我没有对此感兴趣。
【问题讨论】:
-
我要指出的是,PageFactory 架构实际上在调用使用该属性装饰的成员之前并没有定位元素。使用
InitElements方法没有执行所有元素的查找;它只是设置管道以在访问页面对象类的成员时执行查找。
标签: c# selenium selenium-webdriver .net-core