diff --git a/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.json b/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.json new file mode 100644 index 00000000..6d5f9ba4 --- /dev/null +++ b/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.json @@ -0,0 +1,19 @@ +{ + "area": [ + { + "xpos": 247, + "ypos": 148, + "width": 99, + "height": 85, + "type": "match", + "click_point": { + "xpos": 49.5, + "ypos": 22.5 + } + } + ], + "properties": [], + "tags": [ + "nautilus_subdirectory_screencasts" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.png b/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.png new file mode 100644 index 00000000..faae0905 Binary files /dev/null and b/needles/gnome/apps/nautilus/nautilus_subdirectory_screencasts-20260401.png differ diff --git a/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.json b/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.json new file mode 100644 index 00000000..ac6c124d --- /dev/null +++ b/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.json @@ -0,0 +1,15 @@ +{ + "area": [ + { + "xpos": 888, + "ypos": 4, + "width": 25, + "height": 24, + "type": "match" + } + ], + "properties": [], + "tags": [ + "panel_icon_stoprecording" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.png b/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.png new file mode 100644 index 00000000..1b7fff76 Binary files /dev/null and b/needles/gnome/apps/screen_recording/panel_icon_stoprecording-20260319.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.json b/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.json new file mode 100644 index 00000000..684b3128 --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.json @@ -0,0 +1,15 @@ +{ + "area": [ + { + "xpos": 488, + "ypos": 571, + "width": 48, + "height": 53, + "type": "match" + } + ], + "properties": [], + "tags": [ + "screenshot_icon_recordscreen" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.png b/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.png new file mode 100644 index 00000000..39ef6d51 Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_icon_recordscreen-20260319.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.json b/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.json new file mode 100644 index 00000000..c9c0622a --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.json @@ -0,0 +1,19 @@ +{ + "area": [ + { + "xpos": 619, + "ypos": 657, + "width": 36, + "height": 32, + "type": "match", + "click_point": { + "xpos": 18, + "ypos": 16 + } + } + ], + "properties": [], + "tags": [ + "screenshot_icon_showcursor" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.png b/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.png new file mode 100644 index 00000000..63225bea Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_icon_showcursor-20260319.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.json b/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.json new file mode 100644 index 00000000..9b6a1b79 --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.json @@ -0,0 +1,15 @@ +{ + "area": [ + { + "xpos": 266, + "ypos": 81, + "width": 156, + "height": 22, + "type": "match" + } + ], + "properties": [], + "tags": [ + "screenshot_screencast_recorded" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.png b/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.png new file mode 100644 index 00000000..898842b8 Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_screencast_recorded-20260401.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.json b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.json new file mode 100644 index 00000000..8be4859e --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.json @@ -0,0 +1,15 @@ +{ + "area": [ + { + "xpos": 74, + "ypos": 144, + "width": 42, + "height": 52, + "type": "match" + } + ], + "properties": [], + "tags": [ + "screenshot_video_playing" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.png b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.png new file mode 100644 index 00000000..3c79baba Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260401.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.json b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.json new file mode 100644 index 00000000..116f7238 --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.json @@ -0,0 +1,16 @@ +{ + "area": [ + { + "type": "match", + "height": 52, + "width": 42, + "ypos": 299, + "xpos": 74, + "match": 90 + } + ], + "properties": [], + "tags": [ + "screenshot_video_playing" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.png b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.png new file mode 100644 index 00000000..6af09be0 Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260407.png differ diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.json b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.json new file mode 100644 index 00000000..f55bb720 --- /dev/null +++ b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.json @@ -0,0 +1,16 @@ +{ + "area": [ + { + "ypos": 144, + "xpos": 74, + "width": 42, + "height": 52, + "type": "match", + "match": 90 + } + ], + "properties": [], + "tags": [ + "screenshot_video_playing" + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.png b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.png new file mode 100644 index 00000000..6567da8a Binary files /dev/null and b/needles/gnome/apps/screen_recording/screenshot_video_playing-20260410.png differ diff --git a/needles/gnome/gnome_filedialog_video_select-20260401.json b/needles/gnome/gnome_filedialog_video_select-20260401.json new file mode 100644 index 00000000..e1c830f0 --- /dev/null +++ b/needles/gnome/gnome_filedialog_video_select-20260401.json @@ -0,0 +1,15 @@ +{ + "area": [ + { + "xpos": 239, + "ypos": 205, + "width": 119, + "height": 20, + "type": "match" + } + ], + "properties": [], + "tags": [ + "gnome_filedialog_video_select" + ] +} \ No newline at end of file diff --git a/needles/gnome/gnome_filedialog_video_select-20260401.png b/needles/gnome/gnome_filedialog_video_select-20260401.png new file mode 100644 index 00000000..4cb7e770 Binary files /dev/null and b/needles/gnome/gnome_filedialog_video_select-20260401.png differ diff --git a/templates.fif.json b/templates.fif.json index 1a181abb..351aaf5c 100644 --- a/templates.fif.json +++ b/templates.fif.json @@ -1273,6 +1273,18 @@ "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%" } }, + "screen_recording": { + "profile_groups": { + "workstation-sb-all": 40, + "eln-gnome-lives": 40 + }, + "settings": { + "BOOTFROM": "c", + "HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2", + "POSTINSTALL_PATH": "tests/applications/screen_recording", + "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%" + } + }, "sysmon": { "profile_groups": { "workstation-sb-all": 40, diff --git a/tests/applications/screen_recording/screen_recording.pm b/tests/applications/screen_recording/screen_recording.pm new file mode 100644 index 00000000..f3397c9e --- /dev/null +++ b/tests/applications/screen_recording/screen_recording.pm @@ -0,0 +1,76 @@ +use base "installedtest"; +use strict; +use testapi; +use utils; + +# This test verifies GNOME screen recording functionality on Wayland. +# It opens the screenshot overlay, starts and stops a screen recording, +# and verifies the output file exists. + +sub run { + my $self = shift; + + # On Silverblue (or possibly other CANNED systems), + # Showtime, the video player, which we use to check + # that the video has been recorded, might not be installed + # by default, so we need to check and install it if that's + # the case. + if (get_var("CANNED")) { + # Switch to console + $self->root_console(tty => 3); + + if (script_run("flatpak info org.gnome.Showtime")) { + record_soft_failure("Showtime not installed by default."); + assert_script_run("flatpak install -y org.gnome.Showtime", timeout => 600); + } + desktop_vt(); + } + + # The recording process will record running a couple of commands + # in gnome-terminal. The recording application is invoked with + # a shortcut, then mouse is used to click out the recording + # details. After the commands are passed on the terminal, the recording + # is terminated and we check that the video exists. + menu_launch_type("terminal", checkstart => 1, maximize => 1); + wait_still_screen(2); + + # Start the recording + send_key("ctrl-alt-shift-r"); + assert_and_click("screenshot_icon_recordscreen"); + assert_and_click("screenshot_icon_showcursor"); + send_key("spc"); + assert_screen("panel_icon_stoprecording", timeout => 10); + + # Perform actions on the terminal. + type_very_safely("whoami\n"); + sleep(1); + type_very_safely("uname -r\n"); + sleep(1); + type_very_safely("exit\n"); + wait_still_screen(3); + + # Stop the recording and check if confirmation pop-up jumps out. + assert_and_click("panel_icon_stoprecording"); + unless (check_screen("screenshot_screencast_recorded", timeout => 3)) { + record_soft_failure("Screencast recorded pop-up has not been shown!"); + } + wait_still_screen(3); + + # Verify the recording was saved to ~/Videos/Screencasts/ + menu_launch_type("nautilus", checkstart => 1, maximize => 1); + assert_and_click("nautilus_directory_videos"); + assert_and_dclick("nautilus_subdirectory_screencasts"); + wait_still_screen(2); + assert_and_dclick("gnome_filedialog_video_select"); + sleep(14); + send_key("spc"); + assert_screen("screenshot_video_playing"); +} + +sub test_flags { + return {fatal => 1}; +} + +1; + +# vim: set sw=4 et: