Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Selenideを使ってみた 〜 ブラウザテスト自動化 〜
Search
snowhiro
May 20, 2017
Technology
2
7.5k
Selenideを使ってみた 〜 ブラウザテスト自動化 〜
Selenideを使ってみた 〜 ブラウザテスト自動化 〜
snowhiro
May 20, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
400
サラリーマンソフトウェアエンジニアのキャリア
yuheinakasaka
33
16k
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
4.9k
Redshift認可、アップデートでどう変わった?
handy
1
130
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.6k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
330
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
210
Node vs Deno vs Bun 〜推しランタイムを見つけよう〜
kamekyame
1
380
「アウトプット脳からユーザー価値脳へ」がそんなに簡単にできたら苦労しない #RSGT2026
aki_iinuma
9
4.5k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
21k
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.3k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1371
200k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
35
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.5k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
Are puppies a ranking factor?
jonoalderson
0
2.6k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
540
WENDY [Excerpt]
tessaabrams
9
35k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
130
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
45
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
130
Transcript
4FMFOJEFΛͬͯΈͨ ʙϒϥβςετࣗಈԽʙ ++6($$$4QSJOH DDD@N
ࣗݾհ ໊લɿTOPXIJSP ॴଐɿࡳຈͷͱ͋Δ4*FSۈ ීஈͷۀ༰ ɹ+BWBΛར༻ͨ͠8&#ΞϓϦͷ։ൃ ɹ ҙɿࠓൃද͢Δ༰ݸਓͷҙݟͰ͢ɻ
࣍ w TFMFOJEFΛ͖͔͚ͬͨͬ w ͬͯΈͨײ w ϖʔδΦϒδΣΫτ w ֬ೝํ๏ w
·ͱΊ
TFMFOJEFΛ͍࢝Ί͖͔͚ͨͬ ++6($$$GBMMʹͯ ʰ4FMFOJEFΛࢼߦࡨޡ͠ͳ͕Β࣮ફ͢Δϒϥβࣗ ಈςετʱ Λݟͯศརͦ͏ʂͬͯ͜ͱͰૣͬͯݟ·ͨ͠ɻ ࢀߟࢿྉɿ IUUQCBDLQBQFSHJUIVCJPHIPTUTUSZ TFMFOJEF
αϯϓϧΛ࣮ࢪ @Test public void yahooͷݕࡧ() { Selenide.open("https://www.yahoo.co.jp/"); $("#srchtxt").setValue("selenide"); $("#srchbtn").click(); $(".resultNum").shouldHave(text("1,150,000݅"));
} ᶃରͷ63-Λࢦఆͯ͠ϒϥβΛىಈ ᶄࢦఆϑΟʔϧυΛઃఆ͢Δɻ ᶅཁૉΛΫϦοΫ ᶆϖʔδભҠޙͷཁૉͷதΛνΣοΫ
γϯϓϧͰ͍͍͢
ͨͩ͠
Կߟ͑ͣ ʑͱཁૉΛࢦఆͯ͠ॻ͘ͱ ίϐϖ͕େྔੜ࢈͞ΕΔ
!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 ݅ ^ ཁૉͷࢦఆมΘΒͳ͍ ೖྗͷΈ͕มΘΔͷΈ
ϝϯςφϯεͷࣄΛߟ͑Δͱ ͜ͷঢ়ଶਏ͍
ͦ͜Ͱ
ϖʔδΦϒδΣΫτύλʔϯ
ϖʔδΦϒδΣΫτύλʔϯ ͱʁ
ը໘ʹؔ͢ΔใӅ͠·͠ΐ͏ ͬͯײ͡Ͱ͔͢Ͷɻ
IUUQTHJUIVCDPN4FMFOJVN)2TFMFOJVNXJLJ 1BHF0CKFDUT ৄ͘͠Γ͍ͨํݪจΛͲ͏ͧ
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ͷཁૉӅṭ͢Δɻ ϖʔδΦϒδΣΫτΛར༻ͨ͠߹ ϖʔδΦϒδΣΫτͷ࡞ ݁Ռը໘ଆʣ
@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ͷϝιουΛӅṭ͍ͯ͠·͢ɻ ೖྗϑΟʔϧυʹมߋ͕ೖͬͯมߋରϖʔδ ΦϒδΣΫτͷΫϥεͷΈͰςετέʔεʹӨڹ͕ ग़ͳ͍Α͏ʹͳΓ·͢ɻ
ϖʔδΦϒδΣΫτΛར༻͢Δͱ มߋʹڧ͍ Ͱ ϖʔδΦϒδΣΫτ࡞͢Δͷ ΊΜͲ͍͘͞
ָʹ࡞Ͱ͖ͳ͍͔ ߟ͑ͯΈͨ
αʔόଆͷ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 { @Test public void ϝΠϯॲཧ() { // ϩάΞτ logout(); } } ͪΐͬͱϝϞɹͦͷ̍ σϑΥϧτϝιου ػೳΛར༻
Ҏ্ͰϖʔδΦϒδΣΫτ ʹ͍͓ͭͯ͠·͍ɻ
࣍֬ೝ࡞ۀ
TFMFOJEF TIPVMEͱ$POEJUJPOͷϝιουΛ Έ߹ΘͤΔ͜ͱͰ֬ೝ͕༰қߦ͑·͢ɻ
6*ࢼݧͷత ໌֬Ͱ͔͢ʁ
6*ςετ w ը໘ΩϟϓνϟΛ֬ೝ w ը໘߲ͷΛ֬ೝ w ը໘ભҠͷಈ࡞Λ֬ೝ ʜʑ ৭ʑͳ֬ೝํ๏͕͋Δɻ
৭ʑͳ؍Ͱ֬ೝͰ͖Δͷ͕ཧ
ݱ࣮ʜ શͯΛཏ͢Δͷ͍͠
ը໘ભҠ͕Ͱ͖Ε ޙ͔Βॏཁͳը໘ػೳ͚ͩ ϐοΫΞοϓ͢Ε͍͍ ͱ͍͏ํ͠·ͨ͠
ͱ͍͏͜ͱͰ ը໘ભҠΛத৺ʹ֬ೝΛ࣮ࢪ
w ॳظදࣔͷ߹ w λΠτϧΛ֬ೝ w ը໘ΩϟϓνϟΛऔಘ w ը໘Ͱͷཁૉมߋͷ߹ w ΩʔͱͳΔཁૉ͚ͩ֬ೝ
w ը໘ΩϟϓνϟΛऔಘ ֬ೝ؍
ը૾ΩϟϓνϟׂΓͬͯ ࢹ֬ೝ
ͦͷΘΓ ՃใΛςΩετʹͯग़ྗ ग़ྗ͞ΕͨςΩετͱը໘ΩϟϓνϟΛ ΤϏσϯεܗࣜՃͯ͠ ݟ͘͢͠·ͨ͠
ը໘ΩϟϓνϟϝϞ TFMFOJEFͰ ʮ4FMFOJEFTDSFFOTIPUʯ ͰεΫϦϯγϣοτΛऔಘͰ͖·͢ɻ Ͱ͕͢ ϒϥβʹΑͬͯը໘ औಘൣғ͕ҟͳΓ·͢ TFMFOJVNͷ
w B4IPU IUUQTHJUIVCDPNZBOEFYRBUPPMTBTIPU w 1JUBMJVN IUUQTHJUIVCDPNIJpWFIJpWFQJUBMJVN ରԠ͢ΔͨΊͷϥΠϒϥϦ͕͍͔ͭ͘ Ͱ͍ͯ·͢ͷͰར༻Λݕ౼ͯ͠ΈΔͱ͍ ͍͔͠Ε·ͤΜɻ
ը໘ΩϟϓνϟϝϞ
·ͬͨ͜ͱ
ࡢ·Ͱಈ͍͍ͯͨςετ͕ ىಈ͠ͳ͘ͳͬͨ DISPNF͕ߋ৽͞Ε͍ͯͯ XFCEJSWFSͱόʔδϣϯ͕ Ұக͠ͳ͘ͳ͍ͬͯͨɻ
·ͱΊ
ϖʔδΦϒδΣΫτ ࠷ॳେมͰ ؤுͬͯ࡞Δͱྑ͍͔ͳͱ ࢥ͍·͢ɻ
֬ೝʹ͍ͭͯతΛ໌֬ ͔ͯ͠ΒܭըΛͨ͠ํ͕ྑ͍ ͔ͳͱࢥ͍·͢ɻ
গͮͭ͠ಋೖ͢Δ͜ͱ͕Ͱ͖ΔͷͰ ҰาҰาਐΊΔͷ͕ྑ͍͔ͱࢥ͍·͢ɻ
Ҏ্Ͱ͢ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ N @@ N