headless chromeでcookieを読み書きする方法もブログ書いたほうが良いかな…(メドピアさんとは別案件だったので書かなかった
— willnet (@netwillnet) 2018年7月4日
poltergeistからheadless chromeへ移行する時に気をつけること - メドピア開発者ブログ の続きです。poltergeistとheadless chrome(selenium-webdriver)でcookieの扱い方が違うので、違いを簡単にまとめておきます。
poltergeistの場合
専用のAPIが用意されています。簡単。
page.driver.set_cookie('name', 'value')
page.driver.cookies['name'].value
詳しくは公式を参照してください: teampoltergeist/poltergeist: A PhantomJS driver for Capybara
headless chromeの場合
headless chromeにはpoltergeistほど気の利いたAPIがありません><ヘルパメソッドを作ってあげるとやりやすいです。次のようなmoduleを作って、適宜includeしてください。
module FeatureHelper def cookie_value_from(name:) cookies = page.driver.browser.manage.all_cookies cookie = cookies.find { |c| c[:name] == name } cookie && cookie[:value] end def add_cookie(name:, value:) page.driver.browser.manage.add_cookie( name: name, value: value.to_s ) end end
注意
add_cookieする際には、必ず一回はページをリクエストしておく必要があります。つまり
add_cookie(name: 'hoge', value: 'fuga') visit users_path
のようなコードはエラーになります。適当なページを一度ロードしておくとうまく動きます
visit root_path add_cookie(name: 'hoge', value: 'fuga') visit users_path