追記
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()で別ウィンドウに移ってタイトルを取得、という流れです。