我可以为多个Web操作仅一次调用PageFactory实例吗?

时间:2019-01-28 14:40:38

标签: java selenium-webdriver page-factory

我对硒Java测试使用Pagefactory设计模式,并且一切正常。我想知道是否可以为多个操作仅调用一次PageFactory实例,而不是始终在同一方法中重复该实例。我有这样的东西:

private static BasePage basePage; //There is BasePage class somewhere that holds PageFactory elements
basePage = PageFactory.initElements(driver, BasePage.class); // PageFactory initialisation in the test class

public static void loginTest() throws InterruptedException {
     basePage.acceptButton.click();
     basePage.skipButton.click();
     basePage.loginButton.click();
}

每次执行操作时,我都会重复basePage。我在想Java是否有办法只调用一次basePage实例。我尝试过这样的事情:

basePage.acceptButton.click()
        .skipButton.click();
        .loginButton.click();

代码无法编译。有解决方法吗?还是在Java之外?

2 个答案:

答案 0 :(得分:1)

这完全取决于测试的设计方式,页面的内容以及您的体验结果。

我确实尝试设计测试,以便可以在多个测试中共享一个页面对象,而您只需要在类级别声明该页面对象变量即可。需要注意的是,您的测试步骤需要按预期的顺序运行。

通常来说,即使页面本身发生变化,它也可以正常工作,因为只有在您引用每个元素后,才能访问每个元素。但是,如果发现自己遇到了一个过时的元素异常,则最好强制重新初始化页面对象。

更新

我刚刚重新阅读了您的全部问题,并意识到我做了一个错误的假设。您要链接动作,而不是重新实例化页面对象。据我所知,这对于页面对象是不可能的,但是我并没有声称自己是Java专家,所以也许其他人可以确认或否认这一点。

答案 1 :(得分:1)

如果使用“调用链”怎么办? 在BasePage类中,每个方法都必须采用这种方式完成

/target/generated-sources/jooq

然后您可以像这样调用测试:

public BasePage acceptButtonClick(){
   acceptButton.click();
   return this;
}

public BasePage skipButtonClick(){
   skiptButton.click();
   return this;
}
public BasePage loginButtonClick(){
   loginButton.click();
   return this;
}