2012-02-09 38 views
5

我正在使用Cucumber和Capybara和Selenium-Webdriver一起測試Chrome擴展。如何在每個測試場景後重新啓動瀏覽器

我的測試是非常簡單的:

@chrome_extension 
    @javascript 
     Scenario: Test1 
     Given I open a browser 
     And I close the browser 
     When I do nothing 
     Then nothing happens 

在哪裏定義的步驟爲:

require 'selenium-webdriver' 

Given /^I open a browser$/ do 
    visit 'http://google.com' 
    STDERR.puts self 
end 

Given /^I close the browser$/ do 
    page.driver.browser.quit 
end 

Given /^I do nothing$/ do 

end 

Given /^nothing happens$/ do 

end 

當我打電話page.driver.browser.quit,它退出了瀏覽器會話。但是,然後發生以下錯誤:

Connection refused - connect(2) (Errno::ECONNREFUSED) 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `initialize' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `open' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `block in connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:626:in `start' 
     /Users/rui/.rvm/gems/[email protected]/gems/webmock-1.7.8/lib/webmock/http_lib_adapters/net_http.rb:90:in `request_with_webmock' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:73:in `response_for' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:41:in `request' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/common.rb:34:in `call' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:406:in `raw_execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:384:in `execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:228:in `deleteAllCookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/common/options.rb:67:in `delete_all_cookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:81:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/session.rb:70:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `block in reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `each' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/cucumber.rb:10:in `After' 

在每種情況之後重新啓動瀏覽器的正確方法是什麼?我需要每個測試儘可能無狀態。

在此先感謝!

+0

我在下面添加了一個答案。關鍵在於,當你設置它時,你只需要確保你的@After掛鉤每次徹底銷燬WebDriver驅動程序。 – MikeJRamsey56 2016-03-17 17:32:36

回答

0

有可能是這樣做的更優雅的方式,但我會考慮讓每個場景在它自己的耙任務和黃瓜使用標籤,就像這樣:

desc "Run scenario 1" 
task :scenario_1 do 
cmd = "cucumber --tags @1" 
`#{cmd}` 
end` 

這樣做將完成正是你自從Cucumber使用--tags參數支持這個開箱之後,就開始了這個工作。

1

使用Watir-webdriver,這是非常類似於硒。

您可以通過使用掛鉤來完成此操作。做一些關於鉤子的研究以獲得更好的理解,但是在你的項目的支持目錄中,你會想創建一個鉤子文件。我使用ruby和rubymine來運行我的測試,因此在您的環境中它可能會有所不同。

你的鉤子文件可能看起來像這樣。

require 'watir-webdriver' 



Before do 
    @browser = Watir::Browser.new :chrome 
end 


After do 
    @browser.close 
end 

然後,每個場景運行之前,它會打開瀏覽器的一個實例,當腳本完成關閉瀏覽器。

0

在掛鉤後清除Cookie並刷新瀏覽器。例如,我在Watir-Webdriver中使用它

After do |scenario| 
    browser.cookies.clear 
    browser.refresh 
end 
0

已刪除的java示例。

水豚正試圖通過預測你想做什麼來節省你的工作。水豚在每一步之後關閉會話。如果您明確關閉瀏覽器會話,則當水豚嘗試清理cookie時,不會清除會話。

如果你不想要水豚來處理這些事情,那就自己動手吧,不要戴水豚。

+0

你可以在我的GitHub頁面[這裏](https://github.com/mikejramsey56/cuc_jav_webdriver.git)更詳細地看到上面的內容。 – MikeJRamsey56 2016-03-17 17:40:22

+0

從他錯誤信息的外觀他使用Ruby。在這種情況下,不確定Java實現會對他有所幫助。 – 2016-03-22 21:45:47

+0

@JarodAdair好點。 – MikeJRamsey56 2016-03-23 02:15:23

相關問題