開発

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')

})Code language: JavaScript (javascript)

ウィンドウIDは開いた順番にアサインされるようなので、getWindowCount()で最後にオープンされたウィンドウIDをチェックしてwindowByIndex()で別ウィンドウに移ってタイトルを取得、という流れです。

管理人

Recent Posts

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

2か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

2か月 ago

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることで…

5か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

5か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

5か月 ago