0

通过 WebDriver 和 PageFactory,我们正在使用 Java 实现一个新的自动化项目,并且我们一直在尝试各种创建 PageObjects 的方法。我们被一些不同的想法所困扰,并希望确保我们不会陷入困境。

是否最好,如 WebDriver 文档中所述,向 PageFactory 提供初始化的 WebDriver,以及创建新 PageObject 的类模板?

driver.get(URL);
PageObject page = PageFactory.initElements(driver, PageObject.class);

// elsewhere
class PageObject {
  private WebDriver driver;

  public PageObject(WebDriver driver) {
    this.driver = driver;
    this.validateUrl();
  }

  public void validateUrl() throws Exception {
    if (!driver.getUrl().equals(url)) {
      throw new Exception("URL not valid");
    }
  }
}

但是,既然 PageObject 知道很多关于它自己的信息,比如它的 URL,我们可以不让 Page Object 来做这项工作吗?

PageObject page = new PageObject(driver);
page.goToUrl();

// elsewhere
class PageObject {
  private WebDriver driver;
  private String url;

  public PageObject(WebDriver driver) {
    PageFactory.initElements(driver, this);
  }

  public void goToUrl() {
    driver.get(url);
  }
}

我想我认为让 PageFactory 进行实例化与仅进行初始化相比没有太大的优势,但是如果有理由的话,我不想偏离架构师的标准设置。

谢谢

4

2 回答 2

0

最好的方法是让 Geb 和 Thucydides 等框架抽象出 PageObjects 及其初始化。为此,我一直在使用Geb + Spock BDD组合,迄今为止的结果非常好。

于 2012-04-10T16:47:32.973 回答
0

页面工厂的优势之一:

设想:

在您的应用程序中,您在一个页面中有 100 个字段。同一个页面被调用了 50 次。

如果这种场景是通过使用Page Object的方式来完成的,它会一次又一次地找到每个元素。性能可能会下降。

如果使用 Page Factory 的方式来完成相同的场景,它只会第一次找到元素,然后从缓存中取出。以此提高性能。

于 2014-01-17T08:50:15.860 回答