QA å¿åè ã® XNUMX äººäž XNUMX 人ã¯ãèªåãã¹ãã®æäœæ¹æ³ãåŠã³ãããšèããŠããŸãã ãã¹ãŠã®äŒæ¥ãå€åæéäžã«æåãã¹ãæ åœè ã®ãã®ãããªèŠæãæºââãããããã§ã¯ãããŸããã Wrike ã¯åŸæ¥å¡åãã«ãªãŒãã¡ãŒã·ã§ã³ ã¹ã¯ãŒã«ãéå¬ããå€ãã®åŸæ¥å¡ã®ãã®é¡æãå®çŸããŸããã ç§ã¯ãŸãã«QAã®åŠçãšããŠãã®ã¹ã¯ãŒã«ã«åå ããŸããã
ç§ã¯ Selenium ã®äœ¿ãæ¹ãåŠã³ãçŸåšã§ã¯å®è³ªçã«å€éšããã®å©ããåããã«ãäžå®æ°ã®èªåãã¹ããç¬èªã«ãµããŒãããŠããŸãã ãããŠãç§ãã¡ã®å
±åçµéšã®çµæãšç§ã®å人çãªçµè«ã«åºã¥ããŠãæãçæ³çãªèªååã®æµæŽŸã®å
¬åŒãå°ãåºãããšããŸãã
åŠæ ¡éå¶ã«ããã Wrike ã®çµéš
ãªãŒãã¡ãŒã·ã§ã³ ã¹ã¯ãŒã«ã®å¿ èŠæ§ãæããã«ãªã£ããšãããã®çµç¹ã¯ãªãŒãã¡ãŒã·ã§ã³ã®æè¡è²¬ä»»è ã§ãã Stas Davydov ã«å§ããããŸããã 圌ãããªããã®åãçµã¿ãæãã€ããã®ããææãäžãããã©ãããè²»ãããæéãåŸæããŠãããã©ããã説æã§ããã®ã¯åœŒä»¥å€ã«èª°ã§ããããïŒ åœŒã«çºèšæš©ãäžããŸããã:
â 2016 幎ã«ãç§ãã¡ã¯èªåãã¹ãçšã®æ°ãããã¬ãŒã ã¯ãŒã¯ãäœæãããã¹ããç°¡åã«äœæã§ããããã«ããŸãããéåžžã®ã¹ãããã衚瀺ãããæ§é ãããç解ãããããªããŸããã ç§ãã¡ã¯ãæ°ãããã¹ããäœæãããäººå šå¡ãåå ãããå¿ èŠããããšããã¢ã€ãã¢ãæãã€ããŸããããããç解ããããããããã«ãäžé£ã®è¬çŸ©ãäœæããŸããã ç§ãã¡ã¯å ±åã§ãããã¯ã®èšç»ãç«ãŠãå°æ¥ã®è¬åž«ãããããèªåã§ãããã¯ãåãäžããããã«é¢ããã¬ããŒããäœæããŸããã
âåŠçãã¡ã¯ã©ããªèŠåŽãããŸãããïŒ
âãã¡ããäž»ã«å»ºç¯ã§ãã ãã¹ãã®æ§é ã«ã€ããŠå€ãã®è³ªåããããŸããã ãã£ãŒãããã¯ã§ã¯ããã®ãããã¯ã«é¢ããŠå€ãã®ããšãæžãããŠããããã詳现ã«èª¬æããããã«è¿œå ã®è¬çŸ©ãéå¬ããå¿ èŠããããŸããã
âåŠæ ¡ã®ææã¯ãããŸãããïŒ
- ã¯ããééããªãã 圌女ã®ãããã§ãå€ãã®äººããã¹ãã®äœæã«æºããããã«ãªããå¹³åããŠãç é¢å ã§ã¯èª°ããèªåãã¹ããšã¯äœãªã®ããã©ã®ããã«äœæãããã©ã®ããã«èµ·åãããã®ããããããç解ã§ããããã«ãªããŸããã èªååãšã³ãžãã¢ã®è² æ ã軜æžãããŸããããã¹ãæ åœè ãšéçºè ãã»ãŒãã¹ãŠã®ç¶æ³ã§èªåãã¡ã§ãã¹ãåæã«å¯ŸåŠãå§ããããããã¹ãåæã«é¢ããæ¯æŽãæ±ãããªã¯ãšã¹ããäœåãæžããŸããã ããã§ãããéšéã«ãšã£ãŠã¯ããã€ãã®å éšå©ç¹ããããŸãããã¬ãŒã³ããŒã·ã§ã³ãè¬çŸ©ã®çµéšãå¢ããŸããããã®ãããã§ãäžéšã®èªååãšã³ãžãã¢ã¯ãã§ã«ã«ã³ãã¡ã¬ã³ã¹ã§ãã¬ãŒã³ããŒã·ã§ã³ãè¡ãããšãã§ããŸããããŸããæ°äººç ä¿®ã®ããã®åŒ·åãªãããªããã¬ãŒã³ããŒã·ã§ã³ã®ã»ãããåãåããŸããã
ç§èªèº«ã代衚ããŠä»ãå ããããŠããã ããŸãããç§ãã¡ã®éšééã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯ããŸã£ããã°ãã°ãããã»ã©ç°¡åãªã¬ãã«ãŸã§ç°¡çŽ åãããŸããã ããšãã°ãçŸåšã§ã¯ãã©ã®ã±ãŒã¹ãã©ã®ååæ§ã®ã¬ãã«ã§èªååããããèããå¿ èŠããªããªããŸããã ãã®çµæãé¢ä¿è å šå¡ããã¹ãç¯å²ã«æ倧éã®æ³šæãæã£ãŠããããã¹ãç¯å²ã¯åžžã«æ¡å€§ããŠããŸãã ä»äººã«äžå¯èœãªããšãèŠæ±ãã人ã¯ããŸããã
äžè¬ã«ãããŒã ã®ä»äºãžã®åœ±é¿ã¯ééããªããã©ã¹ã§ãã ãããããã®èšäºãèªãã§ããååãåæ§ã®ããšãèããŠããã®ã§ã¯ãªãã§ãããã? ãã®å Žåã®ã¢ããã€ã¹ã¯ã·ã³ãã«ã§ããèªåãã¹ããåªå äºé ã§ããå Žåã¯ããããã䟡å€ããããŸãã 次ã«ãããè€éãªåé¡ã«ã€ããŠèª¬æããŸããããã¯ããã¹ãŠã®é¢ä¿è ã®ã³ã¹ããæå°éã«æããææãæ倧åããããã«ãããããã¹ãŠãã§ããã ãæ£ç¢ºã«çµç¹ããæ¹æ³ã§ãã
æŽçã®ãã³ã
ãã®åŠæ ¡ã¯åœ¹ã«ç«ã¡ãŸããããã¹ã¿ã¹æ°ãèªããããã«ãããã€ãã®å°é£ããã£ããããè¿œå ã®è¬çŸ©ãæé ããå¿ èŠããããŸããã ãããŠãæè¿ã®åŠçãšããŠãç¡ç¥ãªèªåãšçŸåšã®èªåãæ¯èŒããªãããç§ã®æèŠã§ã¯ãèªåãã¹ãã®ç解ããã¹ã¿ãŒã«ââæããããã®çæ³çãªæ¹æ³ãäœæããããã®æ¬¡ã®æé ãçå®ããŸããã
ã¹ããã 0. èŸæžãäœæãã
ãã¡ããããã®ã¹ããã㯠QA ã ãã«å¿ èŠãªããã§ã¯ãããŸããã ãã ããããã§æ瀺ããŠããããã®ã¯ãèªååã³ãŒãããŒã¹ã¯èªã¿åãå¯èœãªåœ¢åŒã«ä¿ãããªããã°ãªããªããšããããšã§ãã ããã°ã©ãã³ã°èšèª - ç¹ã« èšèª, ãããããã€ãã³ã°ãéå§ã§ããŸãã
以äžã¯ãèŠçŽ ã®ååãå«ãã¿ã¹ã¯ãã¥ãŒã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã ããªããã¿ã¹ã¯ãã¥ãŒããã©ã㯠ããã¯ã¹ãšããŠãã¹ãããŠããŠããããŸã§ Selenium ãèŠãããšããªãã£ããšæ³åããŠãã ããã ãã®ã³ãŒãã¯äœãããã®ã§ãããã?
(ã¹ãã€ã©ãŒ - ã¿ã¹ã¯ã¯ç®¡çè
ã«ä»£ãã£ãŠ REST çµç±ã§åé€ãããã¹ããªãŒã ã«ããã®èšé²ãããããšãããããŸãã)
ãã®ã¹ãããã ãã§ãQAA èšèªãš QA èšèªãããç·å¯ã«é£æºããŸãã èªååããŒã ã¯å®è¡çµæã説æããã®ã容æã«ãªããæåãã¹ã¿ãŒã¯ã±ãŒã¹ã®äœæã«è²»ããåŽåãæžããã±ãŒã¹ã®è©³çŽ°ãå°ãªãããããšãã§ããŸãã ããã§ããã¿ããªã¯ãäºããç解ãåã£ãŠããŸãã å®éã®ãã¬ãŒãã³ã°ãå§ãŸãåããè³éãåãåããŸããã
ã¹ããã 1. ãã¬ãŒãºãç¹°ãè¿ã
èšèªãšã®äžŠè¡äœæ¥ãç¶ããŸãããã åäŸã®é ã«è©±ãããšãåŠã¶ãšããç§ãã¡ã¯èªæºãæå³è«ããå§ããŸããã ç§ãã¡ã¯ããæ¯ããããããã¡ããè²·ã£ãŠããšç¹°ãè¿ããŸããããããã®èšèã®ã€ã³ãã»ãšãŒãããç¥èªã®ã«ãŒãã«ã¯ããã«ã¯ç«ã¡å
¥ããŸããã ããã¯ããã«ãããŸããæ©èœãããã®ãäœæããããšããã«ãèªåãã¹ãã®æè¡çæ©èœã®å¥¥æ·±ããŸã§æãäžããŠãæå³ããããŸããã
å°ãçŽèŠ³ã«åããŠèããããããããŸããããããŸããããŸãã
æåã®ã¬ãã¹ã³ã§ã¯ãèªåãã¹ããçŽæ¥èšè¿°ããæ¹æ³ã®åºç€ã説æãã䟡å€ããããŸãã ç§ãã¡ã¯éçºç°å¢ (ç§ã®å Žå㯠Intellij IDEA) ã®ã»ããã¢ãããæ¯æŽããæ¢åã®æé ã䜿çšããŠæ¢åã®ã¯ã©ã¹ã«å¥ã®ã¡ãœãããèšè¿°ããããã«å¿ èŠãªæå°éã®èšèªã«ãŒã«ã説æããŸãã ç§ãã¡ã¯åœŒããšäžç·ã« XNUMX ã€ãŸã㯠XNUMX ã€ã®ãã¹ããäœæãã宿é¡ãåºããŸããç§ãªã次ã®ããã«ãã©ãŒãããããŸãããã¹ã¿ãŒããåå²ãããã©ã³ãã§ãããããããããã€ãã®ãã¹ããåé€ãããŠããŸãã ãããã®èª¬æã ããæ®ã£ãŠããŸãã ç§ãã¡ã¯ãã¹ã¿ãŒã«ââãããã®ãã¹ãã埩å ããããæ±ããŠããŸã (ãã¡ãããshow diff ã§ã¯ãããŸãã)ã
ãã®çµæãè³ãåŸããŠãã¹ãŠãå®è¡ãã人ã¯ã次ã®ããšãã§ããããã«ãªããŸãã
- éçºç°å¢ã€ã³ã¿ãŒãã§ã€ã¹ã®æäœæ¹æ³ãåŠã³ãŸãããã©ã³ãããããããŒãã³ããããããã·ã¥ãäœæããŸãã
- èšèªãšã¯ã©ã¹ã®æ§é ã®åºæ¬ããã¹ã¿ãŒããŸããã¹ããã以å€ã«ãã€ã³ãžã§ã¯ã·ã§ã³ãæ¿å ¥ããå Žæãšã€ã³ããŒãããå Žæãã¢ãããŒã·ã§ã³ãå¿ èŠãªçç±ãããã«ããã·ã³ãã«ã®çš®é¡ãªã©ã§ãã
- ã¢ã¯ã·ã§ã³ãåŸ æ©ããã§ãã¯ã®éããã©ãã§äœã䜿çšããããç解ããã
- èªåãã¹ããšæåãã§ãã¯ã®éãã«æ³šæããŠãã ãããèªåãã¹ãã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãéããŠã¢ã¯ã·ã§ã³ãå®è¡ãã代ããã«ãXNUMX ã€ãŸãã¯å¥ã®ãã³ãã©ãŒããã«ã§ããŸãã ããšãã°ãã¿ã¹ã¯ãã¥ãŒãéããŠå ¥åãéžæããããã¹ããå ¥åã㊠[éä¿¡] ãã¿ã³ãã¯ãªãã¯ãã代ããã«ãã³ã¡ã³ããããã¯ãšã³ãã«çŽæ¥éä¿¡ããŸãã
- 次ã®ã¹ãããã§åçããã質åãäœæããŸãã
æåŸã®ç¹ã¯éåžžã«éèŠã§ãã ããããçãã¯äºåã«ç°¡åã«äžããããšãã§ããŸããã質åãæ確ã«ãããŠããªãçãã¯èšæ¶ã«æ®ãããæçµçã«å¿ èŠã«ãªã£ããšãã«ã䜿çšãããªããšããããšãéèŠãªæå°ååã§ãã
ãã®æç¹ã§ãQA ããŒã ã®èªååãšã³ãžãã¢ã圌ã«æŠéã§ããã€ãã®ãã¹ããäœæããã¿ã¹ã¯ãå²ãåœãŠããã©ã³ãã«ãµãã³ãããã§ããããã«ããã®ãçæ³çã§ãã
äžããŠã¯ãããªããã®:
- éçºç°å¢ã®æ©èœãšããã°ã©ãã³ã°èšèªèªäœã«ã€ããŠã®ããæ·±ãç¥èããã©ã³ããç¬ç«ããŠæäœããå Žåã«ã®ã¿å¿ èŠãšãªããŸãã äºåºŠãäžåºŠã説æããªããã°ãªããªããããèŠããããŸããããç§ãã¡ã¯èªååãšã³ãžãã¢ã®æéã倧åã«ããŠããŸãã äŸ: 競åã®è§£æ±ºãgit ãžã®ãã¡ã€ã«ã®è¿œå ãã¯ã©ã¹ãæåããäœæãäŸåé¢ä¿ã®æäœã
- xpath ã«é¢é£ãããã¹ãŠã çå£ã«ã ããã«ã€ããŠã¯ãäžåºŠãéåžžã«éäžããŠåå¥ã«è©±ãå¿ èŠããããŸãã
ã¹ããã 2. ææ³ã詳ããèŠãŠã¿ã
ã¹ããã #0 ã®ã¿ã¹ã¯ãã¥ãŒã®ã¹ã¯ãªãŒã³ã·ã§ãããæãåºããŠãã ããã checkCommentWithTextExists ãšããã¹ãããããããŸãã ãã¹ã¿ãŒã¯ãã®ã¹ããããäœãè¡ããããã§ã«ç解ããŠããã®ã§ãã¹ãããå ã調ã¹ãŠå°ãå解ããããšãã§ããŸãã
ãããŠå éšã«ã¯æ¬¡ã®ãã®ããããŸã:
onCommentBlock(userName).comment(expectedText).should(displayed());
onCommentBlock ã®å Žæ
onCommonStreamPanel().commentBlock(userName);
ä»ãç§ãã¡ã¯ãããã¡ããè²·ããã§ã¯ãªãããäžãã XNUMX çªç®ã®æ£ã®éããã£ããããã«ãã Detsky Mir ã¹ãã¢ã§ããã¡ããè²·ãããšèšãããã«ãªããŸããã 倧ããªèŠçŽ ããé ã«èŠçŽ ãæå®ããŠããããšã説æããå¿ èŠããããŸã (ã¹ããªãŒã -> ç¹å®ã®äººããã®ã³ã¡ã³ããå«ãŸããããã㯠-> æå®ãããããã¹ããååšãããã®ãããã¯ã®éšå)ã
ãããããŸã xpath ã«ã€ããŠè©±ãææã§ã¯ãããŸããã ããããã¹ãŠã®åœä»€ã¯ãããã«ãã£ãŠèšè¿°ãããç¶æ¿ã¯ããããä»ããŠè¡ãããããšãç°¡åã«è¿°ã¹ãŠãã ããã ããããããããã¹ãŠã®ãããã£ãŒãšãŠã§ã€ã¿ãŒã«ã€ããŠèª¬æããå¿ èŠããããŸãããããã¯ç¹ã«ãã®ã¹ãããã«é¢é£ããŠãããäœãèµ·ãã£ãŠããã®ããç解ããããã«å¿ èŠã§ãã ãã ããè² è·ããããããªãã§ãã ãããçåŸã¯åŸã§ãããè€éãªã¢ãµãŒã·ã§ã³ãèªåã§åŠç¿ã§ããŸãã ããããã should ã waitUntil ãdisplayed(); ãexist(); ãnot(); ã§ååã§ãããã
宿é¡ã¯æããã§ããäžå®æ°ã®ãã¹ãã«å¿ èŠãªããã€ãã®ã¹ãããã®å 容ãåé€ããããã©ã³ãã§ãã ãã¹ã¿ãŒã«ââãããã埩å ãããŠãå®è¡ãåã³ã°ãªãŒã³ã«æ»ããŠããããŸãã
ããã«ããã¹ã ããŒã ã®äœæ¥ã«æ°æ©èœã ãã§ãªããã°ä¿®æ£ãå«ãŸããŠããå Žåã¯ããããã®ãã°ã«å¯Ÿãããã¹ããããã«äœæããŠãªãªãŒã¹ããããã«ããŒã ã«äŸé Œã§ããŸãã ããããããã¹ãŠã®èŠçŽ ã¯ãã§ã«èª¬æãããŠãããããã€ãã®ã¹ããããæ¬ ããŠããã ããããããŸããã ããã¯å®ç§ãªãã¬ãŒãã³ã°ã«ãªããŸãã
ã¹ããã 3. å®å šãªæµžæŒ¬
åŒãç¶ãçŽæ¥ã®è·åãéè¡ãããã¹ã¿ãŒã®ããã«ãå¯èœãªéãå®å šãªãã®ãæäŸããŸãã æåŸã«ãxpath ã«ã€ããŠèª¬æããå¿ èŠããããŸãã
ãŸããããããã¹ãŠã® onCommentBlock ãšã³ã¡ã³ãããããã«ãã£ãŠèšè¿°ãããŠããããšãæ確ã«ããŸãããã
åèšïŒ
"//div[contains(@class, âstream-panelâ)]//a[contains(@class,'author') and text()='{{ userName }}â]//div[contains(@class,'change-wrapper') and contains(.,'{{ text }}â)]"
話ã®é åºã¯éåžžã«éèŠã§ãã ãŸããæ¢åã® xpath ãååŸããèŠçŽ ã¿ãã«èŠçŽ ã XNUMX ã€ã ãå«ãŸããæ§åã瀺ããŸãã 次ã«ãWebElement ã䜿çšããå¿ èŠãããå Žåãšãæ°ããèŠçŽ çšã«å¥ã®ãã¡ã€ã«ãäœæããå¿ èŠãããå Žåã®æ§é ã«ã€ããŠèª¬æããŸãã ããã«ãããç¶æ¿ã«ã€ããŠããæ·±ãç解ã§ããããã«ãªããŸãã
åäžã®èŠçŽ ãã¿ã¹ã¯ãã¥ãŒå šäœã§ããããšãåèŠçŽ ãå«ãŸããããšãåèŠçŽ ãå«ãã¹ããªãŒã å šäœãå¥ã®ã³ã¡ã³ããªã©ãå«ãŸããŠããããšãæ瀺çã«èšè¿°ããå¿ èŠããããŸãã åèŠçŽ ã¯ãããŒãžäžãšèªåãã¹ã ãã¬ãŒã ã¯ãŒã¯ã®æ§é ã®äž¡æ¹ã®èŠªèŠçŽ å ã«ãããŸãã
ãã®æç¹ã§ãèŽè¡ã¯ãããããã©ã®ããã«ç¶æ¿ãããã®ãããã㊠onCommentBlock ã®ãããã®åŸã«äœãå
¥åã§ããã®ãããã£ãããšç解ããã¯ãã§ãã ãã®æç¹ã§ã/ã//ã.ã[] ãªã©ã®ãã¹ãŠã®æŒç®åã«ã€ããŠèª¬æããŸãã 䜿çšã«é¢ããç¥èãè² è·ã«è¿œå ããŸã @class
ãã®ä»å¿
èŠãªãã®ã
åŠçã¯ããã®æ¹æ³ã§ xpath ãå€æããæ¹æ³ãç解ããå¿
èŠããããŸãã çµ±åããã«ã¯ãããã§ãã宿é¡ã§ãã èŠçŽ ã®èª¬æãåé€ãããã¹ãã®åäœã埩å
ãããŸãã
ãªããã®ç¹å®ã®ãã¹ãªã®ã?
è€éãªç¥èã人ã«äžããããªãããã«ããå¿ èŠããããŸãããäžåºŠã«ãã¹ãŠã説æããªããã°ãªããªããããããã¯é£ãããžã¬ã³ãã§ãã ãã®æ¹æ³ã«ããããŸãèãæã«äœãåãããªãããšã質åããã次ã®ç¬éã«ããã«çããããšãã§ããŸãã ã¢ãŒããã¯ãã£å šäœã«ã€ããŠè©±ãå Žåãã¹ãããã xpath ã®ãããã¯ãåæããããŸã§ã«ããã®æãéèŠãªéšåã¯ç解ã§ããªãããããã§ã«å¿ããããŠããã§ãããã
ãã ããããã»ã¹ãããã«æé©åããæ¹æ³ã«ã€ããŠã®çµéšãå
±æã§ãã人ãããã§ãããã ã³ã¡ã³ãã§åæ§ã®ææ¡ãåãã§èªã¿ãŸãã
åºæïŒ habr.com