2013/03/18

SikuliでiOSアプリケーションのスクリーンショット作成を自動化する

少し前にApp Storeのスクリーンショット作成を自動化するという記事を読んで、Sikuliでも同じようなことができるんじゃないかと思って試してみました。

Sikuliでの自動化がどんな感じになったのかは上の動画をご覧ください。この記事ではSikuliでのスクリーンショットの撮りかたや、iOSシミュレータの回転の方法などを説明します。

スクリーンショット取得

iOSシミュレータの起動方法などについては、以前の記事を参照してください。

Sikuliでアプリケーションのスクリーンショットを取るにはScreen.captureを利用します。

win = app.focusedWindow()
cap = win.getScreen().capture(win)

cap.filenameで保存場所を取得できます。例えば次のような文字列を返します。

/var/folders/1z/nbzg_tc52hsgf_038n5_z_ch0000gn/T/sikuli-scr-1978557750933926853.png

なので、デスクトップへ移動させたければ、Pythonのosパッケージを利用して次のようにします。

os.rename(cap.filename, os.path.join(os.getenv('HOME'), 'Desktop', 'img.png'))

なお、cap.filenameへのアクセスがないと実際にファイルが作成されないようです。

シミュレータのスクリーン部のみ取得する

シミュレータの外枠の表示は、

  • 枠なし
  • 細枠表示
  • 完全表示

の3通りあるようで、どれが表示されるかどうかはスクリーンサイズに依存するようです。

細枠表示は素晴しいことにどの部分も42pxなので、除きたければ次のようにすればよいだけです。

b = 42
cap = scr = win.getScreen().capture(win.x+b, win.y+b, win.w-b*2, win.h-b*2)

シミュレータの回転

iOS Siumlatorのデフォルト設定ではCmd + Leftに設定されていますのでそれを実行するだけです。 回転アニメーションを待つために0.5秒待ち、さらにウィンドウ位置が変更するので取得しなおします。

def rotateLeft(sim, win):
    win.keyDown(Key.CMD)
    win.keyDown(Key.LEFT)
    win.keyUp(Key.LEFT)
    win.keyUp(Key.CMD)
    sleep(0.5)
    return sim.focusedWindow()

デバイスの変更

シミュレータのデバイスを変更するためには、ヘルプにデバイスの文字列を入力して、一番上でひっかかるようにするのが楽なのでそうしました。

例えば、iPhone Retina 4-inchへの変更は次のようにします。

r = Region(0,0,650,20)
r.click('Help')
type('iPhone Retina 4-inch' + Key.DOWN + Key.ENTER)

ちなみに、clickは画像以外にも文字列を指定することができ、そのときはOCRで文字認識させて該当した個所をクリックします。 日本語は認識できず、精度もそんなに高くないですが、環境に依存しなくなるので割と便利です。

逆に3.5-inchに戻すには次のようにします。

type('iPhone Retina 3.-inch' + Key.DOWN + Key.ENTER)

入力文字列がちょっと変なのはヘルプでひっかかるようにするためです。

まとめ

SikuliでiOSアプリケーションのスクリーンショット作成を自動化する方法を紹介しました。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。