Selenium+Capybara+rspecでのログイン処理

591 views
Skip to first unread message

Yusuke Hirano

unread,
Feb 18, 2014, 11:24:01 AM2/18/14
to selen...@googlegroups.com
皆様初めまして、u-sukeといいます。
最近Seleniumを利用し始め勉強しています。
その中でこちらのコミュニティを知り、参加させて頂きました。
どうぞよろしくお願い致します。

早速ではありますが、質問をさせて下さい。
表題の通り、Selenium+Capybara+rspecでテストをしようと考えています。
具体的にやりたい事は、既に本番稼働中のサービスがあり、
ログインすると、ログインID毎にレイアウトが異なる仕様としているため、
その確認を行いたいと思っています。
ログイン後のページは複数あるため、その全てに正しくレイアウトが反映されているか、
全てのURLにアクセスし、スクリーンショットをとっておきたいと考えています。
そこで、以下のようにしてみました。

describe 'test' do
  it 'login', :js => true do
  visit "http://example.com/login"
fill_in 'user_email',:with => "ho...@example.com"
fill_in 'user_password',:with => "hogehoge"
click_button "ログイン"
  access('http://example.com/page1')
  access('http://example.com/page2')
  end
  def access(url='http://example.com/')
    visit url
    page.save_screenshot url+'screenshot.png'
  end
end

最初にログイン処理をした後、以後はaccessに引数で渡されたページにアクセスし、
スクリーンショットのファイル名をURLで保存する形です。
(実際にはファイル名を加工したりしていますが)
この時、access内でvisitすると、ログアウト状態で対象のURLにアクセスを
しているようで、未ログイン状態の画面が保存されていました。
期待値は、ログイン状態のページが保存されている事です。
上記のような関数化せずに、visitとスクリーンショットを連続で処理していくと
期待通りの動きをするにはするのですが、出来るだけ上記のような形で
まとめる事ができないか、と考えています。

このような時、一般的な実装はどのような形とするのがよいのでしょうか。
アドバイスを頂ければと思います。
最近利用したばかりで、もしかしたら変な質門となっているかもしれませんが、
その際はご容赦ください。

伊藤望

unread,
Feb 19, 2014, 7:22:09 PM2/19/14
to selen...@googlegroups.com
はじめまして、u-sukeさん

伊藤です。どうぞよろしくお願いします。

>このような時、一般的な実装はどのような形とするのがよいのでしょうか。
Rpecで共通のヘルパーメソッドを作るという手法はあるようですね。
私もaccessのようなメソッドにまとめるほうがよいと思います。


accessメソッド内でログイン状態のキャプチャがとれないのは、何なんでしょうね。。
:js => trueのドライバー指定がaccessメソッド内で有効にならず、別のドライバーを使ってしまっているとか!?

Rubyほとんど使ったことのない人間の回答ですので、参考程度までに。。

Kunio Okita

unread,
Feb 19, 2014, 7:53:03 PM2/19/14
to selen...@googlegroups.com
u-suke さん、

okitan です

access  のような helper メソッドをつくろうが、it の中にベタ書きしようが、
同じセッション・ドライバを利用してアクセスするので問題はないはずなのですが、なんでなんでしょうね?

上記コードは抜粋だと思うので、
上記に書かれていない部分に問題があるのかもしれないですね。
可能であれば、再現できるミニマムなコード(といっても、ログインするサーバー情報出すわけではないから難しいかな。。)
と動作環境を教えていただければ、もう少し何かしらアドバイスできるかもしれません。

ちなみに、access というような helper メソッドを作るやり方は(メソッド名はおいておいて)
非常に一般的で、私も普通に使ってますので、そこは問題ないと思いますよ!

あと、
:js => trueのドライバー指定がaccessメソッド内で有効にならず、別のドライバーを使ってしまっているとか!?
というのもないとは思いますが、確認したければ、
Capybara.current_driver や Capybara.current_session を出力させて、
login 直後の値と変わっていないかを確認することができます。


2014年2月19日水曜日 1時24分01秒 UTC+9 Yusuke Hirano:

保木本将之

unread,
Apr 6, 2015, 9:26:49 AM4/6/15
to selen...@googlegroups.com
>u-suke さん

こんばんは!@oh_rusty_nail です
最近コミュニティに参加して、過去の記事をあさっています。

前にスクショやSeleniumを使ってダウンロードしたファイルの検証をしたときの方法を展開しておきます。
こういった場合、md5で比較するのも1つの手では?と思いました。
みなさんどうされているのでしょうね^o^
Reply all
Reply to author
Forward
0 new messages