我正在使用 Geb 编写一些浏览器自动化测试。它允许您配置baseUrl
和指定与此相关的浏览器操作,如The Book of Geb中所述。这适用于站点内的路径,但我看不到任何处理子域的语法。
是否有一种从使用 Geb DSL 的简单方法,baseUrl = http://myapp.com/
或者http://sub.myapp.com
我是否必须获取在代码中定义 baseUrl 的属性并使用它来生成子域?
我正在使用 Geb 编写一些浏览器自动化测试。它允许您配置baseUrl
和指定与此相关的浏览器操作,如The Book of Geb中所述。这适用于站点内的路径,但我看不到任何处理子域的语法。
是否有一种从使用 Geb DSL 的简单方法,baseUrl = http://myapp.com/
或者http://sub.myapp.com
我是否必须获取在代码中定义 baseUrl 的属性并使用它来生成子域?
正如 erdi 所说,目前似乎没有办法做到这一点。最后,我们将 getPageUrl() 的重写版本添加到 Page 的子类中。
String getPageUrl() {
def subdomainPresent = this.class.declaredFields.find {
it.name == 'subdomain' && isStatic(it.modifiers)
}
if( subdomainPresent ) {
def baseURL = getBrowser().getConfig().getBaseUrl()
def splicePoint = baseURL.indexOf('//') + 1
pageUrl = baseURL[0..splicePoint] + this.class.subdomain + "." + baseURL[splicePoint+1..-1] + pageUrl
}
pageUrl
}
像这样用于 account.{baseUrl}/login
class MyPage extends MyPageBase{
static subdomain = "account"
static url = "login"
}
在 Geb 中,Browser 类有这个方法:
/**
* Changes the base url used for resolving relative urls.
* <p>
* This method delegates to {@link geb.Configuration#setBaseUrl}.
*/
void setBaseUrl(String baseUrl) {
config.baseUrl = baseUrl
}
我成功地使用它来切换同一应用程序的服务器上下文。
例如:
browser.setBaseUrl('http://int/app/pages/')
browser.setBaseUrl('http://ci/sameapp/pages/')
如果您使用 Spock 运行测试,则需要在每个功能重置之前完成此操作。
据我所知,baseUrl
除了直接在配置中设置之外,没有办法在测试执行期间进行修改:
browser.config.baseUrl = 'http://sub.myapp.com'