我正在尝试创建一个抽象的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();
}
非常感谢。感谢每个人的宝贵时间。
答案 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来运行它们。