Imagriumã¯ããããã®ç 究ã®1ã€ã®çµæã§ãã æè¡çã«ã¯ãããã¯åœç€Ÿãäœæããç»åèªèã䜿çšããã¢ãã€ã«Android / iOSã¢ããªã±ãŒã·ã§ã³ã®ã¯ãã¹ãã©ãããã©ãŒã ãã¹ãçšã®Jythonãã¬ãŒã ã¯ãŒã¯ã§ãã ããã¯ãå®éã®PââyDevãããžã§ã¯ããšããŠæ瀺ãããŸããããŒãºã«åãããŠå€æŽã§ããŸãã ã³ãŒãã¯MITã©ã€ã»ã³ã¹ã®äžã§é åžãããGithub ã§å ¥æã§ããŸã ã ãã®èšäºã§ã¯ããã¬ãŒã ã¯ãŒã¯ã®åçãšãã®æ§é ã«ã€ããŠèª¬æããŸãã
åäœåç
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯2幎é䜿çšãããŠããããã®éã«æé·ããŠéçºãããæŠéãããžã§ã¯ãã§ã®ã¢ããªã±ãŒã·ã§ã³ã®çµéšãåãå ¥ããŸããã åæã«ãããããåºæ¬çãªååã¯ããŸãå€ãã£ãŠããŸããã ãããã¯æ¬¡ã®ãšããã§ãã
ç°ãªããã©ãããã©ãŒã ã§åããã¹ãã䜿çšãã
éåžžãã客æ§ã¯ããã€ãã®ãã©ãããã©ãŒã ãã»ãšãã©ã®å ŽåAndroidãšiOSåãã«ã¢ããªã±ãŒã·ã§ã³ãããã«æ³šæããŸãã ä»æ§ã¯1ã€ã ãã§ãæ©èœãã¹ãã¯åãã§ãããããç§ãã¡ã®èŠ³ç¹ããæãå¹æçãªã®ã¯ãç°ãªããã©ãããã©ãŒã ã«1ã€ã®ãã¹ãããŒã¹ãæã€ããšã§ãã ã€ãŸããç°ãªããã©ãããã©ãŒã ã§åããã¹ãã«åæ Œããå¿ èŠããããŸãã
ããžãã¯ãããªãœãŒã¹ãåé¢ãã
ã¯ãã¹ãã©ãããã©ãŒã ãã¹ããå¯èœã«ããããŒã«ã¯ã2ã€ã®ã¿ã€ãã«åé¡ã§ããŸãã
- å ±éã®APIãšãå ±éã®åŒã³åºãã軞åºæã®åŒã³åºãïŒMonkeyTalkãAppiumãRobotiumïŒã«å€æãããµãŒãã¹ä»²ä»ãæäŸããŸãã
- ãã¿ãŒã³èªèæ¹æ³ã䜿çšããïŒBorland Silk MobileãeggPlantïŒã
ç§ãã¡ã¯æåã®ã¢ãããŒãã®å€§ãã¡ã³ã§ããããã®æç¹ã§ã¯ããŒã«ã®äžéšããŸã ååšãããä»ã®ããŒã«ã¯éåžžã«å®å®ããŠåäœããŠããªãã£ãããã代æ¿ã®äœæãè©Šã¿ãå¿ èŠããããŸããã åæã«ãå¥ã®èšé²åçããŒã«ã¯å¿ èŠãããŸããã§ããããã®ãããªããŒã«ã§äœæããããã¹ãã¯ãããã«ç¶æããã®ãéåžžã«é£ãããªãããã§ãã ãªãã§ïŒ ãªããªãããããã®ãªãœãŒã¹ã¯ä»äºã®è«çã«é¢ä¿ããŠããããã§ãã ããšãã°ãäœããã®åºæ¬çãªæäœãå€æŽããå Žåããã¹ãŠã®ããã¹ãã®ç»åã転éããã ãã§ãªããå¿ èŠãªãã¹ãã®å¿ èŠãªæé ãå€æŽããå¿ èŠããããŸãã 人æ°ã®ããPageObjectãã¿ãŒã³ã䜿çšããŠããã®ãããªç¡æå³ã§è²»çšã®ãããäœæ¥ãé¿ããããšæããŸããã
ç¶ç¶çãªçµ±åãšç°¡åãªãããã°ããµããŒã
ãã¹ãŠã®ãããžã§ã¯ãã¯Jenkinsã«ãã£ãŠèªåçã«åéãããããããã®ãã¬ãŒã ã¯ãŒã¯ã®ã³ãŒãã®æåã®è¡ãããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããèªåçã«èµ·åã§ããããã«ããŸãã æåã¯ãããã»ã©ç°¡åã§ã¯ãããŸããã§ãããã€ã¡ãŒãžãæäœããããã«ãSikuliïŒæã人æ°ã®ããææžåãããç¡æã®ãœãªã¥ãŒã·ã§ã³ïŒã䜿çšããããšã«ããŸãããã¡ãªã¿ã«ãjsonã®ãµããŒãã¯ãŸã ãããŸããã§ããïŒã¯ãïŒãunittestã«ã¯ããããã®ããããæ©èœïŒããšãã°ãèªåæ€åºãã¹ãïŒããããŸããã§ããã ããããæéãçµã€ã«ã€ããŠããããã®å°é£ã¯å æããããã¹ãçµæã¯jUnit圢åŒã§å©çšã§ããããã«ãªããAntã¯ããããçµ±èšã®ããçŸããããŒãžã«ããŸãã
2çªç®ã®ãã€ã³ãã«ãããšãSikuli IDEãã芧ã«ãªã£ãæ¹ã¯ã10è¡ã®ã¢ããªã±ãŒã·ã§ã³ãããå°ãæ·±å»ãªããšãããã®ã¯èŠçã ãšç解ããŠããŸãã ãããã¬ããªãããã ãã®å Žåã PyDev Eclipseã®äœ¿çšã«åãæ¿ããã«ã¯ããã§ååã§ãããPyDevEclipseã¯ããã°ã©ããŒã«éŠŽæã¿ããããéçºãé«éåããããã®å€ãã®è£å©æ©èœãåããŠããŸãã
ãã¹ãŠã®ãã¹ãã§åãåæã·ã¹ãã ç¶æ ã確ä¿ãã
ç§ãã¡ã¯jUnitãããã¹ãã®çžäºç¬ç«æ§ã®ã¢ã€ãã¢ãåããŸãã ããã«ããããã¹ãã䞊è¡ããŠå®è¡ããããã¹ããããã§ãã¯ãå®è¡ãããã§ããŸãã ç§ãã¡ãããã«è¿œã蟌ãã å¥ã®ã¿ã¹ã¯ã¯ãå®è¡äžã®ãã¹ãã®åŽ©å£ã§ãã ãããã¹ãã®å€±æãä»ã®ãã¹ãã®å®è¡ã«åœ±é¿ãäžããªãã·ã¹ãã ãå¿ èŠã§ããã ãã®çµæãAndroidã§ã¯ãšãã¥ã¬ãŒã¿ãŒã®ã¹ãããã·ã§ããïŒã¹ãããã·ã§ããïŒã䜿çšããiOSã§ã¯ã·ãã¥ã¬ãŒã¿ãŒã®ãªã»ããæ©èœã䜿çšããããšã«ããŸããã
ãšãã¥ã¬ãŒã¿ãŒã®ããŠã³ããŒããšå¿çã¯ããã¹ãã®å®è¡ã決å®çã«é ãããã¹ãã§ã¯ãããŸãã
ç®±å ¥ãã®Androidãšãã¥ã¬ãŒã¿ãŒãšã¯èšããªãiOSã·ãã¥ã¬ãŒã¿ãŒã®é床ãæ¬åœã«æ°ã«å ¥ããŸããã IntelãæäŸããHAXMããã³x86ã€ã¡ãŒãžã«æåŸ ããããŸããããåé¡ã¯ãããŒãžã§ã³4.4ããåã®ãããã®ã€ã¡ãŒãžã«ã¯ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããGoogle APIãå«ãŸããŠããªãããšã§ãïŒã€ãŸããã¢ããªã±ãŒã·ã§ã³ã¯åã«ãããã®ã€ã¡ãŒãžãé 眮ããŸããã§ããïŒã 次ã«ããã®APIãå«ã4.4ã€ã¡ãŒãžã¯äžå®å®ã«ãªããŸããïŒããšãã°ãã¢ããªã±ãŒã·ã§ã³ãåã€ã³ã¹ããŒã«ãããšã¯ã©ãã·ã¥ããå ŽåããããŸãïŒã ãã®ãããã¹ãããã·ã§ããã®äœæãšç®¡çã«GenymotionãšVirtualBoxãéžæããŸãã ã
ãããã®ååãå ±æããããçš®ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãèããŠããå Žåãç§ãã¡ã®éžæè¢ã®1ã€ãšããŠæ€èšããããšããå§ãããŸãã
ç°å¢èŠä»¶
Imagriumã¯ãJava 7 x64ãšWindows 7 x64ïŒ winãªããžããªãã©ã³ãïŒãŸãã¯MacOS 10.9ïŒ iosãªããžããªãã©ã³ãïŒã§æ£åžžã«å®è¡ãããŸãã
æŽå²çã«ãWindowsã§ã¯Androidã®ã¿ãMacOSã§ã¯iOSã®ã¿ããããããã¹ããããŸããã
äœæ¥å®æŒ
Imagriumã§ãã¹ããäœæããããã®ã«ãŒã«ãç°¡åã«èª¬æããåã«ããã¬ãŒã ã¯ãŒã¯ã®æ©èœãåãããããªïŒè±èªã®å¹ãåºãïŒãèŠããããšæããŸãã ãã®ãããªã¯ãiOSããã³Androidã§ã®HopHopã¢ããªã®ãã¹ãã瀺ããŠããŸãã
ãã¹ãã®æžãæ¹
Imagriumã§èšè¿°ãããã³ãŒãã¯ã ããŒãžãšãã¹ãã® 2ã€ã®ãããã¯ã«åå²ã§ããŸãã ãã®ã°ã«ãŒãåã§ã¯ããã¹ãã¯ç°ãªãããŒãžã§å®è¡ãããäžé£ã®æäœãšãããŒãžéã®é·ç§»ã§ãã äŸïŒ
authPage = AuthPage.load(AppLauncher.box, self.settings) fbAuthPage = authPage.signUpFb() fbAuthPage.fillEmail(self.settings.get("Facebook", "email")) fbAuthPage.fillPassword(self.settings.get("Facebook", "password")) fbConfirmPage = fbAuthPage.login() lobbyPage = fbConfirmPage.confirm()
ã³ãŒãããæšæž¬ã§ããããã«ãæåã«ãã¹ãã¯AuthPageããŒãžãããŒããã次ã«ããããfbAuthPageã«é²ã¿ãå¿ èŠãªããŒã¿ãå ¥åããŠãã©ãŒã ãéä¿¡ãããŠãŒã¶ãŒã確èªããŠlobbyPageã«éä¿¡ããŸãã èšãæãããšããã¹ãã¯ããŒãžããŠã©ãŒã¯ã¹ã«ãŒããŠãç解ã§ããããã«å®è¡ããŸãã æäœãã¹ã¿ãŒãããŒãžå ã«æäœã®å®è£ ãæ®ããŸãã ã€ãŸã ãã¹ãã¯éåžžã«åçŽãªã°ã«ãŒãã§ããããã¹ãã®æžãæ¹ãåŠã¶ããã«ã¯ãããŒãžã®æžãæ¹ãåŠã¶å¿ èŠããããŸãã ãããéåžžã«ç°¡åã§ãã
ããŒãžãæžã
ããŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç»é¢/ã¢ã¯ãã£ããã£/ããŒãžã®Jythonè¡šçŸã§ãã æè¡çã«ã¯ãããã¯ãããã®ãã£ãŒã«ããå¶åŸ¡ãããã£ãŒã«ããšã¡ãœãããæã€ã¯ã©ã¹ã§ãã æãé£ããã±ãŒã¹ã§ã¯ã次ã®ããã«ãªããŸãã
class FbAuthPage(Page): email = ResourceLoader([Resource.fbEmailFieldiOS, Resource.fbEmailFieldiOS_ru]) password = ResourceLoader([Resource.fbPasswordFieldiOS, Resource.fbPasswordFieldiOS_ru]) actionLogin = ResourceLoader([Resource.fbLoginBtniOS, Resource.fbLoginBtniOS_ru]) def __init__(self, box, settings): super(FbAuthPage, self).__init__(box, settings) self.email = self.box self.password = self.box self.actionLogin = self.box self.settings = settings self.waitPageLoad() self.checkIfLoaded(['email', 'password']) def fillEmail(self, text): self.email.click() self.waitPageLoad() self.inputText(text)
ãã®ã¹ããããã¯ãImagriumã®å©ç¹ã®ã»ãšãã©ã䜿çšããŠããããããã®ã¹ããããã«ã€ããŠè©³ãã説æããŸãã ãã¬ãŒã ã¯ãŒã¯ã®æ©èœã
ãã£ãŒã«ãå®çŸ©ãšããŒã«ãªãŒãŒã·ã§ã³
ãã®è¡ããå§ããŸãããïŒ
email = ResourceLoader([Resource.fbEmailFieldiOS, Resource.fbEmailFieldiOS_ru])
ãã®ã¹ããããã¯ã é»åã¡ãŒã«ããŒãžãã£ãŒã«ããã°ã©ãã£ãã¯ãªãœãŒã¹ïŒç»åãŸãã¯è¡ïŒã«æ¥ç¶ããŸã ã ãã®å Žåããã£ãŒã«ãã2ã€ã®ãªãœãŒã¹ã«äžåºŠã«é¢é£ä»ããŸãïŒè±èªãšãã·ã¢èªã®ãã±ãŒã«ã®å ŽåïŒã ããŒãžãé»åã¡ãŒã«ãã£ãŒã«ããèŠæ±ãããšãã·ã¹ãã ã¯ãããã®ç»åã®1ã€ãèŠã€ããããšããæåã«èŠã€ãã£ãç»åã«é¢é£ä»ããããé åãè¿ããŸãã
å¥çŽã«åŸã£ãŠãã°ã©ãã£ãã¯ãªãœãŒã¹ãresãã£ã¬ã¯ããªã«ä¿åããŸãã ãªãœãŒã¹ãæå®ããã«ã¯ã次ã®ããã«ããªãœãŒã¹ãžã®ãã¹ãŸãã¯ResourceLoaderã«ããã¹ããæž¡ãå¿ èŠããããŸãã
email = ResourceLoader("res/pages/ios/fb_auth/fbEmailFieldiOS.png", "Password")
ãã ããã³ãŒãã®å 容ã®æè»æ§ãšå©äŸ¿æ§ã®ããã«ããªãœãŒã¹ãžã®ãã¹ãsrc.core.r.Resourceãªããžã§ã¯ãã®å€æ°ã«ä¿åããŸãã
åèš ïŒã°ã©ãã£ãã¯ãŸãã¯è¡ã管çããã«ã¯ã察å¿ããããŒãžã«ResourceLoader宣èšãè¿œå ããå¿ èŠããããŸãã
ããŒãžã®åæåãšãã£ãŒã«ãæ€èšŒ
ãã£ãŒã«ã宣èšã¯ãå¿ èŠãªæ¥ç¶ã®ã¿ãèšå®ããŸããããã䜿çšããã«ã¯ããã£ãŒã«ããåç §ããå¿ èŠããããŸãã ãã®ãããªåŒã³åºãã¯ããã£ãŒã«ãã§äœããã®æäœïŒãã©ãã°ãã¯ãªãã¯ãªã©ïŒã䜿çšãããšãããŸãã¯ããŒãžãåæåããããšãã«çºçããŸãã æåŸã®æäœã¯éåžžã«éèŠã§ããæåã«ããã£ãŒã«ãã®æ€çŽ¢é åãèšå®ãïŒéåžžã¯ãšãã¥ã¬ãŒã¿ã®å¢çã«çµãããïŒãç®çã®ããŒãžã«ããããšã確èªã§ããããã§ãã ãããã£ãŠã FbAuthPageã®äŸã䜿çšããŠãããŒãžåæåã³ãŒãã§äœãèµ·ãããã詳ããèŠãŠã¿ãŸãããã
ãŸããåžžã«src.core.page.Pageã¯ã©ã¹ããããŒãžãç¶æ¿ããå¿ èŠããããŸãã
class FbAuthPage(Page):
ããã«ãããããšãã°ãããŒãžå šäœã®èªã¿èŸŒã¿ãåŸ ã€æ¹æ³ãªã©ãäžè¬çãªããŒãžç®¡çæ¹æ³ã«ã¢ã¯ã»ã¹ã§ããŸãã ãŸããããŒãžãåæåããããšãã«èŠªã³ã³ã¹ãã©ã¯ã¿ãŒãå®è¡ããå¿ èŠããããŸãã
def __init__(self, box, settings): super(FbAuthPage, self).__init__(box, settings)
åæåã®æåŸã®æ©èœã¯ããã£ãŒã«ãã®æ€çŽ¢é åãèšå®ããæ©èœã§ããéåžžãããã¯ãšãã¥ã¬ãŒã¿ãå æããé åã§ããããã®äžã§ã®ã¿æ€çŽ¢ããããã«ã次ã®ããã«èšè¿°ããŸãã
self.email = self.box self.password = self.box
boxãã©ã¡ãŒã¿ãŒã¯ããšãã¥ã¬ãŒã¿ãŒã®ã¹ãããã·ã§ãããååŸããåŸãæåã«ã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«æåã«èæ ®ãããããŒãžããããŒãžã«æž¡ãããŸãã ãã詳现ã«ã¯ãäŸãã°res / pages / android / hdpi / coreãã2è¡ïŒãšãã¥ã¬ãŒã¿ãŒã§ã¯åçŽããã³æ°Žå¹³ïŒãåãããã·ã¹ãã ã¯ããããããŒãžäžã§æ€åºããããããããšãã¥ã¬ãŒã¿ãŒé åãæ§ç¯ããŸãã ãã£ãŒã«ãã«äœãå²ãåœãŠãªãå Žåãã·ã¹ãã ã¯ç»é¢å šäœã§echãæ€çŽ¢ããŸãïŒéåžžãæ€çŽ¢ã®å質ã«åœ±é¿ããŸãïŒãããã¯ãããšãã°ãšãã¥ã¬ãŒã¿ã®ããŒããŠã§ã¢ãã¿ã³ãæŒããªã©ãäœããã®ãšããŸããã¯ãªå Žåã«å¿ èŠã«ãªãããšããããŸãã
éåžžãããŒãžãåæåãããšããå¿ èŠãªãã£ãŒã«ããããŒãžäžã«ããããšã確èªãã次ã®ããã«ããŸãã
self.checkIfLoaded(['email', 'password'])
äžéšã®ãã£ãŒã«ãã¯åæåäžã«è¡šç€ºãããªãå Žåãããã衚瀺ããããã£ãŒã«ãã®ã¿ãæå®ããŸãã ããŒãžã§ãã£ãŒã«ããèŠã€ãããªãå Žåã AssertionErroräŸå€ãã¹ããŒãã ããã¹ãã倱æãã詳现ãæšæºåºåã«å ±åãããŸãã
åèš ïŒã·ã¹ãã ã«ãšãã¥ã¬ãŒã¿ãŒå ã®ãã£ãŒã«ããæ€çŽ¢ããããå Žåã¯ã self.boxãå²ãåœãŠãŸãã self.checkIfLoadedïŒïŒã§ããŒãžããŒãžã³ãã§ãã¯ã䜿çšããŸãã
ãã£ãŒã«ãã§ã§ããããš
FbAuthPageã®ã³ãŒãäŸã§ã¯ã ã¡ãŒã«ãã£ãŒã«ãã§clickïŒïŒã¡ãœããã䜿çšããŸããã
self.email.click()
åãã£ãŒã«ãã¯å®éã«ã¯Sikuliã®Matchãªããžã§ã¯ãã§è¡šãããããã察å¿ããä»æ§ïŒãã©ãã°ãã¯ãªãã¯ããã³ãããªãªãŒã¹ãããã¹ãã®å ¥åãªã©ïŒã§èšè¿°ãããŠãããã¹ãŠã®ããšãå®è¡ã§ããŸãã
æ§æã¢ã¯ã»ã¹
æ§æã¯ããã¹ãã®å®è¡ã®éåžžã«éèŠãªéšåã§ãã å ·äœçã«ã¯ããã¹ããå®è¡ãããã©ãããã©ãŒã ããã¹ããã¢ããªã±ãŒã·ã§ã³ã決å®ããŸãã ãŸããæ§æã«å€æ°ãç»é²ããŠããã¹ããŸãã¯ããŒãžã³ãŒãã§äœ¿çšããããšãã§ããŸãã
FbAuthPageã¯ã©ã¹ã®äŸã§ã¯ã次ã®è¡ãèŠãããšãã§ããŸãã
self.settings = settings
ããã§ã èšå®å±æ§ã¯ãçŸåšã®æ§æãã¡ã€ã«ã«é¢é£ä»ããããŠããConfigParserãµã³ãã«ã§ãããããã£ãŠãäœæ¥ãããšãã«å ¬åŒä»æ§ã®ãã¹ãŠã®ã¡ãœããã䜿çšã§ããŸãã Imagriumã¯åãã¹ãã«èšå®ãè¿œå ããããããã¹ãã§æ§æãçŽæ¥äœ¿çšã§ããŸãã
æ§æã®äœ¿çšäŸïŒ
self.settings.get("Facebook", "email")
OSäŸåã®ã¡ãœãã
ããšãã°ãæ»ããã¿ã³ïŒAndroidå°çšïŒãæŒãããããã¹ããå ¥åããå¿ èŠãããå ŽåããããŸãïŒSikuliã¯åã«ããã¹ããéåæçã«å ¥åããããããããè¡ãããšãã§ããŸãããéåžžãäžéšã®æåã«ã¯è¿œå ããæéããããŸããïŒã ãããã®æ©èœãæäŸããããã«ãããŒãžã«OSåºæã®æ©èœãæäŸããã¯ã©ã¹ãå°å ¥ãããŸããã
å®éã«ã¯ã次ã®ããã«ãªããŸãïŒå€éç¶æ¿ïŒïŒïŒ
class FbAuthPageiOS(FbAuthPage, iOSPage):
ãŸãã¯ïŒ
class FbAuthPageAndroidHdpi(FbAuthPage, AndroidPage):
åèšïŒ OSåºæã®æ©èœãå¿ èŠãªå Žåã¯ãç®çã®ã¯ã©ã¹ããç¶æ¿ããŸãã
ããŒãžã®æ§æ
åã®ã»ã¯ã·ã§ã³ã§ã¯ãæåã«FbAuthPageã«ã€ããŠèª¬æã ã次ã«FbAuthPageiOSããã³FbAuthPageAndroidHdpiã«ãžã£ã³ãããŸãã ã ãã®ã»ã¯ã·ã§ã³ã§ã¯ããããã®ã¯ã©ã¹ãšã¯äœãããªãå¿ èŠãªã®ãããããŠFbAuthPageã«ã©ã®ããã«é¢ä¿ããã®ãã«ã€ããŠèª¬æããŸãã
æåã«ãç°ãªããã©ãããã©ãŒã ã§åããã¹ããå®è¡ããããšè¿°ã¹ãŸãããã1ã€ã®ãã©ãããã©ãŒã ã®ãã¬ãŒã ã¯ãŒã¯å ã§ãããã°ã©ãã£ãã¯ãªãœãŒã¹ã®è¡šç€ºã«é倧ãªéããçããå¯èœæ§ããããŸãã ããšãã°ãhdpiã®ãªãœãŒã¹ã¯xhdpiãšç°ãªãå ŽåããããiOSã®ãªãœãŒã¹ã¯Androidã®ãªãœãŒã¹ãšç°ãªãå ŽåããããŸãã ãã®å ŽåããªãœãŒã¹ã®ã¿ãç°ãªã ãããããæäœããæ¹æ³ã¯åããŸãŸã§ãïŒãŸãã¯ã¬ã€ãã©ã€ã³ã«åãããŠèª¿æŽãããŸãïŒã ç°ãªããã©ãããã©ãŒã ã®ãªãœãŒã¹ãåå®çŸ©ããããã®ãœãªã¥ãŒã·ã§ã³ãèãåºãå¿ èŠããããæšæºã®ç¶æ¿ã䜿çšããŸããã ã€ãŸããããŒãžã¯äžè¬ã¬ãã«ãšãã©ãããã©ãŒã åºæã¬ãã«ã®2ã€ã®ã¬ãã«ã«åããããšãã§ããŸãã
- äžè¬ããŒãžã«ã¯ãããŒãžäžã®ãªãœãŒã¹ãæäœããäžè¬çãªããžãã¯ãå«ãŸããŠããŸãã ãã®äŸã§ã¯ãããã¯FbAuthPageã§ãã ãããã®ã¡ãœããã¯ãiOSãšAndroidã®äž¡æ¹ã§åãããšãè¡ããŸãã
- ãã©ãããã©ãŒã äŸåã®ããŒãžã«ã¯éåžžãããŒãžå
šäœã®ãªãœãŒã¹ããªãŒããŒã©ã€ãããå¿
èŠããããªãœãŒã¹ã®ã¿ãå«ãŸããŸãã ãããã¯æ¬¡ã®ããã«ãªããŸãã
class FbAuthPageAndroidHdpi(FbAuthPage, AndroidPage): email = ResourceLoader([Resource.fbEmailFieldAndroidHdpi, Resource.fbEmailFieldAndroidHdpi_ru])
ãã®ãããªããŸããŸãªããŒãžã§ã¯ããã¹ããŸãã¯ããŒãžèªäœãããŒãããããŒãžã決å®ããããšã¯æãŸãããããŸããã Imagriumã§ã¯ãããŒãžãloadïŒïŒã¡ãœãããåŒã³åºãããšãã«æ§æãèªã¿åããå¿ èŠãªããŒãžãããŒãããã®ã¯ã·ã¹ãã ã®è²¬ä»»ã§ãã ã·ã¹ãã ãæ£ããã¯ã©ã¹ãããŒãããã«ã¯ããããã®ã¯ã©ã¹ã«æ確ãªååãä»ããå¿ èŠããããŸãã 詳现ïŒ
- iOSããŒãžã¯[å
±æããŒãž] + "iOS"ãšåŒã°ããå¿
èŠããããŸãïŒäŸïŒ FbAuthPageiOSïŒ ã ããã«ããã®ããŒãžã¯FbAuthPageã®åå«ã§ããå¿
èŠããããŸã ã
- AndroidããŒãžã«ã¯ããã«ãªãã·ã§ã³ããããŸã-ããã¯OSããŒãžã§ã³ãšå¯åºŠã§ãã æåã«ãã·ã¹ãã ã¯ã¯ã©ã¹[äžè¬ããŒãž] + "_" + "[ã¡ãžã£ãŒããŒãžã§ã³]" + "_" + "[ãã€ããŒããŒãžã§ã³]" + "_" + "Android" + "[å¯åºŠ]"ãããŒãããããšããŸãã äŸïŒ FbAuthPage_4_2_AndroidHdpi ã 圌女ããã®ãããªã¯ã©ã¹ãèŠã€ããããªãã£ãå Žåã圌女ã¯ããŠã³ããŒãããããšããŸãïŒ [äžè¬ããŒãž] + "Android" + "[å¯åºŠ]" ã äŸïŒ FbAuthPageAndroidHdpi ã
ããã§ãã¯ã©ã¹ãèŠã€ãããªãå Žåãã·ã¹ãã ã¯å¯Ÿå¿ãã説æãšãšãã«AssertionErrorãã¹ããŒãããã¹ãã«å€±æããŸãã
å®éã«ã¯ã次ã®ããã«ãªããŸãã
ãã¹ãã§ã¯
fbAuthPage = authPage.signUpFb()
AuthPageäžè¬ããŒãžã«ã¡ãœããããããŸãïŒ
def signUpFb(self): self.actionAgreeTermsBtniOS.click() self.actionSignUpFb.click() return FbAuthPage.load(self.box, self.settings)
ãã®ã¡ãœããã¯ã loadïŒïŒã¡ãœãããåŒã³åºããŸãããã®ã¡ãœããã§ã¯ãåŒã³åºãããŒãžã決å®ããŸãïŒããšãã°ã FbAuthPageiOSãŸãã¯FbAuthPageAndroidHdpi ïŒã
åèš ïŒããŒãžã®äžè¬çãªããžãã¯ãå®è£ ããå¥ã®å¯åºŠ/ãã©ãããã©ãŒã ã§å¿ èŠãªå Žåã¯ãå€æŽããããªãœãŒã¹ã察å¿ããããŒãžã¯ã©ã¹ã«è¿œå ããŸãã æ§æã·ã¹ãã ã¯ãé©åãªå Žåã«åŒã³åºãããŒãžã決å®ããŸãã
ãã¹ãã®å®è¡æ¹æ³
Githubã§ãããžã§ã¯ãã®ã¯ããŒã³ãäœæããEclipseã§PyDevãéããäžèŠãªãã®ããã¹ãŠåé€ããå¿ èŠãªãã®ããã¹ãŠè¿œå ããŠããããã¹ãããããšãæ³å®ããŠããŸãã ãã¹ããè¡ãã«ã¯ããã¬ãŒã ã¯ãŒã¯ãæ©èœããããã«å¿ èŠãªãã®ããã¹ãŠã€ã³ã¹ããŒã«ãïŒã€ã³ã¹ããŒã«æé ãåç §ïŒããããžã§ã¯ãã«ãŒãããå®è¡ããå¿ èŠããããŸãã
ant
ããå°ã詳ãã説æãããšããã®åŒã³åºãã¯ãç¹å®ã®æ§æãã¡ã€ã«ãå¯äžã®å ¥åãã©ã¡ãŒã¿ãŒãšããŠïŒããšãã°ã conf / android_settings.conf ïŒ run.pyãèµ·åããPATHå€æ°ãšCLASSPATHå€æ°ãžã®å¿ èŠãªãã¹ãæå®ããŠããããã¹ãçµæã®ããŒãžãäœæããŸãã
äžè¬ã«ããã¹ãæã«ãšãã¥ã¬ãŒã¿ãèµ·åããã¢ããªã±ãŒã·ã§ã³ããšãã¥ã¬ãŒã¿ã«åã€ã³ã¹ããŒã«ãããåŸããšãã¥ã¬ãŒã¿ã®ã¹ãããã·ã§ãããäœæãããŸãã 次ã«ããã¹ãããšã«åãã¹ãããã·ã§ãããèµ·åããã次ã®ãã¹ãã«åæ ŒããŸãã
ãããã«
äžåºŠã«è€æ°ã®ãã©ãããã©ãŒã ããã¹ãããå¿ èŠãããå ŽåããGUIèŠçŽ ã®ãã±ãŒã¿ãŒãè¿œå ããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããªãå Žåã¯ãImagriumã䜿çšããããšããå§ãããŸãã ãã¬ãŒã ã¯ãŒã¯ãç¿åŸããæãéãæ¹æ³ã¯ãPythonã§ããã°ã©ãã³ã°ãã人åãã§ãããã ããèšèªã®æ§æãåçŽã§ãããããããŒã«ã䜿çšããããã®è¿ éãªåŠç¿ã«è²¢ç®ã§ããŸãã ãã®èšäºã§ã¯ãImagriumã§ã®äœæ¥ã®åºæ¬ã®ã¿ã説æããŸããããã®èšäºãã³ãã¥ããã£ã®é¢å¿ãåŒãå Žåã¯ããã¬ãŒã ã¯ãŒã¯ã®æ§æãšãã®æ©èœïŒãã«ããŠãŒã¶ãŒã¹ã¯ãªãããªã©ïŒã«ã€ããŠè©³ãã説æããŸãã Githubãããžã§ã¯ãããŒãžã®å ¬åŒããã¥ã¡ã³ããèªãã§ã ãã®HelloãWorldã®äŸãåç §ããããšãã§ããŸãã