追記
spectronは2022/1でDeprecationになります。こちらに代わりのテスト方法について記載があります。
本題
spectronを少しずつ試してなんとか使い方がわかってきたのですが別BrowserWindowのテストがうまくできないです。
デスクトップアプリによくあるAbout this softwareをクリックすると別ウィンドウでバージョン情報やらがでる画面があるのですが、この画面をBrowserWindowで出しています。
このウィンドウに対するspectronのテストシナリオとしてはクリックして出現したAbout画面のタイトルがAboutになっていればOKなんですがgetTitle()しても拾ってくれない。
親ウィンドウしかチェックしてくれないようなのでBrowserWindow.getAllWindows()で全部のウィンドウのタイトル総当たりで調べてAboutになっている、でもよいかとコレを使ってみると取得時にエラーとなる。じゃあgetChildWindows()でやってみるか、と試すとchild windowとしてウィンドウを出すとやはりエラーとなって取得できない。
SPAだからAboutも別ウィンドウじゃあなくてシングルページに入れ込むことにしようかと諦めかけたのですがgetWindowCount()とwindowByIndex()は生きていたのでなんとか解決しました。
前置きが長くなりましたが下記でテストできました。AVAを使ってます。
別BrowserWindowをテスト
test.beforeEach(async t => { t.context.app = new Application({ ....... test('test-window-about', async t => { const client = t.context.app.client; let btn = client.$('#about') await btn.click() let wincount = client.getWindowCount() await client.windowByIndex(await wincount - 1) let title = client.getTitle() t.is(await title, 'About') })
ウィンドウIDは開いた順番にアサインされるようなので、getWindowCount()で最後にオープンされたウィンドウIDをチェックしてwindowByIndex()で別ウィンドウに移ってタイトルを取得、という流れです。