Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.selenium.smart_components
from selenium.webdriver.support.select import Select
from galaxy.navigation.components import (
Component,
Target,
)
[docs]class SmartComponent:
"""Wrap a Component with driver aware methods.
Adapts Galaxy's component locators more tightly to Selenium - including a Selenium
runtime. Allows smarter selectors that know how to wait for themselves, test themselves,
click themselves, etc.... More "magic", but much cleaner usage.
"""
[docs] def __init__(self, component, has_driver):
self._component = component
self._has_driver = has_driver
def __getattr__(self, name):
return self._wrap(getattr(self._component, name))
def __getitem__(self, name):
return self._wrap(self._component[name])
def _wrap(self, simple_object):
if isinstance(simple_object, Component):
return SmartComponent(simple_object, self._has_driver)
elif isinstance(simple_object, Target):
return SmartTarget(simple_object, self._has_driver)
else:
return simple_object
[docs]class SmartTarget:
"""Wrap a Target with driver aware methods."""
def __call__(self, *args, **kwds):
return self._wrap(self._target(*args[:], **kwds.copy()))
def __getattr__(self, name):
return self._wrap(getattr(self._target, name))
def __getitem__(self, name):
return self._wrap(self._target[name])
def _wrap(self, simple_object):
if isinstance(simple_object, Target):
return SmartTarget(simple_object, self._has_driver)
else:
return simple_object
[docs] def wait_for_element_count_of_at_least(self, n: int, **kwds):
self._has_driver.wait_for_element_count_of_at_least(self._target, n, **kwds)
[docs] def wait_for_and_click(self, **kwds):
return self._has_driver.wait_for_and_click(self._target, **kwds)
[docs] def wait_for_visible(self, **kwds):
return self._has_driver.wait_for_visible(self._target, **kwds)
[docs] def wait_for_clickable(self, **kwds):
return self._has_driver.wait_for_clickable(self._target, **kwds)
[docs] def wait_for_text(self, **kwds):
return self._has_driver.wait_for_visible(self._target, **kwds).text
[docs] def wait_for_value(self, **kwds):
return self._has_driver.wait_for_visible(self._target, **kwds).get_attribute("value")
@property
def is_displayed(self):
return self._has_driver.is_displayed(self._target)
@property
def is_absent(self):
return self._has_driver.element_absent(self._target)
[docs] def wait_for_present(self, **kwds):
return self._has_driver.wait_for_present(self._target, **kwds)
[docs] def has_class(self, class_name):
classes_str = self._has_driver.driver.find_element(*self._target.element_locator).get_attribute("class") or ""
return class_name in classes_str.split(" ")