我正在开发一个Rails应用,从使用selenium-webdriver
和firefox
过渡到使用poltergeist
和phantomjs
进行测试capybara
和{{ 1}}。它是一个庞大而成熟的代码库,所以可以预见我遇到了一些麻烦。
当我遇到问题时,我尝试在测试开始时使用cookie登录测试用户。在我的rspec
文件中设置了Poltergeist,如下所示:
spec_helper.rb
在Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
:inspector => true,
:window_size => [1280, 1024]
}
Capybara::Poltergeist::Driver.new(app, options)
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
内我有以下帮助方法:
spec/support/helpers.rb
将此与我对def login_as(user,redirect=nil)
cookie_jar = ActionDispatch::Cookies::CookieJar.new
signed_jar = ActionDispatch::Cookies::SignedCookieJar.new cookie_jar,
AppName::Application.config.secret_token
signed_jar[:session_31] = {
value: {
:'warden.user.user.key' =>
["User", [user.id], user.password_salt] } }
visit '/test.html' unless current_path
cookie_options = { :expires => Time.now + 15.years }
page.driver.set_cookie(
:session_31,
cookie_jar[:session_31],
cookie_options)
visit redirect if redirect
end
的比较:
selenium-webdriver
然后我的测试在def login_as(user,redirect=nil)
cookie_jar = ActionDispatch::Cookies::CookieJar.new
signed_jar = ActionDispatch::Cookies::SignedCookieJar.new cookie_jar,
AppName::Application.config.secret_token
signed_jar[:session_31] = {
value: {
:'warden.user.user.key' =>
["User", [user.id], user.password_salt] } }
visit '/test.html' unless current_path
page.driver.browser.manage.add_cookie(
name: :session_31,
value: cookie_jar[:session_31])
visit redirect if redirect
end
块中调用这个辅助方法。
before(:each)
在两种情况下都会创建Cookie,但用户未使用before(:each) do
# Setup users and such
login_as(@user)
end
登录。在任何一种情况下显示时,cookie也会略有不同。对于恶作剧者:
poltergeist
使用Selenium:
["session_31",
#<Capybara::Poltergeist::Cookie:0x000fffffffffff
@attributes=
{"domain"=>"localhost",
"expires"=>"Tue, 09 Jan 2029 15:48:08 GMT",
"expiry"=>1862686088,
"httponly"=>true,
"name"=>"session_31",
"path"=>"/",
"secure"=>false,
"value"=>
"secret ;)"}>]]
我不知道这是Poltergeist,PhantomJS,我自己的代码库,还是魔法侏儒引起它的问题。我真的很茫然。有人有什么想法吗?