開発

Spectronで複数BrowserWindowのテスト

追記

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

管理人

Recent Posts

CanvaがSerif (Affinity) を買収

私は使ったことがないのですが名前はよく聞…

4週間 ago

Serifのスプリングセール – アドオンが50%オフ

Affinity Photoなどレタッチ…

2か月 ago

音声がロボットのようになるときの対処

リモート会議などでたまに相手の音声がおか…

3か月 ago

Serifのブラックフライデー – 全品40%オフ V1ユーザは更にお得!

恒例のブラックフライデーセールが始まりま…

5か月 ago

[rust] rayonで書き直してみました

前回のコードを元にrayonを使った処理…

6か月 ago

[rust] async-stdで書き直してみました

前回のコードをasync-stdで書き直…

6か月 ago