2013-04-02 42 views
0

我正在嘗試在需要使用ConfigSlurper獲取的配置文件中存儲我需要的url。我認爲這可能行不通,但不確定。思考?來自ConfigSlurper的Geb頁面url方法

+0

您能解釋一下爲什麼你需要這個以及頁面URL如何根據不同的環境而改變? – erdi

+0

我有多個網站,每個網站都有一個測試網站,然後是一個活網站。這些網站有一個後端和一個前端。所以我可能有test.abc.com,那麼我會有prod.abc.com。 – jrock2004

回答

2

您可能正在尋找由baseUrl配置提供的功能。當使用to MyPage時,瀏覽器使用的url由basUrl配置和url頁面類的屬性決定。

0

我在不同的語言環境中運行geb,所以遇到同樣的問題。我通常使用locale.getCountry()作爲環境的參數從配置文件中加載不同的url。

在運行的類中,我使用ConfigSlurper將baseUrl替換爲加載的條目。好處是我可以處理多個語言環境和本地主機環境。本地測試與測試分段環境。

我有一個主要的spock文件,包含整個迴歸測試和每個國家的繼承spock類。除了類名中的國家/語言編碼之外,繼承spock文件不包含太多內容。

配置文件:

environment{ 
    CA{ 
    url="ca.somewhere.com" 
    validZipCode=... 
    ... 
    } 
    ... 
} 

主類:

class MainRegression extends GebReportingSpec{ 

@Shared Locale locale 

def setupSpec(){ 
    ... 
    locale = ParameterReader.getLocale(this.class.name) 
    ... 
} 

def "testing the website"(){ 
    when: "entering the main url" 
    go URLService.getBaseUrl(locale) 
    ... 

} 

的繼承類:

@Stepwise 
class CaEnRegressionSpec{} // Canada with english language 

一個很好的方法來處理在驗證不同的語言/區域設置: http://ldaley.com/post/1013531080/painless-page-identification-with-geb-grails

1

如果你想這樣做的稍微乾淨的方法,你可以實現一個基本頁面,如下面的一個 - 內部類的簡潔和避免直接調用受保護的方法 - (我們有26級不同的子域的應用程序!):

package page.admin 

import geb.Configuration 
import geb.Page 

class AdminPage extends Page { 

    class WrappedConfig extends Configuration { 

     WrappedConfig(ConfigObject rawConfig) { 
      super(rawConfig) 
     } 

     String getAdminBaseUrl() { 
      return readValue('adminUrl', '<invalid-url>') 
     } 

    } 

    String getPageUrl() { 
     WrappedConfig config = new WrappedConfig(browser.config.rawConfig) 
     return config.adminBaseUrl + this.class.url 
    } 

} 

你的配置可能是這個樣子:

baseUrl = 'http://base-app.example.net' 
adminUrl = 'http://admin-app.example.com' 

這樣,你仍然可以正常使用GEB語法:

given: 
    to PageWhichExtendsAdminPage, 'your-path', key1: 'value1 

生成的網址http://admin-app.example.com/your-path/?key1=value1

相關問題