èšäºã®ç¿»èš³ã¯ãJava QAãšã³ãžãã¢ã³ãŒã¹ã®éå§åã«æºåãããŸããã
ãšããœãŒã1-茞é
2020幎1æã®æåŸã®é±æ«ã«ã»ã¬ã³ã®åé¡ã®1ã€ã«æ§ãããã察話ã®çµæã誰ããåé¡ã説æããããã«ããªãããããããªãã®ã...ããšèšããããããã³ãã³ãã説æããäžé£ã®èšäºãæžãããšã«ããŸããSelenium WebDriverã§ããªã仿¥ã®ãã¶ã€ã³ã«ãªã£ãã®ããç§ã¯ãã®ã·ãªãŒãºã®ãã¹ãŠã®ãšããœãŒãã§ãããç¹°ãè¿ããŸã-å€ãã®ãæã«ã¯çæ°ã®ãã€ã³ããŸã§ãå€ãã®èããšèããã»ã¬ã³ã®ãããã现éšã®äœåã«å
¥ããããŸãããã©ãããŠïŒå¶ç¶ã«ãã圌ãæå³ããããšãã©ãã»ã©ããŸãè¡ã£ãŠãããã«ãã£ãŠãã»ã¬ã³ã¯äžçäžã®äœçŸäžäººãã®äººã
ã«ãã£ãŠäœ¿çšãããŠããŸããããã¯ãå°èŠæš¡ãªæ°èäŒæ¥ããMicrosoftãGoogleãŸã§ã®å¹
åºãäŒæ¥ãããµã€ãããã¹ãŠã®ãã©ãŠã¶ã§æ©èœããããšãä¿èšŒããæ¹æ³ã§ããSelenium ?
Seleniumã®äœå¹Žã«ãããã£ãŠãç§ãã¡ã¯ãã©ãŠã¶ãŒãšå¯Ÿè©±ããæ¹æ³ãšããŠHTTPã䜿çšããããšã«çŠç¹ãåœãŠãããšã«ãªããŸãããåã¯ã©ã€ã¢ã³ããã€ã³ãã£ã³ã°ã䜿çšããŠåãçµæãåŸãããšãã§ããREST颚ã®APIïŒREST颚-RESTã®ç²Ÿç¥ïŒãäœæããŸãããHTTPãšREST颚ïŒããžïŒãã...HTTPã®éšåããå§ããŸããããç§ãã¡ãæåã«å§ãããšããç§ãã¡ã¯ãããããã®ãã©ãŠã¶ãŒã«å¯Ÿããæè¯ã®ã¢ãããŒãã«åºã¥ããŠãããããã®ãã©ãŠã¶ãŒãšå¯Ÿè©±ããããŸããŸãªæ¹æ³ããµããŒãããå¿
èŠããããŸãããããšãã°ãInternet Explorerã®å ŽåãCOMã³ãŒããèšè¿°ããŸããã圌ã¯ããŸãåãããã圌ããã¯ãŸã æªå€¢ãããã Firefoxã«ã€ããŠã¯ãè¡ããšã®èªã¿åãã¢ã³ã¹ã¿ãŒãäœæããŸããã幞ãã«ããMozillaã®ããã©ãŠã¶ãäœæãããã¢ãããŒãã®ãããã§ãå€ãã®ããšãã§ããŸããã Operaã§ã¯ãDevToolsãããã³ã«ã䜿çšããŠåå ããããšãã§ããŸããããããã£ãŠãããã¯ç¹ã«WebDriverã®åæã®æ®µéã§ã¯ãNïŒMãã€ã³ãã£ã³ã°ããµããŒãããå¿
èŠããã£ãããšãæå³ããŸããããã§ãNã¯èšèªãã€ã³ãã£ã³ã°ãMã¯ãµããŒããããã©ãŠã¶ãŒã§ãããã®éã¯è¯ã補åã«ã€ãªãããŸãããç§ãã¡ã¯ãã¹ãŠã®èšèªãçè§£ã§ããäœããå¿
èŠã ãšå€æããŸããããŸããããªãä¿¡é Œã§ãããã®ãå¿
èŠã§ããããããã£ãŠãHTTPãéžæããããšã«ãªãããäœæãå§ããŸããJSONWireProtocol
ããã¬ãŒã ã¯ãŒã¯ã§JSONWireProtocol
ã¯ãJSONã§éä¿¡ããREST颚ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããŸããã RESTã£ãœãã®ã¯ãRESTã®ãã¹ãŠã®ååã«å®å
šã«æºæ ããŠããããã§ã¯ãªããRESTãç§ãã¡ã®ã¿ã¹ã¯ã®åŒ·åãªããŒã«ã«ããã®ã«ååãªçšåºŠã«å
·äœåããŠããããã§ããçŸç¶ã«ã€ããŠã¯ã©ãã§ããïŒWebãã€ã³ã¿ãŒãããããããŠäžçã¯åé²ããŸããã§ã¯ããªãã»ã¬ã³ã¯ããã§ã¯ãªãã®ã§ããïŒããã¯è¯ã質åã§ãããç§ãã¡ãè¿ä»£åããããšããŠããã®ã¯äºå®ã§ããæ®å¿µãªããããããã¯ãŒã¯ã¯ãå®è¡ãããŠããªãå Žåãæ©èœããªãç¶æ
ãç¹åŸŽãšããŠããŸãã HTTPã¯ãããã³ã«ãšããŠããªãä¿¡é Œã§ããŸãããŸããå€éåãã©ã®ããã«æ©èœããããæ°ã«ããããšãªãããã¹ãçšã®ã¯ã©ã¹ã¿ãŒãäœæã§ããŸãããããSelenium Gridãäœæãããçç±ã§ãããè€æ°ã®ããã€ã¹ãã³ã³ãã¥ãŒã¿ãŒã§ã®ãã¹ãã®æŽçã«é¢ããŠã¯ãäŸç¶ãšããŠé©åãªéžæã§ãããã ãããããã¯ãŒã¯ã®ããã«èŠããŸãããããã£ãŠ... Chromeãå¶åŸ¡ããããã«Chromeãããã°ãããã³ã«ã䜿çšããããŒã«ããããŸãã圌ãã¯Seleniumãããããã€ãã®ããšãäžæãè¡ã£ãŠããŸããããã¯ããã©ãŠã¶ãšã®éä¿¡æ¹æ³ãéžæããçµæã§ããæ®å¿µãªãããããã¯Chromeã®ç¬èªã®ãããã³ã«ã§ãããä»ã®ãã©ãŠã¶ããã¢ã¯ã»ã¹ã§ããããã«ããããšã¯Googleã®å©çã«ã¯ãªããŸããããŸããGoogleããŒã ããã®è峿·±ããã¶ã€ã³ãœãªã¥ãŒã·ã§ã³ãç¡èŠãããšãåžžã«ãªãŒãã³ãªæ¥ç¶ãå¿
èŠã«ãªããšããåé¡ããããŸãããã®å ŽåãWebSocketã䜿çšããŠããŸãããã€ã³ã¿ãŒããããæ©èœããŠããªãéã¯ã€ã³ã¿ãŒããããå©çšã§ããªããšããäžèšã®ç§ã®ã³ã¡ã³ããæãåºããŠãã ããã WebSocketã¯åžžã«åæ¥ç¶ããŸãããã®ãã£ãã«ãäžäžãããã©ãã£ãã¯ã®éã®åé¡ããããŸããããã¯ãããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒäžã§ã®ã¿äœããšããåãããå Žåãæã人圢垫ã«ãšã£ãŠåé¡ã§ã¯ãããŸããããCircle CIãŸãã¯TravisCIãªã©ã®CIãµãŒãã¹ãšAWS Device FarmãSauce LabsããŸãã¯BrowserStackãªã©ã®ãŠãŒã¶ãŒãçµ±åããå Žåã©ã³ããŒãçªç¶ã€ã³ã¿ãŒãããã«æ¥ç¶ãããã®ããŒã¿ãåä¿¡è
ã«å±ãã¯ãã§ãããã©ãŠã¶ãŒãã³ããŒãšSeleniumã®ã¡ã³ããŒã§æ§æãããW3Cãã©ãŠã¶ãŒãã¹ãããã³ããŒã«ã¯ãŒãã³ã°ã°ã«ãŒãã¯ãå¥åŠãªããã«ãŒãããããããã®å人çãªé
ä¿¡ã«é Œãããšãªããæåãããã©ãŠã¶ãŒéã®äºææ§ã確ä¿ã§ããããã«ããã¹ãŠãã©ã®ããã«èŠããããèšèšããããšããŠããŸãããã©ãŠã¶ããã£ãšç¥ãããïŒ
ãšããœãŒã2-ããã²ãŒã·ã§ã³ãã®ãšããœãŒãã§ã¯ãããã²ãŒã·ã§ã³ã«é¢é£ããèšå€§ãªéã®äœæ¥ãèŠãŠãããŸããfrom selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.theautomatedtester.co.uk")
äžã«è¡šç€ºãããŠãããã®ã¯éåžžã«ã·ã³ãã«ã«èŠããŸãããããã«ãããŸãïŒå®éãããã¯ç§ãç¡ç¥çµãªã€ã³ã¿ãã¥ãŒã«å°ããŸããURLãå
¥åããŠEnterããŒãæŒãããšãã«ãã©ãŠã¶ãŒã§äœãçºçãããã説æããããã«æ±ããããå Žåãããã²ãŒã·ã§ã³ã§äœãçºçããŠããã®ããæ¬äººãç¥ããªãå¯èœæ§ãé«ããªããŸãããšã«ãã... Seleniumãšãã®ããã²ãŒã·ã§ã³ã«æ»ããŸãããã©ã³ã¹ããŒãå±€
ãä»ããŠãªã¯ãšã¹ããéä¿¡ãããšããã«ãæ¬åœã®æ¥œãã¿ãå§ãŸããŸããã©ãã«è¡ãããããèŠã€ãããã©ãŠã¶ã«ããã«è¡ãããã«æç€ºããå¿
èŠããããŸããæ®å¿µãªãããããã¯èªååã«é¢ããå€ãã®åé¡ã®æåã«ã€ãªãããŸããdriver.get
èšŒææž
ãã¯ãããžãŒãã¡ã€ã³ã§ã¯ãªãå€§äŒæ¥ã§åããããšãããå Žåã¯ãéçºããŒã ãã©ã®ãããªçã¿ã«çŽé¢ããããçè§£ããŠããŸããããã§ããã®èŠçã2åã«ãªãããã¹ã¿ãŒãèªååãšã³ãžãã¢ã察åŠããªããã°ãªããªãèŠçãæ³åã§ããŸãããããã®åé¡ã®1ã€ã¯èšŒææžã§ããäŒæ¥ã¯ãã¡ã§ãèªå·±çœ²åèšŒææžããã®ä»ã®å€åœ¢ãããŸããç¹ã«ãSeleniumã®åæã®é ãLet's Encryptã®ãããªãµãŒãã¹ã¯ãããŸããã§ããããããŠä»ã§ããã»ãšãã©ã®éçºè
ãQAã°ã«ãŒãããã¹ãç°å¢ãCIãµãŒããŒã§æ§æå€æŽã«ã¢ã¯ã»ã¹ããããšã¯ã»ãšãã©ãããŸãããèšŒææžãåé¿ããæ¹æ³ãèŠã€ããå¿
èŠããããŸãããïŒããã¯ãSeleniumãã»ãã¥ãªãã£ãªã¹ã¯ãšèŠãªãããæåã®çç±ã®1ã€ã§ããïŒãããã£ãŠãåãã©ãŠã¶ãŒã¯ãèªååäžã«èª€ã£ãŠæ§æãããèšŒææžãã¹ãããããŸãã圌ããããã«æ°ã¥ããªãã£ãå Žåãå€ãã®ãã¹ã¿ãŒ/éçºè
ã¯èªåã®ãµã€ãããã¹ãããæ©äŒããããŸãããããã§...æåã®åé¡ãåé¿ããããããŒãžã®ããŒãã«é²ãå¿
èŠããããŸããèªã¿èŸŒã¿äž
èšŒææžãåãåãæ¬¡ç¬¬ãããŒãžãããŠã³ããŒãããŸãã幞ããªããšã«ãåçã®ãã®ãããè€éãªããšãããå¿
èŠã¯ãããŸãããlocation = "https://www.theautomatedtester.co.uk";
window.location.href = "https://www.theautomatedtester.co.uk";
å®äºããŸãã...
SeleniumãããŒã ããå®äºããããšãæãæ»ããè¡ãããŸãããããã£ãŠãããŒãžãèªã¿èŸŒãŸããã®ãåŸ
ã€ã ãã§ããå®å
šã«æ£çŽã«èšããšããèªã¿èŸŒã¿å®äºããšã¯ã©ãããæå³ã§ããïŒãã©ãŠã¶ã¯ããã€ãã®ç°ãªãã€ãã³ããçºçãããŸããããŒãžããã€è¡šç€ºããããããããŠãããäœã§ããããããããŸãreadyState
ã Seleniumã¯ããããã¹ãŠãã¹ãããåŸ
æ©ãDOMContentLoaded
ãŸãããããŠãããŒãžã«ããŠããã®ããŒãžã®ã¢ã³ã«ãŒã«ãžã£ã³ãããããšãããšãåé¡ãçºçããŸããæ¬¡ã®äŸãèŠãŠã¿ãŸããããfrom selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.theautomatedtester.co.uk")
driver.get("https://www.theautomatedtester.co.uk#someAnchor")
ãããèŠãŠãã ãããããŒãžèªã¿èŸŒã¿ã€ãã³ãã¯ã©ããçºçããŸããïŒã¯ã©ã¹ïŒæããªãã©ãŠã¶ã¯å¹ççã«åäœããã¢ã³ã«ãŒãŸã§ã¹ã¯ããŒã«ããã ãã§ããã€ãŸããããŒãžããçºçããã€ãã³ãã ãã«äŸåããããšã¯ã§ããŸããããããã£ãŠããã®å Žåã®ç¹å¥ãªã³ãŒããšããã®å Žåã®ãæºåå®äºãã®æå³ãçè§£ããå¿
èŠããããŸããééãããšãäžå®å®ãªãã¹ããããããäœæãããŸããäžå®å®ãªãã¹ãã¯äººã
ãäžæ©å«ã«ããŸãããããŠç§ãã¡ã¯äžæ©å«ãªéçºè
ãæãã§ããŸãããäžçäžã«ãããã®ååãªæ°ããããäžå®å®ãªãã¹ããªãã«ããããã®ãã§ãã¯ãå®äºããããããŒãžã®ããŒãæŠç¥ã䜿çšããŠããéãããŒããããå Žåã¯ããããã®ã€ãã³ãã®èŠæ¹ãæäœã§ããŸãããããã¯èè£
ãŠãŒã¶ãŒåãã®æ©èœãªã®ã§ãä»ã¯æ°ã«ããŸããããããã²ãŒã·ã§ã³ã³ãã³ãã®é床ã«åœ±é¿ããŸããJavaScriptãã¬ãŒã ã¯ãŒã¯ãšããã²ãŒã·ã§ã³ã«ã€ããŠ
ããããæ¥œãããããã¹ãŠåçž®ãããå Žæã§ããå€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãããŒãžã«æåã«ããŒããããåŸãå€ããããŒãããŸããåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ããããšãããããŸãã¯åã«ããã䜿çšããããšãããå ŽåãããŒãæã«å€ãã®èŠçŽ ã衚瀺ãããããšã確èªããŸãããæ®å¿µãªãããããã¯ãããã²ãŒã·ã§ã³ã³ãã³ãã®æ»ãã ãã«äŸåããããšã¯ã§ããªãããšãæå³ããŸããWebDriverWait
以äžã«ç€ºãããã«ãã³ãŒãã«ã³ãã³ãã远å ããŠããã¹ããæ£ããç¶æ
ã«ããããšã確èªããŠãããå¿
èŠãªäœæ¥ãè¡ãå¿
èŠããããŸããfrom selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
driver.get("https://www.theautomatedtester.co.uk")
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(âsomeIdâ))
çµè«
ããŒãžãããŒããããšããããŒãžã®ããŒããå®äºãããšãã«Seleniumãæ»ãããšã«åžžã«äŸåãããšã¯éããŸãããããŒãžã®èŠçŽ ã確èªããå¿
èŠãããå Žåã¯ããããå®è¡ããŠãã ãããæåã®ããŒãåŸã«ãããŒãžäžã®JavaScriptããããã©ã®ããã«å€æŽã§ããããçè§£ããŠãã ãããããã«èªãããã«
ã³ãŒã¹ã®è©³çްãã芧ãã ããã