RFR: 8328716: [TestBug] Screen capturing utility for failed tests [v3]

Andy Goryachev angorya at openjdk.org
Tue Apr 1 21:20:37 UTC 2025


On Mon, 31 Mar 2025 18:35:03 GMT, Andy Goryachev <angorya at openjdk.org> wrote:

>> Introduce a facility, in the form of JUnit5 annotation, to allow for capturing a desktop screenshot of a failed test.
>> 
>> The primary intent is to be able to debug an intermittent test case, rather than wholesale addition of the new annotation to all the tests.
>> 
>> The log contains a base-64 encoded screenshot (like this: `data:image/png;base64,iVBORw0KGgoAAAANSUhEU...` )
>> so it can be rendered in Safari (Chrome truncates the image possibly due to following a url length limit)
>> 
>> Example:
>> 
>> ![jenkins-screenshot](https://github.com/user-attachments/assets/abebd76f-747a-4d6d-a9a6-63c6e9426830)
>
> Andy Goryachev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   data url

Turns out one can't intercept assertion exceptions with `Thread.setDefaultUncaughtExceptionHandler()` (duh!), so this is likely to be a known limitation.

We might still provide general purpose methods in `ScreenCapture` (new class) like 


    /**
     * Captures a screenshot using JavaFX {@link Robot} in the PNG format.
     * <p>
     * This method can be called from any thread.  If called from a thread other than
     * the JavaFX Application Thread, the current thread will be paused until the screenshot is taken.
     *
     * @return the byte array containing the screenshot
     * @throws IOException when an I/O error occurs
     */
    public static byte[] takeScreenshot() throws IOException {


and 


    /**
     * Captures a screenshot using JavaFX {@link Robot} in the PNG format,
     * in the form of a Base-64 encoded {@code String}.
     * <p>
     * This method can be called from any thread.  If called from a thread other than
     * the JavaFX Application Thread, the current thread will be paused until the screenshot is taken.
     *
     * @param prefix the string to append before the base-64 representation, or null
     * @param postfix the string to append after the base-64 representation, or null
     * @return the screenshot in Base-64 encoded PNG, or an error message
     */
    public static String takeScreenshotBase64(String prefix, String postfix) {


What do you think?

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1746#issuecomment-2770707191


More information about the openjfx-dev mailing list