Geb baseUrl导航可以与子域一起使用吗?

时间:2013-01-31 15:57:33

标签: grails geb

我正在使用Geb编写一些浏览器自动化测试。它允许您配置baseUrl并指定与此相关的浏览器操作,详见The Book of Geb。这适用于网站中的路径,但我无法看到处理子域的任何语法。

是否有使用Geb DSL从baseUrl = http://myapp.com/转到http://sub.myapp.com的简单方法,或者我将不得不抓住在代码中定义baseUrl的属性并使用它来生成子域?

3 个答案:

答案 0 :(得分:1)

正如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
}

这样用于帐户。{baseUrl} / login

class MyPage extends MyPageBase{
    static subdomain = "account"
    static url = "login"
}

此处记录为拉取请求https://github.com/geb/geb/pull/37/files

答案 1 :(得分:1)

在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
}

Geb Javadoc

我成功使用它来切换同一应用程序的服务器上下文。

E.g:      browser.setBaseUrl('http://int/app/pages/') browser.setBaseUrl('http://ci/sameapp/pages/')

如果您使用Spock运行测试,则需要在每个功能重置之前完成。

答案 2 :(得分:0)

据我所知,在测试执行期间无法修改baseUrl,除非直接在配置中设置它:

browser.config.baseUrl = 'http://sub.myapp.com'