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
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
190
今日から始めるAmazon Bedrock AgentCore
har1101
4
420
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
570
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
770
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.2k
プロポーザルに込める段取り八分
shoheimitani
1
660
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.6k
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
100
Agent Skils
dip_tech
PRO
0
140
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Navigating Weather and Climate Data
rabernat
0
110
So, you think you're a good person
axbom
PRO
2
1.9k
How STYLIGHT went responsive
nonsquared
100
6k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
53
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
440
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Cult of Friendly URLs
andyhume
79
6.8k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Bash Introduction
62gerente
615
210k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
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