æ®å¿µãªãããWebdriverãŸãã¯Selenium以å€ã®èªååããŒã«ã¯äœ¿çšããŸããã§ããã ããããããã«ããããããããã®ã¢ãããŒãã¯ä»ã®ããŒã«ã§äœ¿çšã§ããããã«æããŸãã
ã³ãŒãäŸã¯CïŒ+ NUnitã«ãªããŸãã
ãã®èšäºã¯ç§èªèº«ã®çµéšãåæ ãããã®ã§ããããªã³ã¯ãåŒçšã¯å«ãŸããŠããŸããã 以äžã®æç« ã¯ããã®ã¢ãããŒãã«å¯Ÿããç§ã®ããžã§ã³ã®ç©èªã«éããã決ããŠä»®èª¬ãšããŠæ瀺ããããã®ã§ã¯ãããŸããã
ãªããããªã«å¹æçã§ããïŒ
ãããã圌ããã®ããããã®ãªã秩åºããããžã§ã¯ãã®æ§é ã«åãå ¥ããããã§ãããã ãã®ã¢ãããŒãã®ååã«åŸã£ãŠãè«çã¢ãžã¥ãŒã«ãæ確ã«èšè¿°ããæ§é ãäœæããŸãã ãããŠããã®ãããªåã¢ãžã¥ãŒã«ã¯ããã¹ã察象ã®ã¢ããªã±ãŒã·ã§ã³ã®è«çã¢ãžã¥ãŒã«ãåæ ããŠããŸãã
ããã«ãããã¡ãœããã®æ€çŽ¢ãšåå©çšãå€§å¹ ã«ä¿é²ããããã®çµæããããžã§ã¯ãã®ã¡ã³ããã³ã¹ã容æã«ãªããŸãã ãŸããæ°ããåå è ããããžã§ã¯ãã«ã泚ããããã«å¿ èŠãªæéãå€§å¹ ã«åæžããŸãã
æ§é
äŸã¯ã1ã€ã®ç°¡åãªãã¹ã-Facebookãã°ã€ã³ïŒããŒãžã®å³äžé ã«è¡šç€ºããããã°ã€ã³ãèæ ®ããŸãïŒã§ãã
ãã®ãããžã§ã¯ãã®å®è£ äŸã¯ã github.com/DmitryRoss/Page-Object-Model-ArticleããããŠã³ããŒãã§ããŸãã
-ãããžã§ã¯ãå šäœã®å é ã«ã¯ãNUnitãã¹ããå«ãã¯ã©ã¹ããããŸãã ãã¹ãã§ã¯ããã®ãããªã¯ã©ã¹ã1ã€äœæããLoginTestsãšåŒã³ãŸãã ãã®äžã§ãAssertLoginïŒïŒãšãããã¹ãã¡ãœãããäœæããŸãã
[TestFixture] public class LoginTests : BaseTests { static LoginHelper loginHelper = new LoginHelper(); [Test] public static void AssertLogin(){...} }
-以äžã¯ãã«ããŒã¯ã©ã¹ã§ãã ãã®ãããªåã¯ã©ã¹ã¯ããã¹ãã§ç¹å®ã®1ã€ã®ã¯ã©ã¹ãæäŸããŸãã
ããããæã«ã¯ããã«ããŒã¯ã©ã¹ã®äžéšã®ã¡ãœãããããã¹ããä»ã®ãã«ããŒã¯ã©ã¹ãåããä»ã®ã¯ã©ã¹ã§å¿ èŠã«ãªãããšããããŸãã ãã®å Žåããã®ãããªã¡ãœããããæ§é ã®éå±€å ã§ãã«ããŒã¯ã©ã¹ãšåãã¬ãã«ã«ããåå¥ã®äžè¬ã¯ã©ã¹ã«è»¢éããããšããå§ãããŸãã ãã®ã¯ã©ã¹ã®é¡èãªäŸã¯ãã¢ããªã±ãŒã·ã§ã³ããã²ãŒã·ã§ã³ã¯ã©ã¹ã§ãã çµå±ã®ãšãããç¹å®ã®ããŒãžãžã®ç§»è¡ã¯ããã¹ããŸãã¯ãã«ããŒã¯ã©ã¹ãæã€ããŸããŸãªã¯ã©ã¹ã§å¿ èŠã«ãªãå ŽåããããŸãã éåžžããã¹ãŠã®ãããžã§ã¯ãã«ã¯ãå ±éãšããŠã¬ã³ããªã³ã°ãããä»ã®ãã«ããŒã¯ã©ã¹ããããŸãã
䟿å®äžãã¡ãœããã¯ãããããååšãããã«ããŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ããã«ãããããããä»ããŠããã®ãããªçç¥åœ¢ã§ãããã«ã¢ã¯ã»ã¹ã§ããŸã-
loginHelper. DoLogin(userName, password). AssertUserName(displayedUserName);
ãã®äŸã§ã¯ããã®ãããªã¯ã©ã¹ã1ã€äœæããLoginHelperãšåŒã³ãŸãã
ãã®äžã§ã2ã€ã®ã¡ãœãããäœæããŸãã
1. DoLoginïŒæååuserNameãæååãã¹ã¯ãŒãïŒ
2. AssertUserNameïŒæååuserNameïŒ
public class LoginHelper :TestFramework { public LoginHelper DoLogin(string userName, string password){...} public LoginHelper AssertUserName(string userName){...} }
-ãããŠãããããç§ãã¡ã®ãããžã§ã¯ãã®äžæ žãå§ãŸããŸã-Pagesãã€ãŸã ããŒãžã ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžãæã€ã¯ã©ã¹ã§ãã ã€ãŸã ãã®ãããªåã¯ã©ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãžã«å¯Ÿå¿ãããã®ããŒãžã®ãã±ãŒã¿ãŒãšWebèŠçŽ ãå«ã¿ãŸãã ããã«ã圌ã¯ãã®ããŒãžã§ãã«ããŒã¯ã©ã¹ã«ãã£ãŠäœ¿çšãããåºæ¬ã¡ãœãããæã£ãŠããŸãã
ã§ããã ãå°ããªèŠçŽ ã«äŸµå ¥ããããšã¯è¯ãç¿æ £ã ãšæããŸãã ããšãã°ãããŒãžã«ãããã¢ãããŠã£ã³ããŠã衚瀺ãããå Žåã¯ããã®ãŠã£ã³ããŠçšã«å¥ã®ã¯ã©ã¹ãäœæããããšããå§ãããŸãã æçåã¯ãã¹ãŠçŽç²ã§ãã¢ããªã±ãŒã·ã§ã³èªäœã«äœããåæ ããå¿ èŠããããŸãã
ãŸãããã®èšäºã§èª¬æããã¢ãããŒãã§ã¯ãåã¡ãœããã¯ãå¯èœãªå Žåã¯åžžã«ãããŒãžã®ã³ããŒãè¿ãããšãåæãšããŠããŸãã ããšãã°ã[ãã°ã€ã³]ãã¿ã³ãã¯ãªãã¯ãããšãã¡ã€ã³ããŒãžã«ç§»åããŸãã ãã®çµæãããã°ã€ã³ããã¿ã³ãã¯ãªãã¯ããã¡ãœããã¯ãã¡ã€ã³ããŒãžãèšè¿°ãããŠããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ã¡ãœããå ã®ã¢ã¯ã·ã§ã³ãã©ãã«ãè¡ããªãå Žåã¯ãã¡ãœãããé 眮ãããŠããããŒãžã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
ããã«ãããããŒãžã®ã¡ãœããã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸã-
loginPage. TypeUserName(userName). TypePassword(password). ClickLoginButton();
æããã«ãTypeUserNameã¡ãœããã¯ä»ã®ããŒãžãžã®é·ç§»ããããããªãããããã®ã¡ãœããã¯LoginPageããŒãžã®ã€ã³ã¹ã¿ã³ã¹ïŒãããé 眮ãããŠããããŒãžïŒãè¿ããŸãã åãããšãTypePasswordãšããã¡ãœããã«ãåœãŠã¯ãŸããŸãã ãã ããClickLoginButtonã¡ãœããã¯ã¡ã€ã³ããŒãžã«é·ç§»ãããããLandingPageã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ã¡ã€ã³ããŒãžïŒLandingPageïŒããã¡ãœãããåŒã³åºãå¿ èŠãããå Žåã¯ããããïŒãïŒãæ¿å ¥ããã ãã§ãããã«ã¡ã€ã³ããŒãžã®ãã¹ãŠã®ã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãã
äŸã«æ»ããŸãããã ã·ã¹ãã ã«ãã°ã€ã³ããããŒãžãšããã°ã€ã³åŸã«ååŸããããŒãžã®2ã€ã®ããŒãžããããŸãã
LoginPageã¯ã©ã¹ãšLandingPageã¯ã©ã¹ãäœæããŸãã
ã·ã¹ãã ã«ãã°ã€ã³ããããŒãžã§ãè«ççã«ç解ã§ãã3ã€ã®ã¢ã¯ã·ã§ã³ïŒãã¹ãã®äžç°ïŒãå®è¡ããŸãããã£ãŒã«ãã«ãŠãŒã¶ãŒåãå ¥åãããã£ãŒã«ãã«ãã¹ã¯ãŒããå ¥åããŠEnterãã¿ã³ãã¯ãªãã¯ããŸãã
ååŸããããŒãžã§ã¯ãïŒãã¹ãã®äžç°ãšããŠïŒ1ã€ã®ã¢ã¯ã·ã§ã³ã®ã¿ãå®è¡ããŸã-ããŒãžã®å³äžé ã«ãŠãŒã¶ãŒåãæ£ãã衚瀺ãããããšã確èªããŸãã
public class LoginPage : TestFramework { [FindsBy(How = How.XPath, Using = USER_NAME_TEXT_FIELD)] public IWebElement userNameTextField; [FindsBy(How = How.XPath, Using = PASSWORD_TEXT_FIELD)] public IWebElement passwordTextField; [FindsBy(How = How.XPath, Using = LOGIN_BUTTON)] public IWebElement loginButton; public static LoginPage GetLoginPage(){...} public LoginPage TypeUserName(string userName){...} public LoginPage TypePassword(string password){...} public LandingPage ClickLoginButton(){...} public const string USER_NAME_TEXT_FIELD = "//input[@id='email']"; public const string PASSWORD_TEXT_FIELD = "//input[@id='pass']"; public const string LOGIN_BUTTON = "//label[@id='loginbutton']/input"; }
äžèšã®äŸã«ã¯ãGetLoginPageïŒïŒã¡ãœããããããŸãã åæåãããèŠçŽ ãæã€ãã®ããŒãžã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
ãŸããããŒãžã§ç¶æ¿ã䜿çšããããšã®äŸ¿å©ãã匷調ããããšæããŸãã ããšãã°ãã»ãšãã©ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãŠã®ããŒãžã«äžéšïŒããããŒïŒã衚瀺ãããŸãã ãã®å ŽåãHeaderãå¥ã®ã¯ã©ã¹ã§èšè¿°ããä»ã®ãã¹ãŠã®ããŒãžããã®ã¯ã©ã¹ã®çžç¶äººã«ããããšãéåžžã«äŸ¿å©ã§ãã ãã®åŸãããããŒã¡ãœããã¯ã©ã®ããŒãžããã§ãå©çšã§ããŸãã
ç¶æ¿ã¯ããã§ãã¯ããã¯ã¹ãã¯ãªãã¯ãããšãã©ãŒã å šäœã衚瀺ãããå Žåã«ã䜿çšã§ããŸãã æ倧ã®è£ 食ã®ååã«åºã¥ããŠããã®ãã©ãŒã ãå¥ã®ã¯ã©ã¹ã«é 眮ããããšããå§ãããŸãã ãããåæã«ãããŒãžèªäœã®ãã¹ãŠã®èŠçŽ ã¯è¡šç€ºããããŸãŸã§ããã ããŒãžã®èŠçŽ ãšã¡ãœãããå©çšã§ããããã«ããã©ãŒã ãããŒãžã®åŸç¶ã«ããããšããå§ãããŸãã
ãã«ããŒã¯ã©ã¹ã®ããã¬ã€ã€ãŒãªãã§ãããžã§ã¯ãããã«ããããã®ãããèŠãŸããã çŽæ¥ã¢ã¯ã»ã¹ãããããŒãžã¡ãœããããã¹ãããŸãã
ãã®ã¢ãããŒãã«ã¯æ¬¡ã®æ¬ ç¹ããããŸãã èªååãããžã§ã¯ãã§ã¯ãããã€ãã®ããŒãžã®åºæ¬ã¢ã¯ã·ã§ã³ãçµã¿åãããã¡ãœãããå¿ èŠã§ãã ãã®äŸã«ã¯ãDoLoginïŒïŒãšããã¡ãœããããããŸãã å®å šã«ã¯èª¬æããŸããã§ããã æ£ããèšè¿°ããå Žåãæåã¯èª°ããã°ã€ã³ããŠããªãããšã確èªãããã°ã€ã³ããŠããå Žåã¯çµäºããŠããã°ã€ã³ããŠããããŒãžã«ç§»åããå¿ èŠããããŸãã ãã®æ¹æ³ã¯ããã«å ã«é²ã¿ãå®äºåŸãã¡ã€ã³ããŒãžãããŒããããŠããããšã確èªããå¿ èŠããããŸãã ãã®ã¢ãããŒãã®åºæ¬ãç°¡åã«äŒããããã«ããããå®è£ ããŸããã§ããã
ãã ãããã®ã¡ãœãããLoginPageããŒãžã®ã¯ã©ã¹ã«é 眮ãããšïŒãã«ããŒã¯ã©ã¹ãæã€ã¬ã€ã€ãŒã®ãªããããžã§ã¯ãã®ããã«ïŒãè«çã¢ãžã¥ãŒã«éã®ãã®æ確ãªå¢çã倱ãããŸãã çµå±ã®ãšããããã°ã€ã³æé ã¯ãã°ã€ã³ããŒãžã§ã¯ãªãéå§ããã³çµäºããŸãã
ããããã·ã¹ãã ã«å ¥ãããã®ãã£ãŒã«ãã®æ€èšŒããã§ãã¯ããããã®ããå€ãã®æ¹æ³ãå¿ èŠãªç¶æ³ãæ³åããŠãã ããã ãã®å ŽåãLoginPageã¯ã©ã¹ã¯ãLoginTestsã¯ã©ã¹ã®ã¿ãå¿ èŠãšããå€æ°ã®ã¡ãœããã§å€§ãããªããŸãã
ããŒãžã¯ã©ã¹ã®ãã®ãããªéå°ãªè€éãªã¡ãœããã¯ãäžæ¹ã§åºæ¬ã¡ãœããã®æ€çŽ¢ãè€éã«ããä»æ¹ã§è«çã¢ãžã¥ãŒã«éã®å¢çããããŸãã«ããŸãã
ãããããã«ããŒã¯ã©ã¹ã®äœæã«ã¯1ã€ã®èœãšãç©ŽããããŸãã 1çªç®ã®ã¯ã©ã¹ã®ãã¹ãã§äœ¿çšãããã¡ãœãããã©ããããã¯ç解ã§ããŸã-ãããã¯ãã®ãã¹ãã®ãã«ããŒã¯ã©ã¹ã«ãããŸãã ããããä»ã®ãã¹ãã¯ã©ã¹ã§äœ¿çšã§ããä»ã®è€éãªã¡ãœãããã©ãããã°ããã§ããããïŒ
ããã§ã¯ã次ã®ããã«é²ã¿ãŸã-è€éãªã¡ãœããïŒã€ãŸãã1ã€ä»¥äžã®ããŒãžã¯ã©ã¹ã®ããã€ãã®åºæ¬ã¡ãœããã䜿çšããã¡ãœããïŒãæã€åã ã®ã¯ã©ã¹ã匷調衚瀺ããŸãã ååã®ã¿ã€ãã¯NavigationUtilsã«ãªããŸãã ã¯ã©ã¹ã®ååãããã¢ããªã±ãŒã·ã§ã³å ã移åããããã®ã¡ãœãããå«ãŸããŠããããšã¯æããã§ãã ãŸãã¯LoginUtils-ã·ã¹ãã ã«å ¥ãããã®ãã¹ããå«ãã¯ã©ã¹ã«å ããŠãä»ã®ã¯ã©ã¹ã§äœ¿çšã§ãããã°ã€ã³ã¡ãœããã ããŸããŸãªãã¹ããå®è¡ããããã«ã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ãã³ããäœæããå¿ èŠãããå Žåã¯ãContentUtilsã¯ã©ã¹ãäœæã§ããŸãã
ç§ã®ã«ãŒã«ã¯åçŽã§ã-ãããã«ããŒã¯ã©ã¹ã®ãã®ã¡ãœãããããã¹ããŸãã¯ãã«ããŒã¯ã©ã¹ãæã€ä»ã®ã¯ã©ã¹ã«å¿ èŠãªå Žåããã®ã¡ãœããã¯å¯Ÿå¿ããUtilsã¯ã©ã¹ã«ç§»è¡ããŸãã ãã®ãããªUtilsã¯ã©ã¹ããŸã äœæãããŠããªãå Žåã¯ãäœæããŸãã
ãã®ã¢ãããŒãã¯ããããžã§ã¯ããè¿œå ã®ã¬ã€ã€ãŒã§å€å°è€éã«ããŸãããè«çã¢ãžã¥ãŒã«éã«æ確ãªå¢çç·ã眮ããŸãã ããŒãžã¯ã©ã¹ã«ã¯ããã®ããŒãžã§ã®ã¿å®è¡ã§ããæãåºæ¬çãªã¡ãœããã®ã¿ãé 眮ãããããã§ãã
ãµãŒãã¹ã«ã€ããŠããå°ãã
ç§ãåå ãããããžã§ã¯ãã§ã¯ããã«ããããã«ããžã®ã¢ããªã±ãŒã·ã§ã³ã®å€æŽã®å€§éšåã¯ãã±ãŒã¿ãŒããæ¥ãŸããã å¥ã®å°ããªéšåã¯ãèŠçŽ ã«åœ±é¿ãäžããæ¹æ³ã説æããŸããïŒããšãã°ã以åã¯éåžžã®ClickïŒïŒã³ãã³ãã§è§£æ±ºãããŠãããã®ã§ãããæ°ãããã«ãããªãªãŒã¹ãããåŸãMouseMoveïŒïŒãMouseDownããã³MouseUpïŒïŒããã®äžé£ã®ã³ãã³ããæ¢ã«å¿ èŠã§ããïŒ ãã®ãããªå Žåããã¹ãŠã®ãµããŒãã¯ããŒãžã¯ã©ã¹ã®å€æŽã«åž°çããŸãã ãããŠãããªããèŠãããã«ããããã¯æãåå©çšãããã¯ã©ã¹ã§ãã ãããã£ãŠããµããŒãã®åŽåã¯æå°éã§ãã
æ°ãããã«ãã§ã¢ã¯ã·ã§ã³ã®è«çãã§ãŒã³ãå€æŽãããå ŽåããããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ãšã³ãã£ãã£ã«ç§»åããããã®ãªã³ã¯ããããã¡ãã¥ãŒããå¥ã®ã¡ãã¥ãŒã«ç§»åããŸããã ãã®åŸããµããŒãã¯æ¢ã«ãã«ããŒã¯ã©ã¹ãšUtilsã¯ã©ã¹ã«åœ±é¿ããŸãã
éåžžã«ãŸãã«ããã¹ãèªäœã®ããžãã¯ãå€æŽãããå Žåããã¹ãã§ã¯ã©ã¹ããµããŒãããå¿ èŠããããŸãã
å®å šãªæ§é ã
ç§èªèº«ã¯ããã®ãããªãããžã§ã¯ãã®çæ³çãªæ§é ãæšæž¬ããŸããããç§ã¯ãããè¿œãããšãã§ãããåªåããããšããã§ããªãã£ããšåçœããŸãã
ããã¯ç°¡åãªã«ãŒã«ã®ã»ããã§ãïŒ
1.ãã¹ãã¯ã©ã¹ã¯ããã«ããŒã¯ã©ã¹ãšUtilsã¯ã©ã¹ã®ã¿ã䜿çšããŸãã ããŒãžã¯ã©ã¹ãç¹ã«SeleniumãšWebdriverã§åäœãããã¬ãŒã ã¯ãŒã¯ã¡ãœããã¯äœ¿çšããŸããã ãã¬ãŒã ã¯ãŒã¯ã®æ®ãã®ã¡ãœããã䜿çšã§ããŸãã
2.ãã«ããŒã¯ã©ã¹ã¯ãããŒãžã¯ã©ã¹ãšUtilsã¯ã©ã¹ã®ã¿ã䜿çšããŸãã Seleniumããã³Webdriverã§æ©èœãããã¬ãŒã ã¯ãŒã¯ã¡ãœããã¯äœ¿çšããŸããã ãã¬ãŒã ã¯ãŒã¯ã®æ®ãã®ã¡ãœããã䜿çšã§ããŸãã
3. Utilsã¯ã©ã¹ã¯ããŒãžã¯ã©ã¹ã®ã¿ã䜿çšããŸãã SeleniumãšWebdriverã§åäœãããã«ããŒã¯ã©ã¹ãšãã¬ãŒã ã¯ãŒã¯ã¡ãœããã¯äœ¿çšããŸããã ãã¬ãŒã ã¯ãŒã¯ã®æ®ãã®ã¡ãœããã䜿çšã§ããŸãã
4.ããŒãžã¯ã©ã¹ã¯ããã¬ãŒã ã¯ãŒã¯ã¡ãœããã®ã¿ã䜿çšããŸãã Seleniumã¡ãœãããšWebdriverã¡ãœãããçŽæ¥äœ¿çšããªãã§ãã ããã
ãã®ãããªã«ãŒã«ãæåã«éµå®ããããšã¯ãå°æ¥ã®ãããžã§ã¯ãã§ã®èŠçãªåé¡ãåé¿ããã®ã«åœ¹ç«ã¡ããµããŒããå¯èœãªéãç°¡åã«ããã§ãããã
ç§ã®èŠ³ç¹ããã¯ãå€ãã®æ¢åã®ãããžã§ã¯ãã¯ã説æããã¢ãããŒãã«åŸã£ãŠããçŽãããšãã§ããŸãã ç§èªèº«ããã®ãããªçµéšãããŸããã ãããŠããã®ãããªç§»è¡ã«ããã倧éã®éè€ããã³ãŒããæããã«ãªããŸããã
èªååããã¹ãããããã«å€§èŠæš¡ãªãããžã§ã¯ãã«åå ãã人ã¯ãããã«ç§©åºããªããã°çãæ®ããªãããšãç解ããŠããŸãã ãããã£ãŠããŸã èããŠããªããèããŠããªããè©ŠããŠããªãå Žåã¯ãåãããã«è©ŠããŠã¿ãããšããå§ãããŸãã