2012-12-14 33 views
1

举例来说,假设我有课的粉丝专页,与此注释@FindBy不关心,如果该元素是不存在的,当我打电话initElements

@FindBy(how = How.ID, using = "ctl00__lvph_Add") 
private WebElement _AddFanButton; 

,然后在我的测试代码我说

fanPage = homePage.GoToFanPage() 

这确实现在

return PageFactory.initElements(driver, CC_VendorStatisticsMetadata.class); 

如果我的注释是不正确(让我们说这应该是ctl00_lvph_AddFan),我希望我的呼吁initElements失败。但是,它并没有,它只是返回一个FanPage对象给我。它只会失败,如果我尝试使用_AddFanButton。

如何让PageFactory从一开始就查找我的注释?

回答

5

你没有。 PageFactory做延迟初始化,这就是它的设计。

考虑一个页面对象,其中某些元素的,直到采取一些行动不存在于页面上。由于页面对象旨在封装业务逻辑而不仅仅是页面上的元素,因此这是完全合乎逻辑的场景。在这种情况下,您的通话initElements()将在页面对象初始化失败,每一次,而不是给你调用业务逻辑方法会导致元件的机会就出现。

这有可能是PageFactory不会为你工作,如果这是你的测试框架的要求。在这种情况下,你会很好地构建你自己的实现。

相关问题