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.4k
Selenideを使ってみた 〜 ブラウザテスト自動化 〜
Selenideを使ってみた 〜 ブラウザテスト自動化 〜
snowhiro
May 20, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
リセラー企業のテクサポ担当が考える、生成 AI 時代のトラブルシュート 2025
kazzpapa3
1
360
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
4
3.4k
2025-10-09_プロジェクトマネージャーAIチャンス
taukami
0
150
HR Force における DWH の併用事例 ~ サービス基盤としての BigQuery / 分析基盤としての Snowflake ~@Cross Data Platforms Meetup #2「BigQueryと愉快な仲間たち」
ryo_suzuki
0
230
それでも私が品質保証プロセスを作り続ける理由 #テストラジオ / Why I still continue to create QA process
pineapplecandy
0
110
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
870
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
12
80k
ガバメントクラウド(AWS)へのデータ移行戦略の立て方【虎の巻】 / 20251011 Mitsutosi Matsuo
shift_evolve
PRO
2
200
セキュアな認可付きリモートMCPサーバーをAWSマネージドサービスでつくろう! / Let's build an OAuth protected remote MCP server based on AWS managed services
kaminashi
3
340
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
600
AI時代こそ求められる設計力- AWSクラウドデザインパターン3選で信頼性と拡張性を高める-
kenichirokimura
3
330
難しいセキュリティ用語をわかりやすくしてみた
yuta3110
0
220
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Making Projects Easy
brettharned
120
6.4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
590
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Code Review Best Practice
trishagee
72
19k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Gamification - CAS2011
davidbonilla
81
5.5k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
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