2012-04-19 61 views
6

我是Cucumber和Ruby的新手。我是一名業務分析師,曾經寫過需求和測試案例,我已經閱讀了Cucumber和Watir,但是我很難得到我需要實際工作的事情。黃瓜檔案和全局鉤子選擇瀏覽器

我將在IE,Firefox和Chrome以及不同類型的用戶中測試一組網頁。我正在編寫和標記功能,並在cucumber.yml中創建配置文件,以便我可以使用-p運行黃瓜,以針對不同的用戶類型運行適當的標記測試。

我正在創建不同的頁面對象,以便我可以輕鬆地以基本用戶,報告用戶,編輯器用戶等身份登錄。對於每種類型的用戶,功能文件的場景和通過/ step defs會調用相應的頁面對象以用戶類型登錄。

而不是重複測試三次,每次打開正確的瀏覽器與watir-webdriver,而不是讓瀏覽器打開和關閉每個場景,我想在env.rb或hooks.rb在運行任何功能之前只打開一次瀏覽器,然後在全部功能全部運行時,在全局掛接語句之後關閉它。同樣,我正在使用調用標記場景的配置文件來選擇爲每個用戶類型運行哪些測試。

我遇到的問題是在此之前的一個步驟,只是打開瀏覽器。我知道如何使用watir-webdriver打開每個瀏覽器。

我想要的東西是在全球範圍內掛鉤以在任何測試之前打開瀏覽器。 所以在env.rb我打算把瀏覽器= Watir :: Browser.new調用。

我想要做的是有三個獨立的全局鉤子,IE,Chrome和Firefox各一個,並根據從cucumber.yml中的配置文件傳遞的條件調用它們,但我無法獲取它上班。我試圖給他們加上標籤,但這並不奏效。你不能標記全局鉤子?我用if/then/else安裝了它,但那也不起作用。

我希望能夠傳遞一個參數或標籤在cucumber.yml配置文件來調用只有一個全局鉤子,如:

basicuser_overviewtests_ie: --tags @basic @overview @ie 

basicuser_overviewtests_ff: --tags @basic @overview @firefox 

Basicuser_newpagetests_ie: --tags @basic @newpage @ie 

等......前兩個標籤將參考到場景,第三個到正確的env.rb鉤子。或者,如果我可以從配置文件傳遞一個變量,那也可以。但我無法弄清楚如何在那裏使用環境變量。

我錯過了什麼嗎?這是足夠的信息來解釋這個問題嗎? 謝謝!


UPDATE:問題的部分似乎是黃瓜不承認[支持]文件夾中時,它是在同一水平[特點]文件夾,它需要的是在[功能]。我曾經說過,在相同的級別而不是內部功能上,它會是好的。並非如此。

所以,現在我可以讓我的三個全局掛鉤讓瀏覽器運行,但標記並不會幫助,即使標記爲僅在特徵標記爲@ie之前運行,或者標記爲僅運行@即。

回答

8

編輯:pp。147-148從The Cucumber Book使我相信,這應該工作:

Before ('@ie') do 
    @browser = Watir::Browser.new :ie 
end 

我沒有測試過,不過那可能會得到你想要的東西,如果你想通過瀏覽器作爲一個標籤。


我無法弄清楚如何閱讀標籤,但我認爲可能有辦法做到這一點。如果我在The Cucumber Book遇到它,我會更新你。我結束了使用環境變量。以下是我做的:

case ENV['BROWSER'] 
    when 'ie', 'Internet Explorer' 
    browser = Watir::Browser.new :ie 
    when 'ff', 'Firefox' 
    browser = Watir::Browser.new :ff 
    when 'chrome' 
    browser = Watir::Browser.new :chrome 
    when 'opera' 
    browser = Watir::Browser.new :opera 
    when 'debug' 
    debug_profile = Selenium::WebDriver::Firefox::Profile.new 
    debug_profile.add_extension 'features/support/firebug.xpi' 
    browser = Watir::Browser.new :firefox, :profile => debug_profile 
    else 
    browser = Watir::Browser.new :ie 
end 

Before do 
    @browser = browser 
end 

at_exit() do 
    browser.close 
end 

然後,我只是通過在BROWSER=<browser>在命令行上。有關我使用ENV變量所做的更深入討論,可以閱讀我寫的here的博文。

+0

它的工作,謝謝!看起來我正處於正確的軌道上 - 我試圖使用環境變量,但是我沒有正確的語法,於是我轉向標記,這並不奏效。這完全按照我的需要工作,並且您的博客文章幫助了很多 - 它與我正在進行的測試類似。再次感謝你! – 2012-04-23 17:38:50

+0

太棒了!很高興我能幫上忙。如果你還沒有,拿起黃瓜書。這對我很有幫助。 – 2012-04-23 19:26:32