PageObject について調べて、考えを改めた話
こちらの発表資料を拝見して、僕も PageObject って頑張らないといけない印象を持っていたけど、本当に頑張らないといけないんだっけかな?-と思い、 PageObject について考えたこと、調べたことのまとめです。
僕が過去に苦労していたこと
ページ要素の収集。IdやName属性がHTMLタグになく、必要な要素のXPathを取得していたこと
アプリケーションの操作で画面要素を隠蔽していなかったこと。Getterで隠蔽はしていたけど、それを隠蔽というかは疑問。
僕がやっていたこと
PageObject という名で、ページ上のWebElementを集めたクラスを作っていたこと
PageObject について調べたこと
そもそも誰が考えたのかなーって調べたら、Martin Fowlerさんの記事が見つかりました。
気付いたこと
PageObject が提供するAPIは、アプリケーションの操作でありページ要素を隠蔽するということ
PageObject を利用する必要があるテストの目的が、例えばユースケーステストだとすると、そのユースケースにおいて利用される画面操作をAPIとして提供すれば良いということ。つまり、APIが必要とするページ要素だけを取得すれば良いということ
ただし、これは PageObject が提供するAPIがユースケーステストで利用されることを前提とした話なので、 PageObject の設計については都度考える必要はある
そういえば、 PageObject ってどう設計すれば良いの?っていう疑問は、息子が生まれる前だから、 1 年前くらいから持ってました。今回の記事をきっかけに、理解が出来て良かったです。
アプリケーションの操作 = ユースケースの 1 課程と捉えると、ICONIXのモデル(シーケンス図)は PageObject 設計に利用出来るかなと思うので、今度実験してみたいと思います。
気付かせてくれた snowhiro さんには感謝です。