哪里使用FindBy注释导致initElements方法

时间:2015-04-14 12:44:58

标签: testing webdriver pageobjects findby

我尝试使用网页对象模型,但我不确定如何正确初始化元素。

请参阅我的测试类的示例:

public class TestSuiteSubscriber extends TestInitializer {
Menu menuPage = new Menu(driver);
SubscribersSearchForm searchForm = new SubscribersSearchForm(driver);


@Test     (priority = 1)
public void findByOldNumber(){
    menuPage = PageFactory.initElements(driver, Menu.class);
    menuPage.openSubscribers();
    searchForm = PageFactory.initElements(driver, SubscribersSearchForm.class);
    searchForm.subscriberNumber.sendKeys("100001");

}

如果我在页面类的构造函数中导致.initElements,我会得到NullPointerException。据我了解,这是因为它们在页面加载之前已经初始化。是否有一种正确的方法可以避免在测试方法中直接导致.initElements方法,从而使测试更具可读性?

1 个答案:

答案 0 :(得分:0)

使用 PageObject 实例化元素的一种常见做法是使用 BaseClass 并在其他页面类中继承该元素。因此,每次实例化 PageObject 时,initElements都会被实例化。我有GitHub我用 TestNG 实现了这个概念。看看这对你有帮助。

在你的情况下TestInitializer应该有initElements我相信。该行应位于TestInitializer构造函数

PageFactory.initElements(driver, this);