mcpbeat

Screenshot Tests

stripe/screenshot-tests

Use when writing or running Paparazzi screenshot tests in stripe-android — covers PaparazziRule setup, recording/verifying commands, and test structure

659 tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
1532
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/stripe/stripe-android --skill screenshot-tests

The instruction itself

6 sections, as written by the author

Screenshot Tests (Paparazzi)

We use Paparazzi for screenshot testing via the screenshot-testing module.

Recording Screenshots

Record (update) screenshots after UI changes:

./gradlew :<module>:recordPaparazziDebug

To record a specific test class only:

./gradlew :<module>:recordPaparazziDebug --tests "com.stripe.android.package.MyScreenshotTest"

Wildcard form also works:

./gradlew :<module>:recordPaparazziDebug --tests "*.MyScreenshotTest"

New or updated screenshots are written to <module>/src/test/snapshots/images/ and added to the Git staging area.

Verifying Screenshots

Verify screenshots match recorded baselines (used on CI):

./gradlew :<module>:verifyPaparazziDebug

Failure diffs are written to <module>/out/failures (git-ignored).

Test Class Structure

internal class MyScreenshotTest {

    @get:Rule
    val paparazziRule = PaparazziRule(
        SystemAppearance.entries,        // Light/Dark
        PaymentSheetAppearance.entries,  // Default/Custom/Crazy appearances
        FontSize.entries,                // Default/Large font
        boxModifier = Modifier.padding(horizontal = 16.dp),
    )

    @Test
    fun testDefault() {
        paparazziRule.snapshot {
            MyComposable(/* ... */)
        }
    }
}
  • PaparazziRule generates all permutations of the config options automatically.
  • Each test produces one snapshot per permutation (e.g., 12 images for 2 themes x 3 appearances x 2 font sizes).
  • Snapshots are named <package>_<class>_<method>[<permutation>].png.

Available Config Options

| Option | Values | Import |

|--------|--------|--------|

| SystemAppearance | LightTheme, DarkTheme | com.stripe.android.screenshottesting |

| FontSize | DefaultFont, LargeFont | com.stripe.android.screenshottesting |

| PaymentSheetAppearance | DefaultAppearance, CustomAppearance, CrazyAppearance | com.stripe.android.utils.screenshots |

Common Mistakes

  • Using -Precord or other flags — Paparazzi uses a separate recordPaparazziDebug task, not a project property.
  • Running testDebugUnitTest to record — this only _verifies_ against existing snapshots; use recordPaparazziDebug to update them.
  • Forgetting to commit updated snapshots — recorded images go into src/test/snapshots/images/ and must be committed.

How to use it

Copy the folder

Take stripe/screenshot-tests from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.