2011-09-11 58 views
10

我正在写黄瓜测试来测试用户的“记住我”类型的功能,并且为了在现实生活中做到这一点,用户将关闭浏览器,重新打开浏览器并返回网站。模拟关闭/重新打开黄瓜/水豚浏览器?

我的测试,到目前为止是这样的:

Scenario: 'Remember me' checked 
    Given I have checked "Remember me" 
    And I am logged in as "[email protected]" 
    When I close and re-open my browser 
    And I come back to the dashboard 
    Then I should be on the dashboard 

但是我不知道该怎么填写了“当我关闭并重新打开浏览器”步骤定义。

有谁知道我会怎么做这个(或如果这是不是我应该做的,我应该怎么是测试它?)

+0

您是否找到适合自己的答案?我们正在尝试测试localStorage的使用情况和我们的离线应用程序。有时我们需要重新打开浏览器或在另一个浏览器中打开它(它可以是相同的浏览器,但具有干净的本地存储数据和空cookie)。我们已经创建了另一个fork的分支(html5支持),并且通过localStorage支持与capybara-webkit(0.7.2)合并。但是现在我们遇到了重新打开浏览器步骤的麻烦。 – oivoodoo

+0

你找到了你的问题的答案? –

+0

我没有找到答案,但最终放弃了测试。抱歉! – sevenseacat

回答

1

您可以清除cookie。

When /^I clear cookies$/ do 
    browser = Capybara.current_session.driver.browser 
    browser.manage.delete_all_cookies 
end 
+2

我认为这些场景支持验证cookie是否在不同的会话中被正确设置和读取,因此清除cookie会破坏测试。 –

2

我用Show me the cookies

添加捆绑与gem 'show_me_the_cookies'然后在添加World(ShowMeTheCookies)features/support/env.rb

然后,只需定义一个步骤:

When /^I reopen the browser$/ do 
    expire_cookies 
    visit [ current_path, page.driver.request.env['QUERY_STRING'] ].reject(&:blank?).join('?') 
end 
0

我试图测试同样的事情,它的工作是这样的:

When(/^I close and reopen the browser$/) do 
    # Get cookies we want to keep 
    remember_me_cookie = page.driver.browser.manage.cookie_named('remember_user_token') 

    # Close the window and delete the cookies 
    page.driver.quit 

    # Reopen the window 
    page.driver.switch_to_window(page.driver.current_window_handle) 

    # Go to our domain and add our cookies back in 
    visit('/') 
    remember_me_cookie.nil? ? @current_user = nil : page.driver.browser.manage.add_cookie(remember_me_cookie) 

    # Refresh the domain to activate the cookies 
    visit('/') 
end 

有几件事情:

  • page.driver.quit删除饼干,这就是为什么我在做与饼干
  • 我试图关闭使用page.driver.close_window(page.driver.current_window_handle),然后用page.driver.switch_to_window(handle)切换回它该窗口的舞蹈,但没有工作
  • 我试着用page.driver.close_window(page.driver.current_window_handle)关闭窗口,然后切换到一个新的窗口page.driver.switch_to_window(page.driver.open_new_window)但就像我不是没有工作

我觉得真正了解如何在水豚中使用browser/window关系。此外,似乎复制cookie是一种欺骗我的集成测试。希望在未来的版本中有更好的方法来实现这一切。