【Xcode】UITestでスクリーンショットを撮る(XCUIScreenshot)

UITestでスクリーンショットを撮る方法です。
テスト結果の確認はもちろんAppStoreに公開するスクリーンショットを自動で撮ることも可能です。

昔はスクショメソッドが無かったので、何らかのツールやパッケージを使って撮る例も多いですが、
今回はXCTestに含まれるスクショ用のメソッドで撮影します。

スクリーンショットを撮る

撮影する

デバイスの画面全体を撮影する方法と、ウィンドウを撮影する方法があります。
iOSの場合はどちらも変わらないと思って構いません。

iPadOSでマルチウィンドウに対応した時にウィンドウ側で個別に撮ったりします。

func testTakeScreenshots() {

    //デバイスの画面を撮影する
    let mainScreenScreenshot = XCUIScreen.main.screenshot()
    
    //1つ目のウィンドウを撮影する
    let app = XCUIApplication()
    app.launch()
    let windowScreenshot = app.windows.firstMatch.screenshot()

    //2つ目のウィンドウを撮影する
    let screenshot = app.windows.element(boundBy: 1).screenshot()
}

なお、この状態では変数に代入しただけので保存はされていません。

保存する

次に保存していきます。
撮影した後はXCTAttachmentで保存します。
screenshotはイニシャライザで渡し、addメソッドにattachmentを渡します。

設定次第ではaddするだけではテスト成功時に削除されます。
保存されたままになる様にlifetimeに.keepAlwaysを設定します。

func testTakeScreenshotOfMainWindow() {
    let app = XCUIApplication()
    app.launch()
    let screenshot = app.windows.firstMatch.screenshot()

    let attachment = XCTAttachment(screenshot: screenshot)
    attachment.lifetime = .keepAlways
    add(attachment)
}

保存されたファイルを確認する

今のXcodeはファイルはそのまま保存されるわけではありません。

画面左のNavigatorの右端クリックするとテストの一覧がです。
該当テストの中身を見ていくとスクショの項目があるので、クリップマークから確認や保存ができます。

最後に

この様にUITestからスクショの撮影が可能です。
テストを画像で確認したり、AppStore提出画像が多い時などに便利です。
せっかくのUITest機能ですのでしっかり使いこなしましょう。

余談

なお、サードパーティ製のテスト結果からスクショをまとめて抽出するツールもあります。
https://www.chargepoint.com/engineering/xcparse

HomeBrewでインストールできます。

brew install chargepoint/xcparse/xcparse

使う時は以下のコマンドです。

xcparse -s TestResult.xcresult ExtractFolder

xcresultはXcodeのNavigatorでテストを右クリックするとShow in Finderでファイルの場所を確認できます。

コメント

タイトルとURLをコピーしました