对于多个 Web 操作,我是否可以只调用一次页面工厂实例



我使用Pagefactory设计模式进行Selenium java测试,一切正常。我想知道是否可以为多个操作仅调用一次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的范围?

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

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

然后,您可以在测试中呼入,例如:

basepage.acceptButtonClick()
        .skipButtonClick()
        .loginButtonClick();

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

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

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

更新

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

最新更新