From 5ad55d8c045273bd9c19243b3992cf7ffa6c685d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20R=C5=AF=C5=BEi=C4=8Dka?= Date: Tue, 8 Jul 2025 14:27:53 +0200 Subject: [PATCH] Add desktoptools --- lib/desktoptools.pm | 177 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 lib/desktoptools.pm diff --git a/lib/desktoptools.pm b/lib/desktoptools.pm new file mode 100644 index 00000000..5805aa0c --- /dev/null +++ b/lib/desktoptools.pm @@ -0,0 +1,177 @@ +package desktoptools; + +use strict; + +use base 'Exporter'; +use Exporter; + +use testapi; +use utils; + +our @EXPORT = qw/find_application install_application check_application_information start_application_via_packagemanager check_app_installed remove_application restart_application/; + +# This subroutine searches for the application using the package manager's +# search method. Currently, the routine is only available for Gnome Software. +sub find_application { + my $application = shift; + assert_and_click("gnome_search_button"); + wait_still_screen(2); + type_safely($application); + # Confirm that the application has been found and shown + # in the overview, click on it to enter the installation + # tab and confirm it has opened. + assert_and_click("software_$application-found"); + wait_still_screen(2); + assert_screen("software_$application-install_pane"); +} + +# This subroutine checks that the application shows appropriate +# information. +sub check_application_information { + my $application = shift; + # The logo, the screenshot, and the description should be visible + # without any intervention needed. + assert_screen("software_logo_$application"); + assert_screen("software_screenshot_$application"); + assert_screen("software_description_$application"); + + # Other elements are placed below the visible area + # so we need to move there, if we want to see it. + # The safest option is to hit the tab key until + # we reach that element. + send_key_until_needlematch("software_download_size_$application", "tab"); + # Now, other metadata should be visible two, so let's check them + assert_screen("software_safestatus_$application"); + assert_screen("software_usage_$application"); + assert_screen("software_rating_$application"); + + # Again, let's move a bit down + send_key_until_needlematch("software_website_$application", "tab"); + # Let's click on the link to open the website + click_lastmatch(); + + # Check, that the webpage has opened with correct information. + assert_screen("software_weblink_$application"); + assert_screen("software_webcontent_$application"); + + # Close the browser + send_key("alt-f4"); + wait_still_screen(2); +} + +# This subroutine installs an application via the +# GUI application, such as Gnome Software, or Discover. +# Currently, only Gnome Software is supported. +# The $application takes the name of the application, while +# $source takes the installation source, rpm or flatpak. +# The subroutine does not start the application itself, +# you need to start it before running this. +sub install_application { + my ($application, $source) = @_; + # For some applications, there are more installation sources + # available. Pick the desired one. + if (check_screen("software_sources_available", timeout => 5)) { + click_lastmatch(); + wait_still_screen(2); + assert_and_click("software_source_fedora_$source"); + wait_still_screen(2); + # Confirm that the source is indeed correctly selected. + assert_screen("software_sources_available_$source"); + } + # Click the Install button to start the installation. + assert_and_click("gnome_install_button"); + # When the installation is finished, the Open button + # will be shown. We are going to wait for this for + # a certain time. In case of Flatpak, this should be longer. + my $wait_time = 180; + if ($source eq "flatpak") { + $wait_time = 1200; + } + assert_screen("gnome_button_open", timeout => $wait_time); + # After the installation, return to the previous page. + if (check_screen("software_back_button")) { + click_lastmatch(); + } +} + +# This subroutine opens the $application using Gnome Software. +# It is useful to check that the installed application can +# be run immediately from withing the application. +sub start_application_via_packagemanager { + my $application = shift; + # We do not have to be on the application tab, so let's + # start over and navigate there from scratch if needed - + # if no Open button is visible. + unless (check_screen("gnome_button_open")) { + assert_and_click("gnome_search_button"); + wait_still_screen(2); + type_safely($application); + assert_and_click("software_$application-found"); + wait_still_screen(2); + assert_screen("software_$application-install_pane"); + } + # An Open button must be visible now, if the application + # has been installed, otherwise the command will fail. + assert_and_click("gnome_button_open"); + wait_still_screen(3); + assert_screen("apps_run_$application"); +} + +# This subroutine checks that the $application has been found +# in the list of installed applications. +# It will send a key and circle through the GUI list until the +# application has been found (or it will fail). +sub check_app_installed { + my $application = shift; + # Look for the application and confirm that it is listed as installed + # in the application overview. + assert_and_click("gnome_search_button"); + type_safely($application); + send_key("ret"); + assert_screen("software_$application-found_installed"); + + # Enter the Installed application view and circle through the items + # until the desired application has been found. + assert_and_click("software_installed_button"); + send_key_until_needlematch("software_$application-listed", "tab", 70); +} + +# This subroutine removes the application using a default package manager. +# This will not start the package manager application, you need to start +# it manualy or using a different subroutine. +# Currently only works for Software. +sub remove_application { + my $application = shift; + + # Find the application. + assert_and_click("gnome_search_button"); + wait_still_screen(2); + type_safely($application); + + assert_and_click("software_$application-found_installed"); + wait_still_screen(2); + assert_screen("software_$application-install_pane"); + + # Click the Delete button to delete the application. + assert_and_click("software_remove_button"); + + # Confirm to progress with the removal + assert_and_click("gnome_uninstall_button"); + + # Wait until the Open button changes to Install to indicate + # that the application has been removed. + assert_screen("gnome_install_button", timeout => 180); +} + +# This routine records a soft failure and starts the application. +# We have identified tests where the tested application crashes +# after the VM has been rolled back, probably due to changes +# to the underlying system, such as in Software. +sub restart_application { + my $application = shift; + + record_soft_failure("$application crashed and had to be restarted to continue the tests."); + menu_launch_type($application); + wait_still_screen(2); + assert_screen("apps_run_$application"); +}