PageObject について調べて、考えを改めた話

こちらの発表資料を拝見して、僕も PageObject って頑張らないといけない印象を持っていたけど、本当に頑張らないといけないんだっけかな?-と思い、 PageObject について考えたこと、調べたことのまとめです。

 

 

speakerdeck.com

 

僕が過去に苦労していたこと

ページ要素の収集。IdやName属性がHTMLタグになく、必要な要素のXPathを取得していたこと

アプリケーションの操作で画面要素を隠蔽していなかったこと。Getterで隠蔽はしていたけど、それを隠蔽というかは疑問。

 

僕がやっていたこと

PageObject という名で、ページ上のWebElementを集めたクラスを作っていたこと

 

PageObject について調べたこと

そもそも誰が考えたのかなーって調べたら、Martin Fowlerさんの記事が見つかりました。

martinfowler.com

 

気付いたこと

PageObject が提供するAPIは、アプリケーションの操作でありページ要素を隠蔽するということ

PageObject を利用する必要があるテストの目的が、例えばユースケーステストだとすると、そのユースケースにおいて利用される画面操作をAPIとして提供すれば良いということ。つまり、APIが必要とするページ要素だけを取得すれば良いということ

ただし、これは PageObject が提供するAPIユースケーステストで利用されることを前提とした話なので、 PageObject の設計については都度考える必要はある

 

そういえば、 PageObject ってどう設計すれば良いの?っていう疑問は、息子が生まれる前だから、 1 年前くらいから持ってました。今回の記事をきっかけに、理解が出来て良かったです。

 

アプリケーションの操作 = ユースケースの 1 課程と捉えると、ICONIXのモデル(シーケンス図)は PageObject 設計に利用出来るかなと思うので、今度実験してみたいと思います。

 

気付かせてくれた snowhiro さんには感謝です。