Save 37% off PRO during our Black Friday Sale! »

Selenideを使ってみた 〜 ブラウザテスト自動化 〜

Selenideを使ってみた 〜 ブラウザテスト自動化 〜

Selenideを使ってみた 〜 ブラウザテスト自動化 〜

Bc58ca9269dad6396657fb7216a1da23?s=128

snowhiro

May 20, 2017
Tweet

Transcript

  1. 4FMFOJEFΛ࢖ͬͯΈͨ ʙϒϥ΢βςετࣗಈԽʙ ++6($$$4QSJOH DDD@N

  2. ࣗݾ঺հ ໊લɿTOPXIJSP ॴଐɿࡳຈͷͱ͋Δ4*FSۈ຿ ීஈͷۀ຿಺༰ ɹ+BWBΛར༻ͨ͠8&#ΞϓϦͷ։ൃ ɹ ஫ҙɿࠓ೔ൃද͢Δ಺༰͸ݸਓͷҙݟͰ͢ɻ

  3. ໨࣍ w TFMFOJEFΛ஌͖͔͚ͬͨͬ w ࢖ͬͯΈͨײ૝ w ϖʔδΦϒδΣΫτ w ֬ೝํ๏ w

    ·ͱΊ
  4. TFMFOJEFΛ࢖͍࢝Ί͖͔͚ͨͬ ++6($$$GBMMʹͯ ʰ4FMFOJEFΛࢼߦࡨޡ͠ͳ͕Β࣮ફ͢Δϒϥ΢βࣗ ಈςετʱ Λݟͯศརͦ͏ʂͬͯ͜ͱͰૣ଎࢖ͬͯݟ·ͨ͠ɻ ࢀߟࢿྉɿ IUUQCBDLQBQFSHJUIVCJPHIPTUTUSZ TFMFOJEF

  5. αϯϓϧΛ࣮ࢪ @Test public void yahooͷݕࡧ() { Selenide.open("https://www.yahoo.co.jp/"); $("#srchtxt").setValue("selenide"); $("#srchbtn").click(); $(".resultNum").shouldHave(text("໿1,150,000݅"));

    } ᶃର৅ͷ63-Λࢦఆͯ͠ϒϥ΢βΛىಈ ᶄࢦఆϑΟʔϧυ΁஋Λઃఆ͢Δɻ ᶅཁૉΛΫϦοΫ ᶆϖʔδભҠޙͷཁૉͷத਎ΛνΣοΫ
  6. γϯϓϧͰ࢖͍΍͍͢

  7. ͨͩ͠

  8. Կ΋ߟ͑ͣ ໧ʑͱཁૉΛࢦఆͯ͠ॻ͘ͱ ίϐϖ͕େྔੜ࢈͞ΕΔ

  9. !5FTU QVCMJDWPJEZBIPP@TFMFOJEFΛݕࡧ \  4FMFOJEFPQFO IUUQTXXXZBIPPDPKQ    lTSDIUYU

    TFU7BMVF TFMFOJEF    TSDICUO DMJDL    SFTVMU/VN TIPVME)BWF UFYU ໿  ݅  ^ !5FTU QVCMJDWPJEZBIPP@TFMFOJVNΛݕࡧ \  4FMFOJEFPQFO IUUQTXXXZBIPPDPKQ    lTSDIUYU TFU7BMVF TFMFOJVN    TSDICUO DMJDL    SFTVMU/VN TIPVME)BWF UFYU ໿  ݅  ^ ཁૉͷࢦఆ͸มΘΒͳ͍ ೖྗ஋౳ͷΈ͕มΘΔͷΈ
  10. ϝϯςφϯεͷࣄΛߟ͑Δͱ ͜ͷঢ়ଶ͸ਏ͍

  11. ͦ͜Ͱ

  12. ϖʔδΦϒδΣΫτύλʔϯ

  13. ϖʔδΦϒδΣΫτύλʔϯ ͱ͸ʁ

  14. ը໘ʹؔ͢Δ৘ใ͸Ӆ͠·͠ΐ͏ ͬͯײ͡Ͱ͔͢Ͷɻ

  15. IUUQTHJUIVCDPN4FMFOJVN)2TFMFOJVNXJLJ 1BHF0CKFDUT ৄ͘͠஌Γ͍ͨํ͸ݪจΛͲ͏ͧ

  16. public class SrchPage { @FindBy(id = “srchtxt") private SelenideElement srchTxt;

    public void setSrchTxt(String text) { this.srchTxt.setValue(text); } @FindBy(id = "srchbtn") public SelenideElement srchBtn; public ResultPage clickSrchBtn() { ɹ srchBtn.click(); return page(ResultPage.class); } } ϖʔδΦϒδΣΫτΛར༻ͨ͠৔߹ ϖʔδΦϒδΣΫτͷ࡞੒ ৚݅ೖྗଆʣ ᶃ!'JOE#Zʹͯର৅ͷཁૉΛϑΟʔϧυʹ ࢦఆ͢Δɻ ᶄ஋ͷऔಘɾઃఆ͸ΞΫηοαʔΛܦ༝͠ɺ 4FMFOJEF&MFNFOUͷཁૉ͸Ӆṭ͢Δɻ ᶅ࣍ͷϖʔδ΁ભҠ͢Δ৔߹ʹ͸࣍ͷϖʔδ ΦϒδΣΫτͷΠϯελϯεΛฦ٫͢Δ
  17. public class ResultPage { @FindBy(className ="resultNum") private SelenideElement resultNum; public

    String getResultNum() { return resultNum.should(exist).getText(); } } ᶃ஋ͷऔಘ͸ΞΫηοαʔΛܦ༝͠ɺ 4FMFOJEF&MFNFOUͷཁૉ͸Ӆṭ͢Δɻ ϖʔδΦϒδΣΫτΛར༻ͨ͠৔߹ ϖʔδΦϒδΣΫτͷ࡞੒ ݁Ռը໘ଆʣ
  18. @Test public void yahooͷݕࡧ_ϖʔδΦϒδΣΫτ() { SrchPage srchPage = Selenide.open(“https://www.yahoo.co.jp/“ ,

    SrchPage.class); srchPage.setSrchTxt("selenide"); ResultPage resultPage = srchPage.clickSrchBtn(); assertThat(resultPage.getResultNum()) .isEqualTo("໿1,150,000݅"); } ϖʔδΦϒδΣΫτΛར༻ͨ͠৔߹ ςετέʔεΛهड़ PQFOҎ֎ͷTFMFOJEFͷϝιουΛӅṭ͍ͯ͠·͢ɻ ೖྗϑΟʔϧυ౳ʹมߋ͕ೖͬͯ΋มߋର৅͸ϖʔδ ΦϒδΣΫτͷΫϥεͷΈͰςετέʔεʹ͸Өڹ͕ ग़ͳ͍Α͏ʹͳΓ·͢ɻ
  19. ϖʔδΦϒδΣΫτΛར༻͢Δͱ มߋʹڧ͍ Ͱ΋ ϖʔδΦϒδΣΫτ࡞੒͢Δͷ͸ ΊΜͲ͍͘͞

  20. ָʹ࡞੒Ͱ͖ͳ͍͔ ߟ͑ͯΈͨ

  21. αʔόଆͷGPSNΫϥε͔Βͷੜ੒ ɹαʔόଆʹͯ࡞੒͢Δ'PSNΫϥεΛݩʹ࡞ ੒͢Δ͜ͱ͕Ͱ͖ͳ͍͔Λݕ౼ͯ͠Έͨɻ Ϙλϯ౳ͷ৘ใ͕औಘͰ͖ͳ͍ͨΊஅ೦

  22. ϖʔδ΁௚઀ΞΫηεͯ͠ཁૉऔಘ FMFDUSPOͷXFCWJFXΛར༻ͯ͠ ϖʔδཁૉΛ௚઀ΞΫηεͯ͠औಘ ཉ͍͠৘ใ͕औಘͰ͖Δ ࠾༻

  23. ֓ཁ w FMFDUSPOͷXFCWJFXΛར༻͢Δɻ w ϖʔδͷFMFNFOUΛऔಘͯ͠ϖʔδΦϒ δΣΫτͷϑΟʔϧυͱͯ͠ग़ྗ ɾཁૉͷ໊લ͸JEPSOBNFΛར༻͢Δɻ ɹ

  24. ϔομʔ෦෼౳ʹ͋ΔΑ͏ͳ ϝχϡʔͳͲͷڞ௨తͳཁૉʹ͍ͭͯ ͲͷΑ͏ʹ࣮૷͢Δ͔ ਌Ϋϥεʹ࣮૷ͯ͠ܧঝͯ͠ར༻͢Δʁ ը໘୯ҐͰͷࡉ͔͍࣮૷͕Ͱ͖ͳ͍ɻ ϖʔδΦϒδΣΫτϝϞɹͦͷ̍

  25. ϖʔδΦϒδΣΫτϝϞɹͦͷ̍ +BWBͳΒ ʮEFGBVMUNFIUPEʯΛར༻ͯ͠ ΠϯλʔϑΣʔεΛJNQMFNFOUT ͢Δ͜ͱͰඞཁ࠷௿ݶʹରԠ͢Δ͜ͱ ͕Ͱ͖·͢ɻ

  26. public interface Menu { default void logout() { Selenide.$("#logout-link").click(); }

    } public class MainPage implements Menu { @Test public void ϝΠϯॲཧ() { // ϩάΞ΢τ logout(); } } ͪΐͬͱϝϞɹͦͷ̍ σϑΥϧτϝιου ػೳΛར༻
  27. Ҏ্ͰϖʔδΦϒδΣΫτ ʹ͍ͭͯ͸͓͠·͍ɻ

  28. ࣍͸֬ೝ࡞ۀ

  29. TFMFOJEF͸ TIPVMEͱ$POEJUJPOͷϝιουΛ ૊Έ߹ΘͤΔ͜ͱͰ֬ೝ͕༰қߦ͑·͢ɻ

  30. 6*ࢼݧͷ໨త͸ ໌֬Ͱ͔͢ʁ

  31. 6*ςετ͸ w ը໘ΩϟϓνϟΛ֬ೝ w ը໘߲໨ͷ஋Λ֬ೝ w ը໘ભҠͷಈ࡞Λ֬ೝ ʜ౳ʑ ৭ʑͳ֬ೝํ๏͕͋Δɻ

  32. ৭ʑͳ؍఺Ͱ֬ೝͰ͖Δͷ͕ཧ૝

  33. ݱ࣮͸ʜ શͯΛ໢ཏ͢Δͷ͸೉͍͠

  34. ը໘ભҠ͕Ͱ͖Ε͹ ޙ͔Βॏཁͳը໘΍ػೳ͚ͩ ϐοΫΞοϓ͢Ε͹͍͍ ͱ͍͏ํ਑͠·ͨ͠

  35. ͱ͍͏͜ͱͰ ը໘ભҠΛத৺ʹ֬ೝΛ࣮ࢪ

  36. w ॳظදࣔͷ৔߹ w λΠτϧΛ֬ೝ w ը໘ΩϟϓνϟΛऔಘ w ը໘಺Ͱͷཁૉมߋͷ৔߹ w ΩʔͱͳΔཁૉ͚ͩ͸֬ೝ

    w ը໘ΩϟϓνϟΛऔಘ ֬ೝ؍఺
  37. ը૾Ωϟϓνϟ͸ׂΓ੾ͬͯ ໨ࢹ֬ೝ

  38. ͦͷ୅ΘΓ ෇Ճ৘ใΛςΩετʹͯग़ྗ ग़ྗ͞ΕͨςΩετͱը໘ΩϟϓνϟΛ ΤϏσϯεܗࣜՃ޻ͯ͠ ݟ΍͘͢͠·ͨ͠

  39. ը໘ΩϟϓνϟϝϞ TFMFOJEFͰ͸ ʮ4FMFOJEFTDSFFOTIPUʯ ͰεΫϦϯγϣοτΛऔಘͰ͖·͢ɻ Ͱ͕͢ ϒϥ΢βʹΑͬͯը໘ औಘൣғ͕ҟͳΓ·͢ TFMFOJVNͷ໰୊

  40.  w B4IPU IUUQTHJUIVCDPNZBOEFYRBUPPMTBTIPU w 1JUBMJVN IUUQTHJUIVCDPNIJpWFIJpWFQJUBMJVN ରԠ͢ΔͨΊͷϥΠϒϥϦ͕͍͔ͭ͘ Ͱ͍ͯ·͢ͷͰར༻Λݕ౼ͯ͠ΈΔͱ͍ ͍͔΋͠Ε·ͤΜɻ

    ը໘ΩϟϓνϟϝϞ
  41. ͸·ͬͨ͜ͱ

  42. ࡢ೔·Ͱಈ͍͍ͯͨςετ͕ ىಈ͠ͳ͘ͳͬͨ DISPNF͕ߋ৽͞Ε͍ͯͯ XFCEJSWFSͱόʔδϣϯ͕ Ұக͠ͳ͘ͳ͍ͬͯͨɻ

  43. ·ͱΊ

  44. ϖʔδΦϒδΣΫτ ࠷ॳ͸େมͰ΋ ؤுͬͯ࡞Δͱྑ͍͔ͳͱ ࢥ͍·͢ɻ

  45. ֬ೝʹ͍ͭͯ͸໨తΛ໌֬ ͔ͯ͠ΒܭըΛͨ͠ํ͕ྑ͍ ͔ͳͱࢥ͍·͢ɻ

  46. গͮͭ͠ಋೖ͢Δ͜ͱ͕Ͱ͖ΔͷͰ ҰาҰาਐΊΔͷ͕ྑ͍͔ͱࢥ͍·͢ɻ

  47. Ҏ্Ͱ͢ɻ

  48. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ N @@ N