Page Object Model & Factory in Selenium
โก ะฃะผะฝะพ ะพะฑะพะฑัะตะฝะธะต
ะะพะดะตะป ะฝะฐ ะพะฑะตะบัะธ ะฝะฐ ัััะฐะฝะธัะธ ะธ ัะฐะฑัะธะบะฐ ะทะฐ ัััะฐะฝะธัะธ ะฒ Selenium ะดะตัะธะฝะธัะฐะฝะต ะฝะฐ ััััะบัััะธัะฐะฝ ะผะพะดะตะป ะฝะฐ ะฟัะพะตะบัะธัะฐะฝะต ะทะฐ ะธะทะณัะฐะถะดะฐะฝะต ะฝะฐ ััะฐะฑะธะปะฝะธ ะธ ะฟะพะดะดััะถะฐะตะผะธ ัะฐะผะบะธ ะทะฐ ะฐะฒัะพะผะฐัะธะทะธัะฐะฝะพ ัะตััะฒะฐะฝะต. ะขะพะน ะฐะบัะตะฝัะธัะฐ ะฒััั ั ััะทะดะฐะฒะฐะฝะตัะพ ะฝะฐ ัะฟะตัะธัะธัะฝะธ ะทะฐ ัััะฐะฝะธัะฐัะฐ ะบะปะฐัะพะฒะต, ะบะพะธัะพ ะบะฐะฟััะปะธัะฐั WebElements ะธ ััั ะฝะพัะพ ะฟะพะฒะตะดะตะฝะธะต, ะบะฐัะพ ะฟะพ ัะพะทะธ ะฝะฐัะธะฝ ะฝะฐะผะฐะปัะฒะฐั ะดัะฑะปะธัะฐะฝะตัะพ ะธ ะฟะพะดะพะฑััะฒะฐั ัะตัะธะผะพัััะฐ ะธ ะผะฐัะฐะฑะธััะตะผะพัััะฐ ะฝะฐ Selenium ัะตััะพะฒะธ ัะบัะธะฟัะพะฒะต.

