2011-07-26 58 views
1

假設我有3個場景大綱,並且需要使用Firefox運行場景1,關閉瀏覽器,然後使用Chrome運行場景2,關閉瀏覽器,然後運行場景3與Firefox。 有沒有什麼方法可以在每種情況之後關閉/退出Cucumber/Capybara中的瀏覽器?獲取Cucumber/Capybara關閉並在場景後打開另一個瀏覽器

到目前爲止,我已經註冊了兩個驅動器,一個用於Firefox和一個Chrome瀏覽器:

Capybara.register_driver :selenium_firefox do |app| 
    Capybara::Driver::Selenium.new(app, :browser => :firefox) 
end 

Capybara.register_driver :selenium_chrome do |app| 
    Capybara::Driver::Selenium.new(app, :browser => :chrome) 
end 

然後在hooks.rb,我使用的是 '自定義' 標籤 「@alternate_browser」

Before('@alternate_browser') do 
    driver = Capybara.current_driver 
    if driver == :selenium_firefox 
    Capybara.current_driver = :selenium_chrome 
    else 
    Capybara.current_driver = :selenium_firefox 
    end 
end 

有沒有辦法在每個場景之後強制關閉瀏覽器?

編輯:我想:

page.evaluate_script("window.close()") 
page.execute_script("window.close()") 

但兩者報表沒有影響。

回答

0

這是你應該做的。

  • 停止關閉窗戶。
  • 更改爲明確瀏覽器標籤(@火狐,@鉻)

我還沒有嘗試過,但這個應該工作。

Capybara.register_driver :selenium_firefox do |app| 
    Capybara::Driver::Selenium.new(app, :browser => :firefox) 
end 

Capybara.register_driver :selenium_chrome do |app| 
    Capybara::Driver::Selenium.new(app, :browser => :chrome) 
end 


Before('@firefox') do 
    Capybara.current_driver = :selenium_firefox 
end 

Before('@chrome') do 
    Capybara.current_driver = :selenium_chrome 
end 
+0

我在測試場景時遇到的問題是,某種程度上,緩存/ cookie導致場景中的第二個/第三個示例失敗。它只在瀏覽器運行一個示例後關閉,下一個示例再次打開時才起作用,等等。全部在相同的情況下。這就是爲什麼我想知道是否有可能強制瀏覽器以某種方式關閉。 – chiurox

+0

您是否設法關閉了窗戶?我需要在某些場景之前關閉窗戶。 – Boti

+0

您可以這樣做來清除會話。 「Capybara.current_session.driver.reset!」或者你可以用javascript關閉它。但是,在下一個場景之前打開新窗口並選擇新窗口很重要。爲此檢出Selenium文檔。 http://seleniumhq.org/docs/03_webdriver.html#moving-between-windows-and-frames – Darwin

相關問題