我正在使用Selenium Page工厂,并且我想对其进行某些扩展,但是由于它们是密封的,所以不能,因此我想编写自己的自定义逻辑。问题:PageFactory.InitElements如何工作,以便所有属性在使用它们时(而不是在调用此方法时)加载它们的值。所以,用一个例子来解释 //// Button on page load [FindsBy(How = How.CssSelector, Using = "#lst-ib")] public IWebElement Btn; //// Button redirecting to Page 2 [FindsBy(How = How.CssSelector, Using = "#lst-ib")] public IWebElement LinkBtn; ////Button on second page [FindsBy(How=How.CssSelector, Using = "#rso > div:nth-child(1) > div > div:nth-child(1) > div > div > h3 > a")] public IWebElement NewBtn;因此,其页面工厂的美妙之处在于,所有元素都已加载,但在使用时它们会转换为Webelements,因为如果所有属性在初始化时都分配了值,NewBtn属性将始终失败,如第2页所示。因此,他们可能会使用什么概念来初始化属性,以便在使用时分配它们,而不是在运行时分配它们,因此任何虚拟代码都将非常有用,希望您理解
2 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
创建页面对象时,“页面对象逻辑”(IMO,根据我的经验以及到目前为止对c#和selenium的了解),它期望元素映射中提到的所有元素都存在于DOM中。
如果您的NewBtn存在于圆顶中但被隐藏(并且在导航到第二页时可见,基本上是在该页面没有刷新且有一些ajax时可见),则这是因为元素映射将不具有处理元素时遇到任何问题。您只需要使用IF语句确保该元素可见,或添加一个等待(以查看您是否确实在第二页上)。
如果导航到第二页时刷新了页面,则只需使用重新初始化您的页面对象,new MyPageObject()
以便再次映射所有元素,以避免StaleElement和/或ElementNotFound异常等。
- 2 回答
- 0 关注
- 314 浏览
添加回答
举报
0/150
提交
取消