Selenideを使ってみた 〜 ブラウザテスト自動化 〜
4FMFOJEFΛͬͯΈͨʙϒϥβςετࣗಈԽʙ++6($$$4QSJOHDDD@N
View Slide
ࣗݾհ໊લɿTOPXIJSPॴଐɿࡳຈͷͱ͋Δ4*FSۈීஈͷۀ༰ɹ+BWBΛར༻ͨ͠8ΞϓϦͷ։ൃɹҙɿࠓൃද͢Δ༰ݸਓͷҙݟͰ͢ɻ
࣍w TFMFOJEFΛ͖͔͚ͬͨͬw ͬͯΈͨײw ϖʔδΦϒδΣΫτw ֬ೝํ๏w ·ͱΊ
TFMFOJEFΛ͍࢝Ί͖͔͚ͨͬ++6($$$GBMMʹͯʰ4FMFOJEFΛࢼߦࡨޡ͠ͳ͕Β࣮ફ͢ΔϒϥβࣗಈςετʱΛݟͯศརͦ͏ʂͬͯ͜ͱͰૣͬͯݟ·ͨ͠ɻࢀߟࢿྉɿIUUQCBDLQBQFSHJUIVCJPHIPTUTUSZTFMFOJEF
αϯϓϧΛ࣮ࢪ@Testpublic void yahooͷݕࡧ() {Selenide.open("https://www.yahoo.co.jp/");$("#srchtxt").setValue("selenide");$("#srchbtn").click();$(".resultNum").shouldHave(text("1,150,000݅"));}ᶃରͷ63-Λࢦఆͯ͠ϒϥβΛىಈᶄࢦఆϑΟʔϧυΛઃఆ͢ΔɻᶅཁૉΛΫϦοΫᶆϖʔδભҠޙͷཁૉͷதΛνΣοΫ
γϯϓϧͰ͍͍͢
ͨͩ͠
Կߟ͑ͣʑͱཁૉΛࢦఆͯ͠ॻ͘ͱίϐϖ͕େྔੜ࢈͞ΕΔ
!5FTUQVCMJDWPJEZBIPP@TFMFOJEFΛݕࡧ \ 4FMFOJEFPQFO IUUQTXXXZBIPPDPKQ lTSDIUYUTFU7BMVF TFMFOJEF TSDICUODMJDL SFTVMU/VNTIPVME)BWF UFYU ݅^!5FTUQVCMJDWPJEZBIPP@TFMFOJVNΛݕࡧ \ 4FMFOJEFPQFO IUUQTXXXZBIPPDPKQ lTSDIUYUTFU7BMVF TFMFOJVN TSDICUODMJDL SFTVMU/VNTIPVME)BWF UFYU ݅^ཁૉͷࢦఆมΘΒͳ͍ೖྗͷΈ͕มΘΔͷΈ
ϝϯςφϯεͷࣄΛߟ͑Δͱ͜ͷঢ়ଶਏ͍
ͦ͜Ͱ
ϖʔδΦϒδΣΫτύλʔϯ
ϖʔδΦϒδΣΫτύλʔϯͱʁ
ը໘ʹؔ͢ΔใӅ͠·͠ΐ͏ͬͯײ͡Ͱ͔͢Ͷɻ
IUUQTHJUIVCDPN4FMFOJVN)2TFMFOJVNXJLJ1BHF0CKFDUTৄ͘͠Γ͍ͨํݪจΛͲ͏ͧ
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ͷཁૉӅṭ͢Δɻᶅ࣍ͷϖʔδભҠ͢Δ߹ʹ࣍ͷϖʔδΦϒδΣΫτͷΠϯελϯεΛฦ٫͢Δ
public class ResultPage {@FindBy(className ="resultNum")private SelenideElement resultNum;public String getResultNum() {return resultNum.should(exist).getText();}}ᶃͷऔಘΞΫηοαʔΛܦ༝͠ɺ4FMFOJEF&MFNFOUͷཁૉӅṭ͢ΔɻϖʔδΦϒδΣΫτΛར༻ͨ͠߹ϖʔδΦϒδΣΫτͷ࡞ ݁Ռը໘ଆʣ
@Testpublic 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ͷϝιουΛӅṭ͍ͯ͠·͢ɻೖྗϑΟʔϧυʹมߋ͕ೖͬͯมߋରϖʔδΦϒδΣΫτͷΫϥεͷΈͰςετέʔεʹӨڹ͕ग़ͳ͍Α͏ʹͳΓ·͢ɻ
ϖʔδΦϒδΣΫτΛར༻͢Δͱมߋʹڧ͍ͰϖʔδΦϒδΣΫτ࡞͢ΔͷΊΜͲ͍͘͞
ָʹ࡞Ͱ͖ͳ͍͔ߟ͑ͯΈͨ
αʔόଆͷGPSNΫϥε͔Βͷੜɹαʔόଆʹͯ࡞͢Δ'PSNΫϥεΛݩʹ࡞͢Δ͜ͱ͕Ͱ͖ͳ͍͔Λݕ౼ͯ͠ΈͨɻϘλϯͷใ͕औಘͰ͖ͳ͍ͨΊஅ೦
ϖʔδΞΫηεͯ͠ཁૉऔಘFMFDUSPOͷXFCWJFXΛར༻ͯ͠ϖʔδཁૉΛΞΫηεͯ͠औಘཉ͍͠ใ͕औಘͰ͖Δ࠾༻
֓ཁw FMFDUSPOͷXFCWJFXΛར༻͢Δɻw ϖʔδͷFMFNFOUΛऔಘͯ͠ϖʔδΦϒδΣΫτͷϑΟʔϧυͱͯ͠ग़ྗɾཁૉͷ໊લJEPSOBNFΛར༻͢Δɻɹ
ϔομʔ෦ʹ͋ΔΑ͏ͳϝχϡʔͳͲͷڞ௨తͳཁૉʹ͍ͭͯͲͷΑ͏ʹ࣮͢Δ͔Ϋϥεʹ࣮ͯ͠ܧঝͯ͠ར༻͢Δʁը໘୯ҐͰͷࡉ͔͍࣮͕Ͱ͖ͳ͍ɻϖʔδΦϒδΣΫτϝϞɹͦͷ̍
ϖʔδΦϒδΣΫτϝϞɹͦͷ̍+BWBͳΒʮEFGBVMUNFIUPEʯΛར༻ͯ͠ΠϯλʔϑΣʔεΛJNQMFNFOUT͢Δ͜ͱͰඞཁ࠷ݶʹରԠ͢Δ͜ͱ͕Ͱ͖·͢ɻ
public interface Menu {default void logout() {Selenide.$("#logout-link").click();}}public class MainPage implements Menu {@Testpublic void ϝΠϯॲཧ() {// ϩάΞτlogout();}}ͪΐͬͱϝϞɹͦͷ̍σϑΥϧτϝιουػೳΛར༻
Ҏ্ͰϖʔδΦϒδΣΫτʹ͍͓ͭͯ͠·͍ɻ
࣍֬ೝ࡞ۀ
TFMFOJEFTIPVMEͱ$POEJUJPOͷϝιουΛΈ߹ΘͤΔ͜ͱͰ֬ೝ͕༰қߦ͑·͢ɻ
6*ࢼݧͷత໌֬Ͱ͔͢ʁ
6*ςετw ը໘ΩϟϓνϟΛ֬ೝw ը໘߲ͷΛ֬ೝw ը໘ભҠͷಈ࡞Λ֬ೝʜʑ৭ʑͳ֬ೝํ๏͕͋Δɻ
৭ʑͳ؍Ͱ֬ೝͰ͖Δͷ͕ཧ
ݱ࣮ʜશͯΛཏ͢Δͷ͍͠
ը໘ભҠ͕Ͱ͖Εޙ͔Βॏཁͳը໘ػೳ͚ͩϐοΫΞοϓ͢Ε͍͍ͱ͍͏ํ͠·ͨ͠
ͱ͍͏͜ͱͰը໘ભҠΛத৺ʹ֬ೝΛ࣮ࢪ
w ॳظදࣔͷ߹w λΠτϧΛ֬ೝw ը໘ΩϟϓνϟΛऔಘw ը໘Ͱͷཁૉมߋͷ߹w ΩʔͱͳΔཁૉ͚ͩ֬ೝw ը໘ΩϟϓνϟΛऔಘ֬ೝ؍
ը૾ΩϟϓνϟׂΓͬͯࢹ֬ೝ
ͦͷΘΓՃใΛςΩετʹͯग़ྗग़ྗ͞ΕͨςΩετͱը໘ΩϟϓνϟΛΤϏσϯεܗࣜՃͯ͠ݟ͘͢͠·ͨ͠
ը໘ΩϟϓνϟϝϞTFMFOJEFͰʮ4FMFOJEFTDSFFOTIPUʯͰεΫϦϯγϣοτΛऔಘͰ͖·͢ɻͰ͕͢ϒϥβʹΑͬͯը໘औಘൣғ͕ҟͳΓ·͢ TFMFOJVNͷ
w B4IPUIUUQTHJUIVCDPNZBOEFYRBUPPMTBTIPUw 1JUBMJVNIUUQTHJUIVCDPNIJpWFIJpWFQJUBMJVNରԠ͢ΔͨΊͷϥΠϒϥϦ͕͍͔ͭ͘Ͱ͍ͯ·͢ͷͰར༻Λݕ౼ͯ͠ΈΔͱ͍͍͔͠Ε·ͤΜɻը໘ΩϟϓνϟϝϞ
·ͬͨ͜ͱ
ࡢ·Ͱಈ͍͍ͯͨςετ͕ىಈ͠ͳ͘ͳͬͨDISPNF͕ߋ৽͞Ε͍ͯͯXFCEJSWFSͱόʔδϣϯ͕Ұக͠ͳ͘ͳ͍ͬͯͨɻ
·ͱΊ
ϖʔδΦϒδΣΫτ࠷ॳେมͰؤுͬͯ࡞Δͱྑ͍͔ͳͱࢥ͍·͢ɻ
֬ೝʹ͍ͭͯతΛ໌͔֬ͯ͠ΒܭըΛͨ͠ํ͕ྑ͍͔ͳͱࢥ͍·͢ɻ
গͮͭ͠ಋೖ͢Δ͜ͱ͕Ͱ͖ΔͷͰҰาҰาਐΊΔͷ͕ྑ͍͔ͱࢥ͍·͢ɻ
Ҏ্Ͱ͢ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠N @@N