Slide 1

Slide 1 text

&MFDUSPO8FC%SJWFS 4QFDUSPO .PEFSO8FC"QQ-5 @Linda_pp @rhysd

Slide 2

Slide 2 text

&MFDUSPO w σεΫτοϓΞϓϦϑϨʔϜϫʔΫGSPN(JU)VC w $ISPNJVNϕʔε/PEFKT

Slide 3

Slide 3 text

&MFDUSPOΞϓϦ։ൃ༻ΞϓϦ 4QFDUSPO &OEUP&OEςετ ༻ͷςεςΟϯάɹ ϑϨʔϜϫʔΫ $ISPNFESJWFS XFCESJWFSJP %FWUSPO *1$΍ΠϕϯτΛ؂ ࢹͰ͖Δ%FW5PPMT ֦ு "1*%FNP"QQ &MFDUSPOͷ֤छ"1* ΛࢼͤΔσϞΞϓϦ

Slide 4

Slide 4 text

&MFDUSPOΞϓϦ։ൃ༻ΞϓϦ 4QFDUSPO &OEUP&OEςετ ༻ͷςεςΟϯάɹ ϑϨʔϜϫʔΫ $ISPNFESJWFS XFCESJWFSJP %FWUSPO *1$΍ΠϕϯτΛ ؂ࢹͰ͖Δ %FW5PPMT֦ு "1*%FNP"QQ &MFDUSPOͷ֤छ"1* ΛࢼͤΔσϞΞϓϦ

Slide 5

Slide 5 text

&MFDUSPOΞϓϦͷςετ w ୯ମςετʢ&MFDUSPO"1*΁ͷґଘແ͠ʣ w ϩʔΧϧͷ/PEFKTͰςετʢ৔߹ʹΑͬͯKTEPNʣ w ୯ମςετʢ&MFDUSPO"1*΁ͷґଘ༗Γʣ w FMFDUSPONPDIBΛ࢖ͬͯ&MFDUSPOͷϓϩηε্ͰςετΛ૸ΒͤΔ w IUUQTHJUIVCDPNKQSJDIBSETPOFMFDUSPONPDIB w &OEUP&OEςετ w 4QFDUSPOΛ࢖࣮ͬͯࡍͷΞϓϦΛಈ͔͢ w IUUQTHJUIVCDPNFMFDUSPOTQFDUSPO

Slide 6

Slide 6 text

σϞʂ w IUUQTHJUIVCDPNSIZTE:PVS'VLVSPV w πΠολʔΫϥΠΞϯτ w 5ZQF4DSJQUBWBKTBTZODBXBJU

Slide 7

Slide 7 text

4QFDUSPO w 4QFDUSPODISPNFESJWFSXFCESJWFSJP w DISPNFESJWFSͷηοτΞοϓ΍ΞϓϦଆͷ &MFDUSPO"1*Λୟͨ͘Ίͷϔϧύʔ w ΞϓϦͷQBUIΛࢦఆ͢Δ͚ͩͰ͙͢ςετ͕࢝Ί ΒΕΔ w 5SBWJT$*"QQ7FZPSSFBEZ

Slide 8

Slide 8 text

XFCESJWFSJP w 4FMFOJVN8FC%SJWFSͷ+BWB4DSJQUόΠϯσΟϯ άɽ8FC%SJWFS"1*ܦ༝Ͱϒϥ΢βΛૢ࡞͢Δϥ ΠϒϥϦ w ඪ४ͷ+4όΠϯσΟϯάʹൺ΂ͯ؆ܿʹॻ͚Δ

Slide 9

Slide 9 text

&MFDUSPO $ISPNJVN 4QFDUSPO XFCESJWFSJP :PVS5FTU $PEF :PVS"QQ w DBQBCJMJUZࣗಈࢦఆ w ESJWFSΦϒδΣΫ τ֦ு w 8FC%SJWFS"1* WJBDISPNFESJWFS w NPDIB΍BWBͳͲ Ͱςετ w &MFDUSPO"1*ͷϦ Ϟʔτ࣮ߦ

Slide 10

Slide 10 text

import test from 'ava'; import {Application} from 'spectron'; test.beforeEach(async t => { t.context.app = new Application({ path: '/Applications/MyApp.app/Contents/MacOS/MyApp' }); await t.context.app.start(); }); test.afterEach.always(async t => { await t.context.app.stop(); }); test(async t => { const app = t.context.app; const client = app.client; await client.waitUntilWindowLoaded(); // Electron API (BrowserWindow) const win = app.browserWindow; t.true(await win.isVisible()); // Operate app via WebDriver await client.element('#name-input').keys('my name'); await client.click('#submit-btn'); t.true(await client.waitForExist('#login-success')); });

Slide 11

Slide 11 text

FMFDUSPOQSFCVJMU ύοέʔδΛ࢖͍͍ͨ࣌ import {Application} from 'spectron'; import * as electron from 'electron-prebuilt'; test.beforeEach(async t => { t.context.app = new Application({ path: electron, args: ['/path/to/your/repository'], env: process.env, }); });

Slide 12

Slide 12 text

HPUP'"*- w ςετ͕GBJMͨ͠ͱ͖ w NBJOϓϩηε΍SFOEFSFSϓϩηεͷϩάΛऩूͯ͠อ ଘ w DMJFOUHFU.BJO1SPDFTT-PHT w DMJFOUHFU3FOEFS1SPDFTT-PHT w DMJFOUDBQUVSF1BHF ͰεΫϦʔϯγϣοτอଘ w DMJFOUTBWF1BHF Ͱϖʔδͷ)5.-ςΩετΛอଘ

Slide 13

Slide 13 text

ࠓ೔࿩ͯ͠ͳ͍͜ͱ w ςετέʔεઃܭ w 1BHF0CKFDUύλʔϯʹΑΔ6*ૢ࡞ͷϥΠϒϥϦ Խ w ςετεΫϦϓτͷϝϯςφϯε w ࢓༷มߋʹڧ͍&&ςετεΫϦϓτઃܭ

Slide 14

Slide 14 text

·ͱΊ w &MFDUSPOΞϓϦͷ&OEUP&OEςετ͸ 4QFDUSPOͰ؆୯ʹͰ͖Δ @Linda_pp @rhysd