Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

snowhiro

May 20, 2017
Tweet

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. αϯϓϧΛ࣮ࢪ
    @Test
    public void yahooͷݕࡧ() {
    Selenide.open("https://www.yahoo.co.jp/");
    $("#srchtxt").setValue("selenide");
    $("#srchbtn").click();
    $(".resultNum").shouldHave(text("໿1,150,000݅"));
    }
    ᶃର৅ͷ63-Λࢦఆͯ͠ϒϥ΢βΛىಈ
    ᶄࢦఆϑΟʔϧυ΁஋Λઃఆ͢Δɻ
    ᶅཁૉΛΫϦοΫ
    ᶆϖʔδભҠޙͷཁૉͷத਎ΛνΣοΫ

    View Slide

  6. γϯϓϧͰ࢖͍΍͍͢

    View Slide

  7. ͨͩ͠

    View Slide

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

    View Slide

  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 ໿ ݅


    ^
    ཁૉͷࢦఆ͸มΘΒͳ͍
    ೖྗ஋౳ͷΈ͕มΘΔͷΈ

    View Slide

  10. ϝϯςφϯεͷࣄΛߟ͑Δͱ
    ͜ͷঢ়ଶ͸ਏ͍

    View Slide

  11. ͦ͜Ͱ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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ͷཁૉ͸Ӆṭ͢Δɻ
    ᶅ࣍ͷϖʔδ΁ભҠ͢Δ৔߹ʹ͸࣍ͷϖʔδ
    ΦϒδΣΫτͷΠϯελϯεΛฦ٫͢Δ

    View Slide

  17. public class ResultPage {
    @FindBy(className ="resultNum")
    private SelenideElement resultNum;
    public String getResultNum() {
    return resultNum.should(exist).getText();
    }
    }
    ᶃ஋ͷऔಘ͸ΞΫηοαʔΛܦ༝͠ɺ
    4FMFOJEF&MFNFOUͷཁૉ͸Ӆṭ͢Δɻ
    ϖʔδΦϒδΣΫτΛར༻ͨ͠৔߹
    ϖʔδΦϒδΣΫτͷ࡞੒ ݁Ռը໘ଆʣ

    View Slide

  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ͷϝιουΛӅṭ͍ͯ͠·͢ɻ
    ೖྗϑΟʔϧυ౳ʹมߋ͕ೖͬͯ΋มߋର৅͸ϖʔδ
    ΦϒδΣΫτͷΫϥεͷΈͰςετέʔεʹ͸Өڹ͕
    ग़ͳ͍Α͏ʹͳΓ·͢ɻ

    View Slide

  19. ϖʔδΦϒδΣΫτΛར༻͢Δͱ
    มߋʹڧ͍
    Ͱ΋
    ϖʔδΦϒδΣΫτ࡞੒͢Δͷ͸
    ΊΜͲ͍͘͞

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. public interface Menu {
    default void logout() {
    Selenide.$("#logout-link").click();
    }
    }
    public class MainPage implements Menu {
    @Test
    public void ϝΠϯॲཧ() {
    // ϩάΞ΢τ
    logout();
    }
    }
    ͪΐͬͱϝϞɹͦͷ̍
    σϑΥϧτϝιου
    ػೳΛར༻

    View Slide

  27. Ҏ্ͰϖʔδΦϒδΣΫτ
    ʹ͍ͭͯ͸͓͠·͍ɻ

    View Slide

  28. ࣍͸֬ೝ࡞ۀ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. ը૾Ωϟϓνϟ͸ׂΓ੾ͬͯ
    ໨ࢹ֬ೝ

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide

  41. ͸·ͬͨ͜ͱ

    View Slide

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

    View Slide

  43. ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. Ҏ্Ͱ͢ɻ

    View Slide

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

    View Slide