Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for getting documentation related urls from Satellite page #1611

Merged
merged 1 commit into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions airgun/entities/about.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from airgun.entities.base import BaseEntity
from airgun.navigation import NavigateStep, navigator
from airgun.utils import retry_navigation
from airgun.views.about import AboutView


class AboutEntity(BaseEntity):
endpoint_path = '/about'


@navigator.register(AboutEntity, 'All')
class ShowAboutPage(NavigateStep):
"""Navigate to About page."""

VIEW = AboutView

@retry_navigation
def step(self, *args, **kwargs):
self.view.menu.select('Administer', 'About')
19 changes: 19 additions & 0 deletions airgun/entities/fact_value.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from airgun.entities.base import BaseEntity
from airgun.navigation import NavigateStep, navigator
from airgun.utils import retry_navigation
from airgun.views.fact import HostFactView


class FactValueEntity(BaseEntity):
endpoint_path = '/fact_values'


@navigator.register(FactValueEntity, 'All')
class ShowFactValuePage(NavigateStep):
"""Navigate to Fact Values page."""

VIEW = HostFactView

@retry_navigation
def step(self, *args, **kwargs):
self.view.menu.select('Monitor', 'Facts')
19 changes: 19 additions & 0 deletions airgun/entities/global_parameter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from airgun.entities.base import BaseEntity
from airgun.navigation import NavigateStep, navigator
from airgun.utils import retry_navigation
from airgun.views.global_parameter import GlobalParameterView


class GlobalParameterEntity(BaseEntity):
endpoint_path = '/common_parameters'


@navigator.register(GlobalParameterEntity, 'All')
class ShowGlobalParameters(NavigateStep):
"""Navigate to Global Parameters page."""

VIEW = GlobalParameterView

@retry_navigation
def step(self, *args, **kwargs):
self.view.menu.select('Configure', 'Global Parameters')
18 changes: 18 additions & 0 deletions airgun/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from airgun import settings
from airgun.browser import AirgunBrowser, SeleniumBrowserFactory
from airgun.entities.about import AboutEntity
from airgun.entities.acs import AcsEntity
from airgun.entities.activationkey import ActivationKeyEntity
from airgun.entities.all_hosts import AllHostsEntity
Expand Down Expand Up @@ -37,8 +38,10 @@
from airgun.entities.domain import DomainEntity
from airgun.entities.eol_banner import EOLBannerEntity
from airgun.entities.errata import ErrataEntity
from airgun.entities.fact_value import FactValueEntity
from airgun.entities.file import FilesEntity
from airgun.entities.filter import FilterEntity
from airgun.entities.global_parameter import GlobalParameterEntity
from airgun.entities.hardware_model import HardwareModelEntity
from airgun.entities.host import HostEntity
from airgun.entities.host_new import NewHostEntity
Expand Down Expand Up @@ -328,6 +331,11 @@ def acs(self):
"""Instance of Alternate Content Sources entity."""
return self._open(AcsEntity)

@cached_property
def about(self):
"""Instance of About entity."""
return self._open(AboutEntity)

@cached_property
def activationkey(self):
"""Instance of Activation Key entity."""
Expand Down Expand Up @@ -457,6 +465,11 @@ def errata(self):
"""Instance of Errata entity."""
return self._open(ErrataEntity)

@cached_property
def factvalue(self):
"""Instance of Fact Value entity."""
return self._open(FactValueEntity)

@cached_property
def filter(self):
"""Instance of Filter entity."""
Expand All @@ -467,6 +480,11 @@ def file(self):
"""Instance of Files entity."""
return self._open(FilesEntity)

@cached_property
def global_parameter(self):
"""Instance of Global Parameters entity."""
return self._open(GlobalParameterEntity)

@cached_property
def hardwaremodel(self):
"""Instance of Hardware Model entity."""
Expand Down
11 changes: 11 additions & 0 deletions airgun/views/about.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from widgetastic.widget import Text

from airgun.views.common import BaseLoggedInView, SearchableViewMixinPF4


class AboutView(BaseLoggedInView, SearchableViewMixinPF4):
title = Text("//h1[normalize-space(.)='About']")

@property
def is_displayed(self):
return self.browser.wait_for_element(self.title, exception=False) is not None
30 changes: 30 additions & 0 deletions airgun/views/common.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from selenium.common.exceptions import ElementNotInteractableException
from widgetastic.widget import (
Checkbox,
ConditionalSwitchableView,
Expand Down Expand Up @@ -80,6 +81,35 @@ def read(self, widget_names=None, limit=None):
values[widget_name] = widget.read()
return normalize_dict_values(values)

def documentation_links(self):
"""Return Documentation links present on the given page if any.
Note: This is not a full-proof helper. For example, it can't get links hidden behind a dropdown button.
LadislavVasina1 marked this conversation as resolved.
Show resolved Hide resolved
"""
doc_link_elements = (
'//a[contains(text(), "documentation") or contains(text(), "Documentation") or '
'contains(@class, "btn-docs") or contains(@href, "console.redhat.com") or '
'contains(@href, "access.redhat.com") or contains(@href, "docs.redhat.com") or '
'contains(@href, "www.redhat.com") or contains(@href, "links")]'
)
doc_links = []
for item in self.browser.elements(doc_link_elements):
try:
item.click()
if len(self.browser.window_handles) == 1:
doc_links.extend([self.browser.url])
self.browser.selenium.back()
else:
self.browser.switch_to_window(self.browser.window_handles[1])
doc_links.extend([self.browser.url])
self.browser.switch_to_window(self.browser.window_handles[0])
self.browser.close_window(self.browser.window_handles[1])
except ElementNotInteractableException:
# Adding this because some links are hidden behind dropdown button.
# To Do: Handle doc buttons hidden behind drop down buttons.
doc_links.extend([item.get_attribute('href')])
continue
return doc_links


class WrongContextAlert(View):
"""Alert screen which appears when switching organization while organization-specific entity is
Expand Down
11 changes: 11 additions & 0 deletions airgun/views/global_parameter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from widgetastic.widget import Text

from airgun.views.common import BaseLoggedInView, SearchableViewMixinPF4


class GlobalParameterView(BaseLoggedInView, SearchableViewMixinPF4):
title = Text("//h1[normalize-space(.)='Global Parameters']")

@property
def is_displayed(self):
return self.browser.wait_for_element(self.title, exception=False) is not None
Loading