ะะฐะบะฒะพ ะต ะพะฑะตะบัะตะฝ ะผะพะดะตะป ะฝะฐ ัััะฐะฝะธัะฐ? ะะพะธ ัะฐ ะฝะตะณะพะฒะธัะต ะบะปััะพะฒะธ ะบะพะผะฟะพะฝะตะฝัะธ?
Page Object Model (POM) ะต ะดะธะทะฐะนะฝะตััะบะธ ัะฐะฑะปะพะฝ, ะฟะพะฟัะปััะฝะพ ะธะทะฟะพะปะทะฒะฐะฝ ะฒ ะฐะฒัะพะผะฐัะธะทะฐัะธััะฐ ะฝะฐ ัะตััะพะฒะตัะต, ะบะพะนัะพ ััะทะดะฐะฒะฐ ั ัะฐะฝะธะปะธัะต ะทะฐ ะพะฑะตะบัะธ ะทะฐ ะตะปะตะผะตะฝัะธ ะพั ัะตะฑ ะฟะพััะตะฑะธัะตะปัะบะธั ะธะฝัะตััะตะนั. ะัะตะดะธะผััะฒะพัะพ ะฝะฐ ะผะพะดะตะปะฐ ะต, ัะต ะฝะฐะผะฐะปัะฒะฐ ะดัะฑะปะธัะฐะฝะตัะพ ะฝะฐ ะบะพะด ะธ ะฟะพะดะพะฑััะฒะฐ ะฟะพะดะดััะถะบะฐัะฐ ะฝะฐ ัะตััะพะฒะตัะต.
ะกัะณะปะฐัะฝะพ ัะพะทะธ ะผะพะดะตะป, ะทะฐ ะฒััะบะฐ ัะตะฑ ัััะฐะฝะธัะฐ ะฒ ะฟัะธะปะพะถะตะฝะธะตัะพ ัััะฑะฒะฐ ะดะฐ ะธะผะฐ ััะพัะฒะตัััะฒะฐั ะบะปะฐั Page. ะขะพะทะธ ะบะปะฐั Page ัะต ะธะดะตะฝัะธัะธัะธัะฐ WebElements ะฝะฐ ัะฐะทะธ ัะตะฑ ัััะฐะฝะธัะฐ ะธ ัััะพ ัะฐะบะฐ ัะต ััะดััะถะฐ ะผะตัะพะดะธ ะฝะฐ Page, ะบะพะธัะพ ะธะทะฒัััะฒะฐั ะพะฟะตัะฐัะธะธ ะฒััั ั ัะตะทะธ WebElements. ะะผะตะฝะฐัะฐ ะฝะฐ ัะตะทะธ ะผะตัะพะดะธ ัััะฑะฒะฐ ะดะฐ ะฑัะดะฐั ะดะฐะดะตะฝะธ ัะฟะพัะตะด ะทะฐะดะฐัะฐัะฐ, ะบะพััะพ ะธะทะฟัะปะฝัะฒะฐั, ั.ะต. ะฐะบะพ ะทะฐัะตะถะดะฐั ะผะตั ะฐะฝะธะทัะผ ัะฐะบะฐ ะดะฐ ัะต ะฟะพัะฒะธ ะฟะปะฐัะตะถะฝะธัั ัะปัะท, ะธะผะตัะพ ะฝะฐ POM ะผะตัะพะดะฐ ะผะพะถะต ะดะฐ ะฑัะดะต waitForPaymentScreenDisplay().
ะะปััะพะฒะธ ะบะพะผะฟะพะฝะตะฝัะธ ะฝะฐ ะพะฑะตะบัะฝะธั ะผะพะดะตะป ะฝะฐ ัััะฐะฝะธัะฐัะฐ
- ะะปะฐัะพะฒะต ะฝะฐ ัััะฐะฝะธัะธ: ะัะตะดััะฐะฒะตัะต ะฒััะบะฐ ัะตะฑ ัััะฐะฝะธัะฐ ะบะฐัะพ ะพัะดะตะปะตะฝ ะบะปะฐั.
- ะะพะบะฐัะพัะธ: ะะดะตะฝัะธัะธัะธัะฐะนัะต ัะตะฑ ะตะปะตะผะตะฝัะธ, ะธะทะฟะพะปะทะฒะฐะนะบะธ ะธะดะตะฝัะธัะธะบะฐัะพัะธ, XPath ะธะปะธ CSS ัะตะปะตะบัะพัะธ.
- ะะตัะพะดะธ: ะกัะดััะถะฐั ะดะตะนััะฒะธั ะธะปะธ ะพะฟะตัะฐัะธะธ, ะธะทะฒัััะฒะฐะฝะธ ะฒััั ั ะตะปะตะผะตะฝัะธัะต .page.
- ะะพะฒัะพัะฝะฐ ัะฟะพััะตะฑะฐ: Promoะฟะพะฒัะพัะฝะฐ ัะฟะพััะตะฑะฐ ะฝะฐ TES ะบะพะด ะธ ะฟะพ-ะปะตัะฝะฐ ะฟะพะดะดััะถะบะฐ ะผะตะถะดั ัะตััะพะฒะตัะต.
- ะ ะฐะทะดะตะปัะฝะต ะฝะฐ ะทะฐะณัะธะถะตะฝะพัััะฐ: ะะพะดะดััะถะฐ ััััะบัััะฐัะฐ ะฝะฐ ัััะฐะฝะธัะฐัะฐ ะฝะตะทะฐะฒะธัะธะผะฐ ะพั ัะตััะพะฒะฐัะฐ ะปะพะณะธะบะฐ ะทะฐ ะฟะพ-ะดะพะฑัะฐ ะพัะณะฐะฝะธะทะฐัะธั.
ะะฐัะพ Page Object Model?
ะกัะฐััะธัะฐะฝะต ะฝะฐ ะฐะฒัะพะผะฐัะธะทะฐัะธั ะฝะฐ ะฟะพััะตะฑะธัะตะปัะบะธั ะธะฝัะตััะตะนั ะฒ Selenium ัะตะฑะดัะฐะนะฒะตั ะะ ะต ัััะดะฝะฐ ะทะฐะดะฐัะฐ. ะัะพััะพ ัััะฑะฒะฐ ะดะฐ ะฝะฐะผะตัะธัะต ะตะปะตะผะตะฝัะธ ะธ ะดะฐ ะธะทะฒัััะธัะต ะพะฟะตัะฐัะธะธ ะฒััั ั ััั .
ะะพะผะธัะปะตัะต ะทะฐ ัะพะทะธ ะฟัะพัั ัะบัะธะฟั ะทะฐ ะฒะปะธะทะฐะฝะต ะฒ ัะตะฑัะฐะนั.
ะะฐะบัะพ ะผะพะถะตัะต ะดะฐ ะฒะธะดะธัะต, ะฒัะธัะบะพ, ะบะพะตัะพ ะฟัะฐะฒะธะผ, ะต ะดะฐ ะฝะฐะผะธัะฐะผะต ะตะปะตะผะตะฝัะธ ะธ ะดะฐ ะฟะพะฟัะปะฒะฐะผะต ััะพะนะฝะพััะธ ะทะฐ ัะตะทะธ ะตะปะตะผะตะฝัะธ.
ะขะพะฒะฐ ะต ัะบัะธะฟั, ะบะพะนัะพ ะพัะฝะตะผะฐ ะฒัะตะผะต ะธ ะต ัะบะปะพะฝะตะฝ ะบัะผ ะณัะตัะบะธ. ะ ะฝะฐัะฐะปะพัะพ ะธะทะณะปะตะถะดะฐ ะปะตัะฝะพ, ะฝะพ ั ัะฐะทัะธััะฒะฐะฝะตัะพ ะฝะฐ ัะตััะพะฒะธั ะฝะฐะฑะพั, ัะฟัะฐะฒะปะตะฝะธะตัะพ ะฝะฐ ะฟัะพะผะตะฝะธัะต ะฒ ะตะปะตะผะตะฝัะธัะต ััะฐะฒะฐ ัััะดะฝะพ. ะะพ ั ะฒัะตะผะตัะพ ัะตััะพะฒะธัั ะฝะฐะฑะพั ัะต ัะฐััะต. ะก ะดะพะฑะฐะฒัะฝะตัะพ ะฝะฐ ะฒัะต ะฟะพะฒะตัะต ะธ ะฟะพะฒะตัะต ัะตะดะพะฒะต ะบัะผ ะบะพะดะฐ ัะธ, ะฝะตัะฐัะฐ ััะฐะฒะฐั ัััะดะฝะธ.
ะัะฝะพะฒะฝะธัั ะฟัะพะฑะปะตะผ ั ะฟะพะดะดััะถะบะฐัะฐ ะฝะฐ ัะบัะธะฟัะพะฒะต ะต, ัะต ะฐะบะพ 10 ัะฐะทะปะธัะฝะธ ัะบัะธะฟัะฐ ะธะทะฟะพะปะทะฒะฐั ะตะดะธะฝ ะธ ััั ะตะปะตะผะตะฝั ะฝะฐ ัััะฐะฝะธัะฐัะฐ, ั ะฒััะบะฐ ะฟัะพะผัะฝะฐ ะฒ ัะพะทะธ ะตะปะตะผะตะฝั, ัััะฑะฒะฐ ะดะฐ ะฟัะพะผะตะฝะธัะต ะฒัะธัะบะธัะต 10 ัะบัะธะฟัะฐ. ะขะพะฒะฐ ะพัะฝะตะผะฐ ะฒัะตะผะต ะธ ะต ะฟะพะดะฐัะปะธะฒะพ ะฝะฐ ะณัะตัะบะธ.
ะะพ-ะดะพะฑัั ะฟะพะดั ะพะด ะทะฐ ะฟะพะดะดััะถะบะฐ ะฝะฐ ัะบัะธะฟัะพะฒะต ะต ะดะฐ ัะต ััะทะดะฐะดะต ะพัะดะตะปะตะฝ ัะฐะนะป ั ะบะปะฐั, ะบะพะนัะพ ะดะฐ ะฝะฐะผะธัะฐ ัะตะฑ ะตะปะตะผะตะฝัะธ, ะดะฐ ะณะธ ะฟะพะฟัะปะฒะฐ ะธะปะธ ะฟัะพะฒะตััะฒะฐ. ะขะพะทะธ ะบะปะฐั ะผะพะถะต ะดะฐ ัะต ะธะทะฟะพะปะทะฒะฐ ะฟะพะฒัะพัะฝะพ ะฒ ะผะฝะพะถะตััะฒะพ ัะตััะพะฒะธ ัะบัะธะฟัะพะฒะต, ะบะพะธัะพ ะฒะทะฐะธะผะพะดะตะนััะฒะฐั ั ะตะดะธะฝ ะธ ััั ะตะปะตะผะตะฝั. ะ ะฑัะดะตัะต, ะฐะบะพ ะธะผะฐ ะฟัะพะผัะฝะฐ ะฒ ัะตะฑ ะตะปะตะผะตะฝัะฐ, ัะต ัััะฑะฒะฐ ะดะฐ ะฝะฐะฟัะฐะฒะธะผ ะฟัะพะผัะฝะฐัะฐ ัะฐะผะพ ะฒ 1 ัะฐะนะป ั ะบะปะฐั, ะฐ ะฝะต ะฒ 10 ัะฐะทะปะธัะฝะธ ัะบัะธะฟัะฐ.
ะขะพะทะธ ะฟะพะดั ะพะด ัะต ะฝะฐัะธัะฐ Page Object Model in Seleniumะขะพะฒะฐ ะฟะพะผะฐะณะฐ ะบะพะดัั ะดะฐ ะฑัะดะต ะฟะพ-ัะตัะปะธะฒ, ะฟะพ-ะปะตัะฝะพ ะฟะพะดะดััะถะฐะตะผ ะธ ะฟะพ-ะปะตัะฝะพ ะธะทะฟะพะปะทะฒะฐะตะผ.
๐ ะะฐะฟะธัะตัะต ัะต ะทะฐ ะฑะตะทะฟะปะฐัะตะฝ ะบะพะฝัะตัั Selenium ะัะพะตะบั
ะัะตะดะธะผััะฒะฐ ะฝะฐ POM
- ะจะฐะฑะปะพะฝัั ะทะฐ ะฟัะพะตะบัะธัะฐะฝะต ะฝะฐ ะพะฑะตะบั ะฝะฐ ัััะฐะฝะธัะฐ ะบะฐะทะฒะฐ, ัะต ะพะฟะตัะฐัะธะธัะต ะธ ะฟะพัะพัะธัะต ะฒ ะฟะพััะตะฑะธัะตะปัะบะธั ะธะฝัะตััะตะนั ัััะฑะฒะฐ ะดะฐ ะฑัะดะฐั ะพัะดะตะปะตะฝะธ ะพั ะฟัะพะฒะตัะบะฐัะฐ. ะขะฐะทะธ ะบะพะฝัะตะฟัะธั ะฟัะฐะฒะธ ะฝะฐัะธั ะบะพะด ะฟะพ-ัะธัั ะธ ะปะตัะตะฝ ะทะฐ ัะฐะทะฑะธัะฐะฝะต.
- ะัะพัะพัะพ ะฟัะตะดะธะผััะฒะพ ะต, ัะต ั ัะฐะฝะธะปะธัะตัะพ ะทะฐ ะพะฑะตะบัะธ ะต ะฝะตะทะฐะฒะธัะธะผะพ ะพั ัะตััะพะฒะธัะต ัะปััะฐะธ, ัะฐะบะฐ ัะต ะผะพะถะตะผ ะดะฐ ะธะทะฟะพะปะทะฒะฐะผะต ะตะดะฝะพ ะธ ัััะพ ั ัะฐะฝะธะปะธัะต ะทะฐ ะพะฑะตะบัะธ ะทะฐ ัะฐะทะปะธัะฝะธ ัะตะปะธ ั ัะฐะทะปะธัะฝะธ ะธะฝััััะผะตะฝัะธ. ะะฐะฟัะธะผะตั, ะผะพะถะตะผ ะดะฐ ะธะฝัะตะณัะธัะฐะผะต Page Object Model ะฒ Selenium ั TestNG/JUnit ะทะฐ ััะฝะบัะธะพะฝะฐะปะฝะธ ะขะตััะฒะฐะฝะต ะธ ะฒ ัััะพัะพ ะฒัะตะผะต ั JBehave/Cucumber ะทะฐ ัะตััะฒะฐะฝะต ะทะฐ ะฟัะธะตะผะฐะฝะต.
- Code ััะฐะฒะฐ ะฟะพ-ะผะฐะปะบะพ ะธ ะพะฟัะธะผะธะทะธัะฐะฝะพ, ะทะฐัะพัะพ ะธะทะฟะพะปะทะฒะฐ ะฟะพะฒัะพัะฝะพ ะผะตัะพะดะธัะต ะฝะฐ ัััะฐะฝะธัะฐัะฐ ะฒ POM ะบะปะฐัะพะฒะตัะต.
- ะะตัะพะดะธัะต ะฟะพะปััะฐะฒะฐั ะฟะพ-ัะตะฐะปะธััะธัะฝะธ ะธะผะตะฝะฐ, ะบะพะธัะพ ะผะพะณะฐั ะปะตัะฝะพ ะดะฐ ะฑัะดะฐั ััะฟะพััะฐะฒะตะฝะธ ั ะพะฟะตัะฐัะธััะฐ, ะธะทะฒัััะฒะฐะฝะฐ ะฒ ะฟะพััะตะฑะธัะตะปัะบะธั ะธะฝัะตััะตะนั. ะะฐะฟัะธะผะตั, ะฐะบะพ ัะปะตะด ััะฐะบะฒะฐะฝะต ะฒััั ั ะฑััะพะฝะฐ ัะต ะพะทะพะฒะตะผ ะฝะฐ ะฝะฐัะฐะปะฝะฐัะฐ ัััะฐะฝะธัะฐ, ะธะผะตัะพ ะฝะฐ ะผะตัะพะดะฐ ัะต ะฑัะดะต ะบะฐัะพ โgotoHomePage()โ.
ะะฐะบ ะดะฐ ะฒะฝะตะดัะธะผ POM ะฒ Selenium?
ะัะพัั PLog ะฒ ะพัะฝะพะฒะฝะฐัะฐ ััััะบัััะฐ ะฝะฐ ัะฐะผะบะฐัะฐ ะฝะฐ Page Object Model, ะบัะดะตัะพ whereManagereIDElements ะฝะฐ AUT ะธ ะผะตัะพะดัั, ะบะพะนัะพ ัะฐะฑะพัะธ ั ัะตะทะธ ัะตะฑ ะตะปะตะผะตะฝัะธ, ัะต ะฟะพะดะดััะถะฐ ะฒัะฒ ัะฐะนะป clog. ะะฐะดะฐัะฐ ะบะฐัะพ ะฟัะพะฒะตัะบะฐ ัััะฑะฒะฐ ะดะฐ ะฑัะดะต ะพัะดะตะปะฝะฐ ะบะฐัะพ ัะฐัั ะพั ะผะตัะพะดะธัะต ะทะฐ ัะตััะฒะฐะฝะต.
ะัะปะตะฝ ะฟัะธะผะตั
ัะตััะพะฒ ัะปััะฐะน: ะัะธะดะธ Guru99 ะะตะผะพ ัะฐะนั.
ะกััะฟะบะฐ 1) ะัะธะดะตัะต ะฝะฐ Guru99 ะะตะผะพ ัะฐะนั
ะกััะฟะบะฐ 2) ะะฐ ะฝะฐัะฐะปะฝะฐัะฐ ัััะฐะฝะธัะฐ ะฟัะพะฒะตัะตัะต ะดะฐะปะธ ัะตะบัััั โGuruโ99 Bankโ ะต ะฝะฐะปะธัะต
ะกััะฟะบะฐ 3) ะะปะตะทัะต ะฒ ะฟัะธะปะพะถะตะฝะธะตัะพ
ะกััะฟะบะฐ 4) ะัะพะฒะตัะตัะต ะดะฐะปะธ ะฝะฐัะฐะปะฝะฐัะฐ ัััะฐะฝะธัะฐ ััะดััะถะฐ ัะตะบัั ะบะฐัะพ โะะดะตะฝัะธัะธะบะฐัะธะพะฝะตะฝ ะฝะพะผะตั ะฝะฐ ะผะตะฝะธะดะถัั: ะดะตะผะพะฝัััะฐัะธัโ
ะ ัะพะทะธ ะฟัะธะผะตั ะธะผะฐะผะต ัะฐะฑะพัะฐ ั ะดะฒะต ัััะฐะฝะธัะธ:
- ะะพะณะธะฝ ัััะฐะฝะธัะฐ
- ะะฐัะฐะปะฝะฐ ัััะฐะฝะธัะฐ (ะฟะพะบะฐะทะฒะฐ ัะต ัะปะตะด ะบะฐัะพ ะฒะปะตะทะตัะต)
ะกัะพัะฒะตัะฝะพ ััะทะดะฐะฒะฐะผะต 2 POM ะฒ Selenium ะบะปะฐัะพะฒะต
Guru99 ะกััะฐะฝะธัะฐ ะทะฐ ะฒั ะพะด POM
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99Login {
WebDriver driver;
By user99GuruName = By.name("uid");
By password99Guru = By.name("password");
By titleText =By.className("barone");
By login = By.name("btnLogin");
public Guru99Login(WebDriver driver){
this.driver = driver;
}
//Set user name in textbox
public void setUserName(String strUserName){
driver.findElement(user99GuruName).sendKeys(strUserName);
}
//Set password in password textbox
public void setPassword(String strPassword){
driver.findElement(password99Guru).sendKeys(strPassword);
}
//Click on the login button
public void clickLogin(){
driver.findElement(login).click();
}
//Get the title of Login Page
public String getLoginTitle(){
return driver.findElement(titleText).getText();
}
/**
* This POM method allows the test case to perform the login operation
* @param strUserName
* @param strPasword
* @return
*/
public void loginToGuru99(String strUserName,String strPasword){
//Fill user name
this.setUserName(strUserName);
//Fill password
this.setPassword(strPasword);
//Click Login button
this.clickLogin();
}
}
Guru99 ะะฐัะฐะปะฝะฐ ัััะฐะฝะธัะฐ POM ะฒ Selenium
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99HomePage {
WebDriver driver;
By homePageUserName = By.xpath("//table//tr[@class='heading3']");
public Guru99HomePage(WebDriver driver){
this.driver = driver;
}
//Get the User name from Home Page
public String getHomePageDashboardUserName(){
return driver.findElement(homePageUserName).getText();
}
}
Guru99 ะพะฑะธะบะฝะพะฒะตะฝะธ POM ะฒ Selenium ะขะตััะพะฒ ัะปััะฐะน
package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pages.Guru99HomePage;
import pages.Guru99Login;
public class Test99GuruLogin {
String driverPath = "C:\\geckodriver.exe";
WebDriver driver;
Guru99Login objLogin;
Guru99HomePage objHomePage;
@BeforeTest
public void setup(){
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://demo.guru99.com/V4/");
}
/**
* This test case will login in https://demo.guru99.com/V4/
* Verify login page title as guru99 bank
* Login to application
* Verify the home page using Dashboard message
*/
@Test(priority=0)
public void test_Home_Page_Appear_Correct(){
//Create Login Page object
objLogin = new Guru99Login(driver);
//Verify login page title
String loginPageTitle = objLogin.getLoginTitle();
Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
//login to application
objLogin.loginToGuru99("mgr123", "mgr!23");
// go the next page
objHomePage = new Guru99HomePage(driver);
//Verify home page
Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
}
ะ ะบะฐะบะฒะพ ะต Page Factory Selenium?
Page Factory ะฒ Selenium ะต ะฒะณัะฐะดะตะฝะฐ ะบะพะฝัะตะฟัะธั ะทะฐ ัะฐะผะบะฐ ะฝะฐ Page Object Model ะทะฐ Selenium WebDriver, ะบะพะนัะพ ะฟะพะดะพะฑััะฒะฐ ะฟะพะดะดััะถะบะฐัะฐ ััะตะท ะฝะฐะผะฐะปัะฒะฐะฝะต ะฝะฐ ะฟะพะฒัะฐัััะธัะต ัะต ััััะตะฝะธั ะฝะฐ ะตะปะตะผะตะฝัะธ ั ะฟะพะผะพััะฐ ะฝะฐ ะฐะฝะพัะฐัะธะธ, ะฐ ะฝะต ััะตะท ัะบะพัะพัั ะฝะฐ ะธะทะฟัะปะฝะตะฝะธะต. ะะทะฟะพะปะทะฒะฐ ัะต ะทะฐ ะธะฝะธัะธะฐะปะธะทะธัะฐะฝะต ะฝะฐ ะพะฑะตะบัะธ Page ะธะปะธ ะทะฐ ััะทะดะฐะฒะฐะฝะต ะฝะฐ ะธะฝััะฐะฝัะธะธ ะฝะฐ ัะฐะผะธั ะพะฑะตะบั Page. ะะทะฟะพะปะทะฒะฐ ัะต ัััะพ ะทะฐ ะธะฝะธัะธะฐะปะธะทะธัะฐะฝะต ะฝะฐ ะตะปะตะผะตะฝัะธ ะพั ะบะปะฐัะฐ Page ะฑะตะท ะธะทะฟะพะปะทะฒะฐะฝะต ะฝะฐ โFindElement/sโ.
ะขัะบ ัััะพ ัะปะตะดะฒะฐะผะต ะบะพะฝัะตะฟัะธััะฐ ะทะฐ ัะฐะทะดะตะปัะฝะต ะฝะฐ Page Object Repository ะธ Test Methods. ะัะฒะตะฝ ัะพะฒะฐ, ั ะฟะพะผะพััะฐ ะฝะฐ ะบะปะฐั PageFactory ะฒ Selenium, ะธะทะฟะพะปะทะฒะฐะผะต ะฐะฝะพัะฐัะธะธ @FindBy ะทะฐ ะดะฐ ะฝะฐะผะตัะธะผ WebElement. ะะทะฟะพะปะทะฒะฐะผะต ะผะตัะพะดะฐ initElements ะทะฐ ะธะฝะธัะธะฐะปะธะทะธัะฐะฝะต ะฝะฐ ัะตะฑ ะตะปะตะผะตะฝัะธ.
@FindBy ะผะพะถะต ะดะฐ ะฟัะธะตะผะต tagName, partialLinkText, ะธะผะต, linkText, id, css, className, xpath ะบะฐัะพ ะฐััะธะฑััะธ.
ะะตะบะฐ ัะฐะทะณะปะตะดะฐะผะต ัััะธั ะฟัะธะผะตั ะบะฐัะพ ะฟะพ-ะณะพัะต, ะธะทะฟะพะปะทะฒะฐะนะบะธ Page Factory
Guru99 ะกััะฐะฝะธัะฐ ะทะฐ ะฒั ะพะด ั Page Factory
package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99Login {
/**
* All WebElements are identified by @FindBy annotation
*/
WebDriver driver;
@FindBy(name="uid")
WebElement user99GuruName;
@FindBy(name="password")
WebElement password99Guru;
@FindBy(className="barone")
WebElement titleText;
@FindBy(name="btnLogin")
WebElement login;
public Guru99Login(WebDriver driver){
this.driver = driver;
//This initElements method will create all WebElements
PageFactory.initElements(driver, this);
}
//Set user name in textbox
public void setUserName(String strUserName){
user99GuruName.sendKeys(strUserName);
}
//Set password in password textbox
public void setPassword(String strPassword){
password99Guru.sendKeys(strPassword);
}
//Click on login button
public void clickLogin(){
login.click();
}
//Get the title of Login Page
public String getLoginTitle(){
return titleText.getText();
}
/**
* This POM method will be exposed in test case to login in the application
* @param strUserName
* @param strPasword
* @return
*/
public void loginToGuru99(String strUserName,String strPasword){
//Fill user name
this.setUserName(strUserName);
//Fill password
this.setPassword(strPasword);
//Click Login button
this.clickLogin();
}
}
Guru99 ะะฐัะฐะปะฝะฐ ัััะฐะฝะธัะฐ ั Page Factory
package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99HomePage {
WebDriver driver;
@FindBy(xpath="//table//tr[@class='heading3']")
WebElement homePageUserName;
public Guru99HomePage(WebDriver driver){
this.driver = driver;
//This initElements method will create all WebElements
PageFactory.initElements(driver, this);
}
//Get the User name from Home Page
public String getHomePageDashboardUserName(){
return homePageUserName.getText();
}
}
Guru99 ะขะตััะพะฒะธ ัะปััะฐะธ ั ะบะพะฝัะตะฟัะธััะฐ ะฝะฐ Page Factory
package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import PageFactory.Guru99HomePage;
import PageFactory.Guru99Login;
public class Test99GuruLoginWithPageFactory {
String driverPath = "C:\\geckodriver.exe";
WebDriver driver;
Guru99Login objLogin;
Guru99HomePage objHomePage;
@BeforeTest
public void setup(){
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://demo.guru99.com/V4/");
}
/**
* This test go to https://demo.guru99.com/V4/
* Verify login page title as guru99 bank
* Login to application
* Verify the home page using Dashboard message
*/
@Test(priority=0)
public void test_Home_Page_Appear_Correct(){
//Create Login Page object
objLogin = new Guru99Login(driver);
//Verify login page title
String loginPageTitle = objLogin.getLoginTitle();
Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
//login to application
objLogin.loginToGuru99("mgr123", "mgr!23");
// go the next page
objHomePage = new Guru99HomePage(driver);
//Verify home page
Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
}
}
ะัะปะฝะฐัะฐ ััััะบัััะฐ ะฝะฐ ะฟัะพะตะบัะฐ ัะต ะธะทะณะปะตะถะดะฐ ะบะฐัะพ ะดะธะฐะณัะฐะผะฐัะฐ:
AjaxElementLocatorFactory
AjaxElementLocatorFactory ะต ะบะพะฝัะตะฟัะธั ะทะฐ ะผััะทะตะปะธะฒะพ ะทะฐัะตะถะดะฐะฝะต ะฝะฐ PageFactory ะฒ Seleniumะะทะฟะพะปะทะฒะฐ ัะต ะทะฐ ะฝะฐะผะธัะฐะฝะต ะฝะฐ ัะตะฑ ะตะปะตะผะตะฝัะธ ัะฐะผะพ ะบะพะณะฐัะพ ะตะปะตะผะตะฝัะธัะต ัะต ะธะทะฟะพะปะทะฒะฐั ะฒ ะฝัะบะฐะบะฒะฐ ะพะฟะตัะฐัะธั. ะัะธัะฒะพัะฒะฐ ะฒัะตะผะต ะทะฐ ะธะทัะฐะบะฒะฐะฝะต ะทะฐ WebElements ะฝะฐ ะบะปะฐัะฐ ะฝะฐ ะพะฑะตะบัะฐ ัััะฐะฝะธัะฐ. ะะดะฝะพ ะพั ะบะปััะพะฒะธัะต ะฟัะตะดะธะผััะฒะฐ ะฝะฐ ะธะทะฟะพะปะทะฒะฐะฝะตัะพ ะฝะฐ ัะฐะฑะปะพะฝะฐ PageFactory ะฒ Selenium ะต AjaxElementLocatorFactory ะบะปะฐั.
ะขัะบ, ะบะพะณะฐัะพ ัะต ะธะทะฒัััะฒะฐ ะพะฟะตัะฐัะธั ะฒััั ั ะตะปะตะผะตะฝั, ัะฐะบะฐะฝะตัะพ ะทะฐ ะฝะตะณะพะฒะฐัะฐ ะฒะธะดะธะผะพัั ะทะฐะฟะพัะฒะฐ ะตะดะฒะฐ ะพั ัะพะทะธ ะผะพะผะตะฝั. ะะบะพ ะตะปะตะผะตะฝััั ะฝะต ะฑัะดะต ะฝะฐะผะตัะตะฝ ะฒ ะดะฐะดะตะฝะธั ะธะฝัะตัะฒะฐะป ะพั ะฒัะตะผะต, ะขะตััะพะฒ ัะปััะฐะน ะธะทะฟัะปะฝะตะฝะธะตัะพ ัะต ั ะฒััะปะธ ะธะทะบะปััะตะฝะธะต โNoSuchElementExceptionโ.
ะะฐะฟัะธะผะตั:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);











