4

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

是否有一种从使用 Geb DSL 的简单方法,baseUrl = http://myapp.com/或者http://sub.myapp.com我是否必须获取在代码中定义 baseUrl 的属性并使用它来生成子域?

4

3 回答 3

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
}

像这样用于 account.{baseUrl}/login

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

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

于 2013-06-13T15:17:35.733 回答
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
}

盖布Javadoc

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

例如: browser.setBaseUrl('http://int/app/pages/') browser.setBaseUrl('http://ci/sameapp/pages/')

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

于 2014-03-13T03:53:28.807 回答
0

据我所知,baseUrl除了直接在配置中设置之外,没有办法在测试执行期间进行修改:

browser.config.baseUrl = 'http://sub.myapp.com'
于 2013-02-13T20:10:01.253 回答