1
0
mirror of https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git synced 2024-12-04 11:03:11 +00:00
os-autoinst-distri-fedora/lib/desktoptools.pm

149 lines
5.6 KiB
Perl
Raw Normal View History

package desktoptools;
use strict;
use base 'Exporter';
use Exporter;
use testapi;
use utils;
our @EXPORT = qw/install_application start_application_via_packagemanager check_app_installed remove_application restart_application/;
# 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) = @_;
# Sometimes, especially when this method is used several
# times in a row, Software can be located on the
# installation tab and we need to leave it until
# we can proceed.
if (check_screen("software_back_button")) {
click_lastmatch();
}
# Search for the application.
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");
# 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);
}
# 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;
# It is possible that we still find ourselves in the Installation
# pane. In that case, the Installed button is not visible, therefore
# we need to go back in the GUI if this is the sitation.
unless (check_screen("software_installed_button")) {
assert_and_click("software_back_button");
}
# 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");
}