为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium PageFactory.InitElements如何工作

Selenium PageFactory.InitElements如何工作

C#
一只名叫tom的猫 2021-03-30 17:18:45
我正在使用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异常等。


查看完整回答
反对 回复 2021-04-10
  • 2 回答
  • 0 关注
  • 314 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信