首页 > 解决方案 > 使用 POM 和 PageObjectFactory 测试框架:使用 java 反射时出错

问题描述

我正在构建一个自动化框架并使用页面对象模式。

只有三页,非常简单。最初我在 src/main/java 加上页面代码中做框架代码。我在 src/test/java 中有一个测试运行器类以及步骤定义。但是,我想尝试将框架代码与测试代码放在不同的模块中(因为可重用性,并且因为我显然喜欢让生活变得更难),这会产生一些问题。

我有一个类是 PageObjectFactory ,它的目标是在不存在页面时创建一个页面。因为我只有三页,所以我把这三个

public Homepage getHomePage() {
  return (homePage == null) ? homePage = new 
      Homepage(driver) : homePage;
 }

但是现在,由于 PageObjectFactory 不是测试模块的一部分,它在另一个模块中,我不得不想出一个通用方法。我不能在框架模块中放置测试模块的依赖关系,因为我已经在测试模块中具有框架模块的依赖关系,它会生成循环依赖关系。

所以我想出了这个:

public PageObjectsManager getInstance() {
    LOG.info("PageObjectsManager getInstance()");
    if (instance == null) {
        instance = new PageObjectsManager();
    }
    return instance;
}

public <E extends BasePage> E getPageObject(Class<E> clazz) {
    LOG.info("PageObjectsManager getPageObject()");
    if (!pageObjectsList.containsKey(clazz)) {
        E newPageObject = 
             createPageObjectInstance(clazz);
        pageObjectsList.put(clazz, newPageObject);
        LOG.info("Clazz " + clazz);
        LOG.info(" " + newPageObject);
    }
    return clazz.cast(pageObjectsList.get(clazz));
}

private <E extends BasePage> E 
       createPageObjectInstance(Class<E> clazz) {
    LOG.info("PageObjectsManager 
              createPageObjectInstance()");
     E e = null;
     try {
             Constructor<E> pageConstructor = 
    clazz.getConstructor();
             e = (E) pageConstructor.newInstance();

     } catch(InstantiationException | IllegalAccessException | 
   InvocationTargetException | NoSuchMethodException e1) {
         LOG.info("Exception " + e1.getMessage());
     }

    LOG.info("e " + e);
    return e;

这将是逻辑,是有道理的,但不起作用:x 它打印此异常而不是创建页面: Exception pageobjects.Homepage.<init>()

我应该放弃吗?:( 我认为这太复杂了,我完成这个项目的时间有限,所以也许我会采用将所有内容放在同一个模块中的原始方法。

编辑:我必须创建一个 BasePage 类,它基本上只有一个构造函数:

public BasePage(WebDriver _driver) {
    this.driver = _driver;
    PageFactory.initElements(driver, this);
    wait = new WebDriverWait(driver, 50);
}

然后所有的页面都扩展了这个。

标签: javatestingreflectionframeworkspageobjects

解决方案


推荐阅读