GebとSpockでテストケースの中でクッキー(cookie)の値をテストしたい
【Geb】【Tips】GebとSpockでテストケースの中でクッキー(cookie)の値をテストしたい
著者:ふじさわゆうき
問題
- クッキーに訪問履歴等を格納するWebサイトにおいて、それらの情報がクッキーに格納されているかテストしたいが、Webツールを使って手動で確認しなければならないので手間になっている
解決
- クッキーの情報をGebとspockで取得できるようにして自動テストすれば解決する
実装
- seleniumのライブラリを使って、クッキーを管理するクラス(GebCookieUtilクラス)を作成する
- "driver.manage()"でOptionsを取得する
- "options.getCookies()"でクッキーのリストを取得する
import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver.Options; public class GebCookieUtil { private Options options = null; public GebCookieUtil(WebDriver driver) { this.options = driver.manage(); } /** * Cookiesコンソールに出力します */ public void printCookies() { System.out.println("--start getCookies-----"); for (Cookie cookie : options.getCookies()) { System.out.println(String.format("key: %s, value: %s", cookie.getName(), cookie.getValue())); } System.out.println("--end getCookies-----"); } /** * クッキーから値を取得します * * @param key * @return */ public String getCookieVal(String key) { String result = null; for (Cookie cookie : options.getCookies()) { if (cookie.getName().equals(key)) { result = cookie.getValue(); break; } } return result; } /** * クッキーに値をセットします * * @param key * @param val */ public void setCookieVal(String key, String val) { options.addCookie(new Cookie(key, val)); } }
- "new GebCookieUtil(driver)"で、GebCookieUtilをdriverで初期化している
- "@Shared"でテストケース共通でクッキーを取り出せるようにしている
- "cookieUtil.getCookieVal("JV")"で、"JV"に合致するクッキーの値を取得する
- 以下、例だと、Yahooは、検索後に"JV"というキーでクッキーに値を記録していることがテストできる
import geb.spock.GebSpec import spock.lang.Shared import util.GebCookieUtil class CookieUtilTest extends GebSpec { @Shared GebCookieUtil cookieUtil = new GebCookieUtil(driver) def "output cookie"() { when: go "http://www.yahoo.co.jp" then: waitFor{ title == "Yahoo! JAPAN"} cookieUtil.printCookies() assert cookieUtil.getCookieVal("JV") == null when: $("form").p = "sample" $("input",value:"検索").click() then: waitFor{ title == "「sample」の検索結果 - Yahoo!検索"} cookieUtil.printCookies() assert cookieUtil.getCookieVal("JV") != null } }
- 出力結果
--start getCookies----- key: btpdb.2wzBV9u.dGZjLjE0NDcxNDU, value: UkVRVUVTVFMuMA key: btpdb.2wzBV9u.dGZjLjE0MzQzNDg, value: VVNFUg key: B, value: 0v43bbpaao770&b=3&s=vt --end getCookies----- --start getCookies----- key: B, value: 0v43bbpaao770&b=3&s=vt key: SGL, value: oIPUi_mbLv0rvzxfn3RiwyOcEu5XVFDvMP8hqs.NSjxcmNUHFKrcW2A1Hiv94CcPm92FKmgCZbzT7Cz1R54EKfflu_T1YVBuFhc72Hhjbp73_s8HCGWZufrYt5VkJTR5934wHIBE6Nih03mi1sdhnmYpanyFuOiW2kz.P3gAD.zufV4baMXr8ZSS0rPEXdqJTc7mDFm9rtg- key: JV, value: LgRZRkUq.R_PaPKPFI8dHc1pZfoYZlCYP_19xcf1_hKIvK5dcw5rFM0DkDNIl7XLrOnhfO5Xa6uUGFy6rAT2I2GOnSJn8owoDEvJjy5_AgGH.prYycoGGkHFoYKvFgQpAb9xnfOoQgenrwkcMLox.hA1649ZFGS7lqIlzJXCkA_7qYSkEeRBLy5bM9LTt8i_c9oK3Dz5gj4b.si6igf4y8tTJkd51J.JpYUjP_aGXWrPd4ac_ioh0NavQs2hfcCAQ1enfs8pNJ4ThWIuipotIhi.O2r_aflzQZtrEh7BBnNXE4U_18BS7fMKm2FvHt100pxWUEghsrE.E8etAoOlJeJ1i_boBrC_pb9qIP2Qf8NyeXesnaghII6yw5lu.ReMntJBiyzqev9k9jkyd99aDovHAXMf6vlAGOr2QqIW64R11rb2fJgQ6OeHD14v9fwk.tmvKlxA12CTpHTNkUe91xtvVpWDfiBytYbiacM- --end getCookies-----