Node.jsçšã«èšèšãããSeleniumã®ããŒãžã§ã³ã䜿çšããŠèªåãã©ãŠã¶ãŒãã¹ãã®äœæãéå§ããæ¹æ³ã«é¢ããå€ãã®åªããèšäºããããŸãã

MochaãŸãã¯Jasmineã§ãã¹ããã©ããããæ¹æ³ã«ã€ããŠèª¬æããè³æãããã°ãnpmãGruntããŸãã¯Gulpã䜿çšããŠãã¹ãŠãèªååããè³æããããŸãã ãã®ãããªãã¹ãŠã®åºçç©ã«ã¯ãå¿
èŠãªãã®ããã¹ãŠã€ã³ã¹ããŒã«ããŠæ§æããæ¹æ³ã«é¢ããæ
å ±ããããŸãã äœæ¥ã³ãŒãã®ç°¡åãªäŸãèŠãããšãã§ããŸãã åå¿è
ã«ãšã£ãŠã¯ãå€ãã®ã³ã³ããŒãã³ãã§æ§æãããåäœãã¹ãç°å¢ãæ§ç¯ããã®ã¯ããã»ã©ç°¡åã§ã¯ãªããããããã¯ãã¹ãŠéåžžã«äŸ¿å©ã§ãã
ãã ããã»ã¬ã³ã®èœãšã穎ã«é¢ããéãããã¹ãéçºã®æè¯ã®å®çšçãªæ¹æ³ã®åæã«é¢ããéãããããã®èšäºã¯éåžžæåŸ
ãæºãããŠããŸããã
仿¥ã¯ãSelenium for Node.jsã§ãã©ãŠã¶ãŒãã¹ããèªååããããã®ä»ã®è³æãéåžžäœã§çµãããããå§ããŸãã ã€ãŸãããã¹ãã®ä¿¡é Œæ§ãé«ããŠããã©ãŠã¶ãŒãWebã¢ããªã±ãŒã·ã§ã³ã§ãã£ã±ãã®äºæž¬äžå¯èœãªçŸè±¡ãããã¢ã³ãã£ãããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ç¡ç ã¯æª
Selenium
driver.sleep
ã¡ãœããã¯ããã¹ãéçºè
driver.sleep
ææªã®æµã§ãã ãã ããããã«ãããããããããã¯ã©ãã§ã䜿çšãããŸãã ãããããããã¯
Seleniumã®NodeããŒãžã§ã³ã®ããã¥ã¡ã³ãã®ç°¡æœãã«ãããã®ã§ãããAPIæ§æã®ã¿ãæ±ã£ãŠããããã§ãã 圌女ã«ã¯å®ç掻ã®äŸãæ¬ ããŠããŸãã
ããããããã®æ¹æ³ã¯ãããã°ãStackOverflowã®ãããªQïŒAãµã€ãã®å€ãã®ã³ãŒããµã³ãã«ã§äœ¿çšãããŠããããã§ãã
driver.sleep
ã¡ãœããã®æ©èœãçè§£ããããã«ãäŸãèããŠã¿ãŸãããã ç»é¢ã«è¡šç€ºããããšãã«ããµã€ãºãšäœçœ®ã倿Žããã¢ãã¡ãŒã·ã§ã³ããã«ããããšããŸãã 圌女ãèŠãŠãã ããã
ããã«ã¢ãã¡ãŒã·ã§ã³ããã¯éåžžã«è¿
éã«è¡ããããããããã«å
ã®ãã¿ã³ãšã³ã³ãããŒã«ã®ãµã€ãºãšäœçœ®ã®å€æŽã«ãæ°ä»ããªãå ŽåããããŸãã
åãããã»ã¹ã®ã¹ããŒã¢ãŒã·ã§ã³ããŒãžã§ã³ã次ã«ç€ºããŸãã ããã«ã§ç·è²ã®
Close
ãã¿ã³ãã©ã®ããã«å€åãããã«æ³šç®ããŠãã ããã
ã¹ããŒã¢ãŒã·ã§ã³ããã«ã¢ãã¡ãŒã·ã§ã³ã¢ãã¡ãŒã·ã§ã³ã¯éåžžã«é«éã§ããããããã®ãããªããã«ã®åäœãå®éã®ãŠãŒã¶ãŒã®éåžžã®æäœã劚ããå¯èœæ§ã¯ã»ãšãã©ãããŸããã 2çªç®ã®äŸã®ããã«ååã«é
ããã¢ãã¡ãŒã·ã§ã³ã®ããã»ã¹ã§[
Close
]ãã¿ã³ãã¯ãªãã¯ããããšãããšãéåžžã«ããŸãå
¥ããªãå¯èœæ§ããããŸãã
éåžžããããã®ã¢ãã¡ãŒã·ã§ã³ã¯éåžžã«é«éã§çºçããããããŠãŒã¶ãŒã¯å€åãããã¿ã³ãããã£ãããããããããŸããã ã¢ãã¡ãŒã·ã§ã³ãå®äºããã®ãåŸ
ã€ã ãã§ãã ãã ããããã¯Seleniumã«ã¯é©çšãããŸããã 圌ã¯éåžžã«éãã®ã§ããŸã ã¢ãã¡ãŒã·ã§ã³åãããŠããèŠçŽ ãã¯ãªãã¯ããããšãã§ããŸãã ãã®çµæã次ã®ãããªãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããå ŽåããããŸãã
System.InvalidOperationException : Element is not clickable at point (326, 792.5)
åæ§ã®ç¶æ³ã§ãå€ãã®ããã°ã©ããŒã¯ããããã¢ãã¡ãŒã·ã§ã³ãå®äºããã®ãåŸ
ã€å¿
èŠãããã®ã§ã
driver.sleep(1000)
ã䜿çšããŠããã«ãéåžžã«æ»ããŸãããšèšããŸãã åé¡ã解決ããããã«èŠããŸããïŒ ãã ãããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã
Driver.sleepã®åé¡
driver.sleep(1000)
ã³ãã³ãã¯ãæåŸ
ã©ããã®åäœãè¡ããŸãã ãã¹ãã1000ããªç§é忢ãããã©ãŠã¶ãŒã®åäœãç¶ç¶ããŸããããŒãžã®èªã¿èŸŒã¿ãããŒãžäžã®ããã¥ã¡ã³ãã®ãã©ã°ã¡ã³ãã®é
眮ãç»é¢äžã®èŠçŽ ã®ã¢ãã¡ãŒã·ã§ã³åãŸãã¯ã¹ã ãŒãºãªè¡šç€ºããã®ä»ã®æäœãè¡ããŸãã
äŸã«æ»ããšãããã«ã800ããªç§ã§éåžžã®ç¶æ
ã«éãããšä»®å®ãããšã
driver.sleep(1000)
ã³ãã³ãã¯éåžžããããæ±ããããŠããããšãéæããã®ã«åœ¹ç«ã¡ãŸãã ããã§ã¯ããªããããå©çšããªãã®ã§ããïŒ
äž»ãªçç±ã¯ããã®åäœã
éæ±ºå®çã§ããããšã§ãã ããã¯ããã®ãããªã³ãŒããåäœããå Žåãšåäœããªãå Žåãããããšã瀺ããŠããŸãã ããã¯åžžã«æ©èœãããšã¯éããªããããç¹å®ã®æ¡ä»¶äžã§å€±æããä¿¡é Œæ§ã®äœããã¹ãã«ãªããŸãã ãããã£ãŠãèªååããããã©ãŠã¶ãã¹ãã®è©å€ã¯æªãã
driver.sleep
ãå«ãæ§é ãåžžã«æ©èœããªãã®ã¯ãªãã§ããïŒ èšãæããã°ããªããããéæ±ºå®çãªã¡ã«ããºã ãªã®ã§ããããïŒ
WebããŒãžã¯ãèŠãããšãã§ãããã®ãã¯ããã«è¶
ããŠããŸãã ãããŠãèŠçŽ ã¢ãã¡ãŒã·ã§ã³ã¯çŽ æŽãããäŸã§ãã ãã ãããã¹ãŠãæ£åžžã«æ©èœããŠããéã¯ãç¹å¥ãªããšã確èªããå¿
èŠã¯ãããŸããã
WebããŒãžã¯ã人ã
ãäœæ¥ããããšãæåŸ
ããŠèšèšãããŠããããšã«èšåãã䟡å€ããããŸãã Seleniumã䜿çšãããã¹ãäžã人ãããŒãžãæäœãããããã¯ããã«é«éãªããã°ã©ã ã ããšãã°ãæåã«ã¢ã€ãã ãèŠã€ããŠãããã¯ãªãã¯ããããã«Seleniumã«ã³ãã³ããå®è¡ãããšããããã®æäœã®éã«æ°ããªç§ããçµéã§ããŸããã
人ããŠã§ããµã€ãã§äœæ¥ããŠãããšããã¯ãªãã¯ããåã«èŠçŽ ãå®å
šã«è¡šç€ºããããŸã§åŸ
æ©ããŸãã ãŸããèŠçŽ ã®å€èгã1ç§æªæºã§ããå Žåããã®ãæåŸ
ãã«æ°ä»ããªãã§ãããã Seleniumã¯ãå¹³åçãªãŠãŒã¶ãŒãããé«éã§èŠæ±ãå³ããã ãã§ã¯ãããŸããã ãã¹ãã¯ãããŒãžãæäœããªãããããŸããŸãªäºæž¬äžå¯èœãªèŠå ã«çŽé¢ããããšãäœåãªããããŸãã ãããã®ããã€ããèããŠã¿ãŸãããïŒ
- ãã¶ã€ããŒã¯ãã¢ãã¡ãŒã·ã§ã³æéã800ããªç§ãã1200ããªç§ã«å€æŽã§ããŸãã ãã®çµæã
driver.sleep(1000)
ã䜿çšãããã¹ãã¯å€±æããŸãã
- ãã©ãŠã¶ãŒã¯ãå¿
ãããå¿
èŠãªããšãæ£ç¢ºã«è¡ããšã¯éããŸããã ã·ã¹ãã ã®è² è·ã«ãããã¢ãã¡ãŒã·ã§ã³ãé
ããªãã800ããªç§ä»¥äžãããå ŽåããããŸãã ãããããåŸ
æ©æéã¯1000ããªç§ã«èšå®ãããŠããŸãã ãã®çµæããã¹ãã¯åã³å€±æããŸãã
- ãã©ãŠã¶ããšã«ç°ãªãããŒã¿èŠèŠåã¡ã«ããºã ããããèŠçŽ ãç»é¢ã«é
眮ããæäœã«ç°ãªãåªå
é äœãå²ãåœãŠãŸãã æ°ãããã©ãŠã¶ããã¹ãã¹ã€ãŒãã«è¿œå ãããšããã¹ããå床ã¯ã©ãã·ã¥ããŸãã
- ããŒãžãå¶åŸ¡ãããã©ãŠã¶ãŒãã³ã³ãã³ãã倿ŽããJavaScriptåŒã³åºãã¯ãæ¬è³ªçã«éåæã§ãã ãã®äŸã®ã¢ãã¡ãŒã·ã§ã³ããµãŒããŒããã®æ
å ±ãå¿
èŠãšãããããã¯ã«é©çšãããå Žåãã¢ãã¡ãŒã·ã§ã³ãéå§ããåã«ãAJAXåŒã³åºãã®çµæã®ãããªãã®ãåŸ
ã€å¿
èŠããããŸãã ä»ããšãããããããã¯ãŒã¯ã®é
å»¶ã«å¯ŸåŠããŠããŸãã ãã®çµæãããã«ã®è¡šç€ºã«å¿
èŠãªæéãæ£ç¢ºã«æšå®ããããšã¯ã§ããŸããã ãã¹ãã¯åã³å€±æããŸãã
- ãã¡ããããã¹ãã倱æããçç±ã¯ä»ã«ããããŸãããç§ã«ã¯ããããŸããã ãã©ãŠã¶èªäœã§ãããå€éšèŠå ãèæ
®ã«å
¥ããã«ãããã«ãšã©ãŒãããè€éãªã·ã¹ãã ã§ãã ãã©ãŠã¶ãŒããšã«ç°ãªããšã©ãŒã ãã®çµæãä¿¡é Œæ§ã®é«ããã¹ããèšè¿°ããããšããŠãç°ãªãããŒãžã§ã³ã®ç°ãªããã©ãŠã¶ãŒããã³ç°ãªããªãªãŒã¹ã®è€æ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§åäœããããã«åªããŠããŸãã ãã®ãããªæ¡ä»¶ã§ã®é決å®è«çãã¹ãã¯é
ããæ©ãã倱æããŸãã ããããã¹ãŠãèæ
®ãããšãããã°ã©ããŒãèªååããããã¹ããæåŠããããããã©ãã»ã©ä¿¡é Œã§ããªããã«ã€ããŠäžå¹³ãèšãçç±ãæããã«ãªããŸãã
äžèšã®åé¡ã®1ã€ãä¿®æ£ããããã«ããã°ã©ãã¯äœãããŸããïŒ åœŒã¯å€±æã®åå ãæ¢ãå§ããã¢ãã¡ãŒã·ã§ã³ãæçœãªè§£æ±ºçãæãã€ãã®ã«èŠããæéã§ããããšãããããŸã
driver.sleep
åŒã³åºãã®åŸ
ã¡æéãå¢ãããŸãã æ¬¡ã«ãéã«é Œã£ãŠãããã°ã©ããŒã¯ãã®æ¹åããã¹ãŠã®å¯èœãªãã¹ãã·ããªãªã§æ©èœããããšãã·ã¹ãã ã®ããŸããŸãªè² è·ã«å¯ŸåŠããããšãããŸããŸãªãã©ãŠã¶ãŒã®èŠèŠåã·ã¹ãã ã®éããæ»ããã«ããããšãªã©ãæåŸ
ããŸãã ãããããŸã éæ±ºå®çãªã¢ãããŒãããããŸãã ãããã£ãŠããããè¡ãããšã¯ã§ããŸããã
å€ãã®å Žåã
driver.sleep
ãæå®³ãªã³ãã³ãã§ãããšç¢ºä¿¡ããŠããªãå Žåã¯ãããã«ã€ããŠèããŠãã ããã
driver.sleep
ãªããã°
driver.sleep
ãã¹ãã¯ã¯ããã«é«éã«å®è¡ãããŸãã ããšãã°ããã®äŸã®ã¢ãã¡ãŒã·ã§ã³ã«ã¯800ããªç§ããããããªãããšãé¡ã£ãŠããŸãã å®éã®ãã¹ãã±ãŒã¹ã§ã¯ããã®ãããªä»®å®ã¯
driver.sleep(2000)
ãããªãã®ã®äœ¿çšã«ã€ãªãããŸããããã¯ã圱é¿ãã远å èŠå ãäœã§ãããã¢ãã¡ãŒã·ã§ã³ãæ£åžžã«å®äºããã®ã«2ç§ã§ååã§ããããšãæã¿ãŸãããã©ãŠã¶ãšããŒãžã«ã
ããã¯ãèªåãã¹ãã®1ã€ã®ã¹ãããã§1ç§ä»¥äžå€±ãããŸãã ãã®ãããªã¹ãããã倿°ããå Žåããã®ãããªãã¹ãã¢ãç§ã®å€ãã¯éåžžã«éãæ¥ãŸãã ããšãã°ã
driver.sleep
é床ã®äœ¿çšã«ããæ°åããã£ãWebããŒãžã®1ã€ã ãã«å¯ŸããŠæè¿åèšèšããããã¹ãã¯ã15ç§æªæºã§å®è¡ãããŸãã
driver.sleep
ãåãé€ãããã¹ããä¿¡é Œæ§ã®é«ãå®å
šã«æ±ºå®çãªæ§é ã«å€æããç¹å®ã®äŸã玹ä»ããŸãã
çŽæã«ã€ããŠäžèš
Seleniumã®JavaScript APIã¯ãPromiseãå€çšããŸãã åæã«ãPromiseã®çµã¿èŸŒã¿ãããŒãžã£ãŒã䜿çšããŠããããã詳现ã¯ããã°ã©ããŒããé ãããŠããŸãã ãã®æ©èœ
ã¯åé€ãããããšãäºæ³ããããããå°æ¥çã«ã¯ãPromiseãç¬ç«ããŠãã§ãŒã³ã«çµåããæ¹æ³ããŸãã¯æ°ããJavaScript async / awaitã¡ã«ããºã ã䜿çšããæ¹æ³ãçè§£ããå¿
èŠããããŸãã
ãã®è³æã§ã¯ãäŸã§ã¯åŸæ¥ã®çµã¿èŸŒã¿ã®Selenium Promise ManagerãšPromiseããã§ãŒã³ããæ©èœã䜿çšããŠããŸãã çŽæãã©ã®ããã«æ©èœããããçè§£ããã°ãããã¯ä»¥äžã®ã³ãŒãäŸãåæãããšãã«å€§ããªãã©ã¹ã«ãªããŸãã ãã ããçŽæããŸã é©åã«çè§£ããŠããªãå Žåã«ãããã®è³æã®æ©æµãåããããšãã§ããŸãã
ãã¹ããæžã
ã¢ãã¡ãŒã·ã§ã³ããã«ã«ãããã¿ã³ã䜿çšããŠäŸãç¶ããŸãããã ãã®ãã¿ã³ãã¯ãªãã¯ããŸãã ãã¹ããäžæããå¯èœæ§ã®ããç¹å®ã®æ©èœãããã€ãèŠãŠã¿ãŸãããã
ããŒãžã«åçã«è¿œå ãããããŒãžã®èªã¿èŸŒã¿ãå®äºããçŽåŸã«ã¯ååšããªãèŠçŽ ã«ã€ããŠã¯ã©ãã§ããïŒ
DOMã«èŠçŽ ã衚瀺ãããã®ãåŸ
ã£ãŠããŸã
次ã®ã³ãŒãã¯ãããŒãžã®ããŒãåŸã«CSS id
my-button
èŠçŽ ãDOMã«è¿œå ãããå Žåã¯æ©èœããŸããã
// Selenium // . driver.get('https:/foobar.baz'); // . const button = driver.findElement(By.id('my-button')); button.click();
driver.findElement
ã¡ãœããã¯ãã¢ã€ãã ãDOMã«æ¢ã«ååšããããšãæ³å®ããŠããŸãã ã¢ã€ãã ãããã«èŠã€ãããªãå Žåããšã©ãŒãã¹ããŒãããŸãã ãã®å Žåã
driver.get
åŒã³åºãã«ãããããã«ãã¯ãããŒãžã®èªã¿èŸŒã¿ãå®äºããåŸããæå³ããŸãã
Selenium for JavaScriptã®çŸåšã®ããŒãžã§ã³ã¯ãåå¥ã«ãããã¹ã管çããããšã«æ³šæããŠãã ããã ãããã£ãŠãååŒã¯æ¬¡ã®åŒã«é²ãåã«å®å
šã«å®äºããŸãã
äžèšã®ã·ããªãªã¯å¿
ãããæãŸãããšã¯éããªãããšã«æ³šæããŠãã ããã èŠçŽ ããã§ã«DOMã«ååšããããšã確å®ãªå Žåã¯ã
driver.findElement
ãåç¬ã§åŒã³åºããšäŸ¿å©ã§ãã
ãŸãããã®ãšã©ãŒãä¿®æ£ããŠã¯ãªããªãæ¹æ³ãèŠãŠãã ããã DOMã«èŠçŽ ã远å ããã®ã«æ°ç§ãããããšãããã£ãŠãããšä»®å®ããŸãã
driver.get('https:/foobar.baz'); // , driver.sleep(3000); // , , . const button = driver.findElement(By.id('my-button')); button.click();
äžèšã®çç±ã«ããããã®ãããªèšèšã¯å€±æã«ã€ãªããå¯èœæ§ãããããã®å¯èœæ§ããããŸãã èŠçŽ ãDOMã«è¡šç€ºãããã®ãåŸ
ã€æ¹æ³ãçè§£ããå¿
èŠããããŸãã ããã¯éåžžã«ç°¡åã§ããããã¯ãã€ã³ã¿ãŒãããã§èŠãããäŸã§ããèŠãããŸãã
ååã«ææžåããã driver.wait
ã¡ãœããã䜿çšããŠãDOMã«èŠçŽ ã衚瀺ãããç¬éã20ç§ä»¥å
åŸ
æ©ããŸãã
const button = driver.wait( until.elementLocated(By.id('my-button')), 20000 ); button.click();
ãã®ã¢ãããŒãã¯ããã«å€ãã®å©ç¹ããããããŸãã ããšãã°ãã¢ã€ãã ã1ç§ä»¥å
ã«DOMã«è¿œå ãããå Žåã
driver.wait
ã¡ãœãã
driver.wait
1ç§ã§å®äºããŸãã 圌ã¯åœŒã«å²ãåœãŠãããŠãããã¹ãŠã®20ç§ãåŸ
ã€ããšã¯ãããŸããã
ãã®åäœã«ããããã¹ããé
ããªãããšãå¿é
ããããšãªãã倧ããªããŒãžã³ã§ã¿ã€ã ã¢ãŠããèšå®ã§ããŸãã ãã®åäœã¢ãã«ã¯ãæå®ããããã¹ãŠã®æéãåžžã«åŸ
æ©ãã
driver.sleep
ãšæ¯ã¹ãŠæå©ã§ãã
ããã¯å€ãã®ç¶æ³ã§æ©èœããŸãã ãããããã®ã¢ãããŒãã圹ã«ç«ããªãå¯äžã®ã±ãŒã¹ã¯ãDOMã«ååšããããŸã ç»é¢ã«è¡šç€ºãããŠããªãèŠçŽ ãã¯ãªãã¯ããããšã§ãã
Seleniumã¯ãäžå¯èŠã®èŠçŽ ãã¯ãªãã¯ããããšããªãã»ã©ã¹ããŒãã§ãã ãŠãŒã¶ãŒã¯ãã®ãããªèŠçŽ ãã¯ãªãã¯ã§ããªããããããã¯è¯ãããšã§ãããä¿¡é Œã§ããèªåãã¹ããäœæããäœæ¥ãè€éã«ãªããŸãã
ç»é¢ã«ã¢ã€ãã ã衚瀺ãããã®ãåŸ
ã€
èŠçŽ ã衚瀺ãããã®ãåŸ
ã€åã«ãDOMã«è¿œå ããããŸã§åŸ
ã€ã®ãçã«ããªã£ãŠãããããåã®äŸã«åºã¥ããŸãã ããã«ã以äžã®ã³ãŒãã§ã¯ãäžé£ã®çŽæã®äœ¿çšã®æåã®äŸãèŠãããšãã§ããŸãã
const button = driver.wait( until.elementLocated(By.id('my-button')), 20000 ) .then(element => { return driver.wait( until.elementIsVisible(element), 20000 ); }); button.click();
äžè¬ã«ããã¹ãã倧å¹
ã«æ¹åããã®ã«ååãªèª¿æ»ãæ¢ã«è¡ã£ãŠãããããããã§åæ¢ã§ããŸãã ãã®ã³ãŒãã䜿çšãããšãããŒãžã®èªã¿èŸŒã¿ãå®äºããçŽåŸã«èŠçŽ ãDOMã«ãªãããã«ãã¹ãã倱æããå€ãã®ç¶æ³ãåé¿ã§ããŸãã ãŸãã¯ãã¢ãã¡ãŒã·ã§ã³ã®ãããªãã®ãåå ã§ãããŒãžãèªã¿èŸŒãã çŽåŸã«è¡šç€ºãããªããšããäºå®ãåå ã§ãã ãŸãã¯ããããã®äž¡æ¹ã®çç±ããããŸãã
äžèšã®ã¢ãããŒããç¿åŸããå ŽåãSeleniumã®é決å®çãªã³ãŒããäœæããçç±ã¯ãªãã¯ãã§ãã ãã ãããã®ãããªã³ãŒããæžãããšã¯ãåžžã«ãã€ããšã¯çšé ããã®ã§ãã
ã¿ã¹ã¯ã®è€éããå¢ããšãéçºè
ã¯å°é¢ã倱ãã
driver.sleep
ãŸãã ããè€éãªç¶æ³ã§
driver.sleep
ã䜿çšããã«å®è¡ã§ããããã€ãã®äŸã
driver.sleep
ãŸãããã
èªèº«ã®ç¶æ
ã®èª¬æ
until
ã¡ãœããã®ãããã§ãSeleniumã®JavaScript APIã«ã¯ãã§ã«
driver.wait
䜿çšã§ããå€ãã®
ãã«ããŒã¡ãœããããããŸãã ããã«ãã¢ã€ãã ãååšããªããªããŸã§åŸ
æ©ããããç¹å®ã®ããã¹ããå«ãã¢ã€ãã ã衚瀺ããããŸã§åŸ
æ©ããããéç¥ã衚瀺ããããŸã§åŸ
æ©ããããä»ã®å€ãã®æ¡ä»¶ã䜿çšãããã§ããŸãã
æšæºçãªæ¹æ³ã®äžããå¿
èŠãªãã®ãèŠã€ãããªãå Žåã¯ãç¬èªã®æ¡ä»¶ãèšè¿°ããå¿
èŠããããŸãã ããã¯å®éã«ã¯éåžžã«ç°¡åã§ãã ããã§ã®äž»ãªåé¡ã¯ããã®ãããªæ¡ä»¶ã®äŸãèŠã€ããããšãé£ããããšã§ãã ããã§å¯ŸåŠããå¿
èŠãããå¥ã®èœãšã穎ããããŸãã
ããã¥ã¡ã³ãã«ãããšã
true
ãŸãã¯
false
ãè¿ãã¡ãœããã
driver.wait
æäŸã§ã
false
ã
ç¹å®ã®èŠçŽ ã®
opacity
ããããã£ã1ã«çãããªããŸã§åŸ
ã€å¿
èŠããããšããŸãããã
// . const element = driver.wait( until.elementLocated(By.id('some-id')), 20000 ); // driver.wait , true false. driver.wait(() => { return element.getCssValue('opacity') .then(opacity => opacity === '1'); });
ãã®èšèšã¯äŸ¿å©ã§åå©çšã«é©ããŠããããã«èŠããã®ã§ã颿°ã«å
¥ããŠãã ããã
const waitForOpacity = function(element) { return driver.wait(element => element.getCssValue('opacity') .then(opacity => opacity === '1'); ); };
次ã«ããã®é¢æ°ã䜿çšããŸãã
driver.wait( until.elementLocated(By.id('some-id')), 20000 ) .then(waitForOpacity);
ãããŠãããã§ç§ãã¡ã¯åé¡ã«çŽé¢ããŠããŸãã å®å
šã«äžéæã«ãªã£ãèŠçŽ ãã¯ãªãã¯ãããå Žåã¯ã©ãããŸããïŒ äžèšã®ã³ãŒãã«ãã£ãŠè¿ãããå€ã䜿çšããããšãããšãäœãè¯ãçµæãåŸãããŸããã
const element = driver.wait( until.elementLocated(By.id('some-id')), 20000 ) .then(waitForOpacity); // . element true false, , click(). element.click();
åãçç±ã§ãåæ§ã®æ§é ã§çŽæã®é£éã䜿çšããããšã¯ã§ããŸããã
const element = driver.wait( until.elementLocated(By.id('some-id')), 20000 ) .then(waitForOpacity) .then(element => { // , element . element.click(); });
ãã ããããã¯ãã¹ãŠç°¡åã«ä¿®æ£ã§ããŸãã æ¹åãããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
const waitForOpacity = function(element) { return driver.wait(element => element.getCssValue('opacity') .then(opacity => { if (opacity === '1') { return element; } else { return false; }); ); };
ãã®ã³ãŒãã¯ãæ¡ä»¶ãtrueã®å Žåã«èŠçŽ ãè¿ããããã§ãªãå Žåã¯
false
è¿ã
false
ã ãã®ãããªãã³ãã¬ãŒãã¯åå©çšã«é©ããŠãããç¬èªã®æ¡ä»¶ãèšè¿°ãããšãã«äœ¿çšã§ããŸãã
ãã§ãŒã³ã®çŽæãšãšãã«ãããé©çšããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
driver.wait( until.elementLocated(By.id('some-id')), 20000 ) .then(waitForOpacity) .then(element => element.click());
ãŸãã¯ãã®ããã«ïŒ
const element = driver.wait( until.elementLocated(By.id('some-id')), 20000 ) .then(waitForOpacity); element.click();
ç¬èªã®æ¡ä»¶ãäœæãããšããã¹ãã®æ©èœãæ¡åŒµãããããã確å®çã«ããããšãã§ããŸãã ãã ããããã ãã§ã¯ååã§ã¯ãããŸããã
ãã€ãã¹ã«è¡ã
ããã¯äºå®ã§ããããã¬ãã£ãã«ãªãããã©ã¹ã«ãªãããšããªãããšããããŸãã ããã§ã¯ãååšããªããã®ããŸãã¯ç»é¢ã«è¡šç€ºãããªããªã£ããã®ããã§ãã¯ããŸãã
èŠçŽ ããã§ã«DOMã«ååšããŠããããäžéšã®ããŒã¿ãAJAXãä»ããŠããŒããããåã«èŠçŽ ãšå¯Ÿè©±ããªãã§ãã ããã èŠçŽ ã«ã¯ããèªã¿èŸŒã¿äž...ããšããããã«ãéãªãå ŽåããããŸãã
until
ã¡ãœãããæäŸããæ¡ä»¶ã«çްå¿ã®æ³šæãæããšã
elementIsNotVisible
ã
elementIsDisabled
ãªã©ã®ã¡ãœããããŸãã¯ããŸãç®ç«ããªã
stalenessOf
ã¡ãœããã«æ°ä»ããããããŸããã
ãããã®æ¹æ³ã®ããããã䜿çšãããšãããŒãã€ã³ãžã±ãŒã¿ãŒã§ããã«ãé衚瀺ã«ããããã®ãã§ãã¯ãæŽçã§ããŸãã
// DOM, . const desiredElement = driver.wait( until.elementLocated(By.id('some-id')), 20000 ); // , // . driver.wait( until.elementIsNotVisible(By.id('loading-panel')), 20000 ); // , , . desiredElement.click();
äžèšã®ã¡ãœããã調ã¹ããšã
stalenessOf
ã¡ãœãã
stalenessOf
ç¹ã«åœ¹ç«ã€ããšã
stalenessOf
ãŸããã èŠçŽ ãDOMããåé€ããããŸã§åŸ
æ©ããŸããããã¯ãä»ã®çç±ã®äžã§ãç¹ã«ãããŒãžã®æŽæ°ã«ããçºçããå¯èœæ§ããããŸãã
iframe
ã³ã³ãã³ããæŽæ°ãããã®ãåŸ
æ©ããäŸã次ã«ç€ºããŸãã
let iframeElem = driver.wait( until.elementLocated(By.className('result-iframe')), 20000 ); // , iframe. someElement.click(); // iframe : driver.wait( until.stalenessOf(iframeElem), 20000 ); // iframe. driver.wait( until.ableToSwitchToFrame(By.className('result-iframe')), 20000 ); // , , iframe.
ãŸãšã
Seleniumã§ä¿¡é Œæ§ã®é«ããã¹ããäœæããããšãã人ã«äžããããšãã§ããäž»ãªæšå¥šäºé
ã¯ãåžžã«æ±ºå®è«ãæ±ããŠ
sleep
ã¡ãœãããæŸæ£ãã
sleep
ã§ãã
sleep
ã¡ãœããã«äŸåããããšã¯ãä»»æã®ä»®å®ã«åºã¥ããŠããŸãã ãããŠãããã¯é
ããæ©ããã倱æã«ã€ãªãããŸãã
ããã«æããäŸããSeleniumã§ã®å質ãã¹ãã®äœæãžã®éãé²ãå©ãã«ãªãããšãé¡ã£ãŠããŸãã
芪æãªãèªè
ïŒ Seleniumã䜿çšããŠãã¹ããèªååããŠããŸããïŒ