Selenium PageFactory Kullanimi

Sevilay Ağıl
HardwareAndro
Published in
3 min readNov 2, 2019

--

Herkese merhaba 🙋🏻‍♀️bu yazımda Selenium Webdriver ile birlikte kullandığımız Page Factory yapısından bahsedeceğim.

Bildiğimiz gibi Selenium Webdriver programlama dillerini kullanarak web uygulamalarımızda test otomasyonunu mümkün kılan, testlerin farklı browserlarda çalışmasına imkân sağlayan bir kütüphanedir. Bu yazılım aracıyla testlerimizi otomatikleştirirken elementlere ulaşabilmek için elementlerin kimlik(ID,name,Classname,xpath vb) özelliklerini kullanıp testlerimizi koşarız. Fakat çoğu zaman bu elementleri her bir test senaryosunda kullanmaya çalıştığımızda ortaya oldukça karmaşık ve birbirini tekrar eden kod satırları ortaya çıkmaktadır.Bu ve bunun gibi durumları önlemek için bir design pattern tekniği olan Page object Model kullanılmaktadır.

PageFactory ise bizlere nesne deposu oluşturmaya imkan veren, sürdürülebilir, yeniden kullanılabilir ve elementleri tek bir yerden yönetmeyi sağlayan bir Page object model konseptidir.

Page Factory’i kullanımına bakacak olursak PageFactory model, Web elementlerini @FindBy annotionu ile algılar. How kalıbı ile birlikte elementlerin ayırt edici locator’ından hangisini kullanacaksak belirtilir. Sonrasında ise o ayırt edici locator’ın adı tanımlanır. Public WebElement ile birlikte test senaryolarında kullanmak üzere isimlendirmesi yaparız. Burada isimlendirme daha sonra baktığında anlayabilmek için önemlidir, okunaklı olmalıdır.

Login Page Object

Ben bu projede ÇiçekSepetinin login sistemini kullanarak bu dizayn patterni size aktarmaya çalışacağım.

Projenin github linki : https://github.com/sevilayagil/CicekSepetiCase

Öncelikle projemin dizinini aşağıdaki gibi oluşturdum.

Proje Dizini

Burada bir pageobjects paketi oluşturarak nesnelerimin deposunu burada LoginPageObjects class’ında topladım. .Elementleri de yukarıdaki görseldeki gibi tanımladım.

Login Step constructor oluşturma örneği

LoginStep’inde ise oluşturduğum page objelerini kullanarak test adımlarını yazdım. Burada bir constructor tanımlayarak objeleri init ettim. private LoginPageObjects’i de loginpage olarak adımlarımda kullanmak üzere isimlendirdim.

Test Class LoginStep

Ben adımlarımı Stepmanager’da oluşturduğum test classlarımda extend alarak kullandığım methodlarımı çağırarak ve içerisinde kullanmak istediğim objelerle birlikte oluşturuyorum. Bunu kullanmamdaki amaç ise elementleri tıklanabilir olmasına ve görünür olmasına kadar bekletmek ve bunu adımlarımda değil de kod tekrarını azaltmak için aşağıdaki gibi methodlarla tek bir yerden yönetmek üzere oluşturdum.

Projemizin modelini oluşturduk. Projemizi çalıştırdığımda ise aşağıdaki gibi görünecektir.

Otomasyondaki hedeflerimiz az kodla az maliyeli ve çok kapsamlı test senaryoları oluşturabilmek ve sürdürebilmektir. Page Factory ile daha anlaşılır, daha temiz kodlu, sürdürebilir ve yeniden kullanılabilir yapılar oluşturabilirsiniz.

Kendi otomasyon projelerinizde de bu yapıyı kullanmak güzel bir tercih olacaktır.

Bu yazımda sizlere PageFactory yapısından bahsetmeye çalıştım. Detaylarına Github’daki repomdan bakarak ulaşabilirsiniz. https://github.com/sevilayagil/CicekSepetiCase

PageFactory ile ilgili Selenium’un kendi dokumantasyon kaynağına da aşağıdaki linkten erişebilirsiniz.

https://github.com/SeleniumHQ/selenium/wiki/PageFactory

Bir sonraki yazılarımda görüşmek üzere 🥰

--

--