尽管在构造函数中使用了setDefaultBaseUrl方法,PageObject是否仍需要@DefaultUrl标记?

时间:2019-01-08 22:49:31

标签: serenity-bdd

我正在尝试创建一个抽象的PageObject,可以动态分配默认的url,以便可以在开发的所有阶段共享代码。

target = json_.get('foo', {})
if not target:
   return
target = target[0]
if len(target) < 2:
   return
target = target[1].get('bar', {})
if len(target) < 4:
   return
target = target[3]   #Finally...

我当前正在使用: serenity.version:2.0.29 serenity.maven.version:2.0.29

结果:

    package com.company.serenity.product.common.ui;

    import org.openqa.selenium.WebDriver;

    import com.google.common.base.Predicate;

    import net.serenitybdd.core.pages.PageObject;
    import net.thucydides.core.util.EnvironmentVariables;

    abstract public class AbstractPageObject extends PageObject {

      protected AbstractPageObject() {
        super();
        super.setDefaultBaseUrl(getDefaultBaseUrl());
        init();
      }

      protected AbstractPageObject(final WebDriver driver, Predicate<? super PageObject> callback) {
        super(driver, callback);
        this.setDefaultBaseUrl(getDefaultBaseUrl());
        init();
      }

      public AbstractPageObject(final WebDriver driver, final int ajaxTimeout) {
        super(driver, ajaxTimeout);
        this.setDefaultBaseUrl(getDefaultBaseUrl());
        init();
      }

      public AbstractPageObject(final WebDriver driver) {
        super(driver);
        this.setDefaultBaseUrl(getDefaultBaseUrl());
        init();
      }

      public AbstractPageObject(final WebDriver driver,
          final EnvironmentVariables environmentVariables) {
        super(driver, environmentVariables);
        this.setDefaultBaseUrl(getDefaultBaseUrl());
        init();
      }

      // return the default url (from final static property)
      abstract protected String getDefaultBaseUrl();

      // any other initiation stuff that should happen with the constructor
      abstract protected void init();

    }

非常感谢。感谢每个人的宝贵时间。

1 个答案:

答案 0 :(得分:0)

您为什么不使用配置选项,而不是尝试动态地执行此操作。如果您创建一个serenity.conf文件并添加以下代码段:

environments {
  default {
    webdriver.base.url = "http://mywebsite.local"
  }
  dev {
    webdriver.base.url = "http://mywebsite.local"
  }
  uat {
    webdriver.base.url = "https://mywebsite-uat.mysite.com/"
  }
  prod {
    webdriver.base.url = "http://mywebsite.mysite.com"
  }
}

然后在运行测试时,例如使用环境开关-Denvironment = dev来运行它们。