yfj2’s Automatic Web Test Related Blog

yfj2のWEBテスト自動化に関わるブログ

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-----