Add _wait_till_text_present_in_element method

* add selenium configuration group
* add implicit/explicit wait and set page timeout

Partially implements blueprint: selenium-integration-testing

Change-Id: If39a5dcbac45635ad9988edfdc1830aeabc663a4
This commit is contained in:
Tomas Novacik 2014-08-06 22:24:28 +02:00 committed by Tomáš Nováčik
parent 60cfc4e234
commit e5ab83caf3
5 changed files with 44 additions and 7 deletions

View File

@ -11,7 +11,9 @@
# under the License. # under the License.
import selenium.common.exceptions as Exceptions import selenium.common.exceptions as Exceptions
from selenium.webdriver.support import expected_conditions
import selenium.webdriver.support.ui as Support import selenium.webdriver.support.ui as Support
from selenium.webdriver.support import wait
class BaseWebObject(object): class BaseWebObject(object):
@ -19,6 +21,7 @@ class BaseWebObject(object):
def __init__(self, driver, conf): def __init__(self, driver, conf):
self.driver = driver self.driver = driver
self.conf = conf self.conf = conf
self.explicit_wait = self.conf.selenium.explicit_wait
def _is_element_present(self, *locator): def _is_element_present(self, *locator):
try: try:
@ -57,4 +60,14 @@ class BaseWebObject(object):
self.driver.implicitly_wait(0) self.driver.implicitly_wait(0)
def _turn_on_implicit_wait(self): def _turn_on_implicit_wait(self):
self.driver.implicitly_wait(self.conf.dashboard.page_timeout) self.driver.implicitly_wait(self.conf.selenium.page_timeout)
def _wait_till_text_present_in_element(self, locator, text):
condition = expected_conditions.text_to_be_present_in_element(locator,
text)
try:
wait.WebDriverWait(self.driver, self.explicit_wait).\
until(condition)
except Exceptions.TimeoutException:
return False
return True

View File

@ -25,9 +25,6 @@ DashboardGroup = [
cfg.StrOpt('help_url', cfg.StrOpt('help_url',
default='http://docs.openstack.org/', default='http://docs.openstack.org/',
help="Dashboard help page url"), help="Dashboard help page url"),
cfg.IntOpt('page_timeout',
default=10,
help="Timeout in seconds"),
] ]
IdentityGroup = [ IdentityGroup = [
@ -50,7 +47,19 @@ IdentityGroup = [
AvailableServiceGroup = [ AvailableServiceGroup = [
cfg.BoolOpt('sahara', cfg.BoolOpt('sahara',
default=False), default=False)
]
SeleniumGroup = [
cfg.IntOpt('implicit_wait',
default=10,
help="Implicit wait timeout in seconds"),
cfg.IntOpt('explicit_wait',
default=10,
help="Explicit wait timeout in seconds"),
cfg.IntOpt('page_timeout',
default=30,
help="Page load timeout in seconds"),
] ]
@ -69,5 +78,6 @@ def get_config():
cfg.CONF.register_opts(DashboardGroup, group="dashboard") cfg.CONF.register_opts(DashboardGroup, group="dashboard")
cfg.CONF.register_opts(IdentityGroup, group="identity") cfg.CONF.register_opts(IdentityGroup, group="identity")
cfg.CONF.register_opts(AvailableServiceGroup, group="service_available") cfg.CONF.register_opts(AvailableServiceGroup, group="service_available")
cfg.CONF.register_opts(SeleniumGroup, group="selenium")
return cfg.CONF return cfg.CONF

View File

@ -33,7 +33,8 @@ class BaseTestCase(testtools.TestCase):
self.driver = webdriver.WebDriverWrapper() self.driver = webdriver.WebDriverWrapper()
self.driver.maximize_window() self.driver.maximize_window()
self.conf = config.get_config() self.conf = config.get_config()
self.driver.implicitly_wait(self.conf.dashboard.page_timeout) self.driver.implicitly_wait(self.conf.selenium.implicit_wait)
self.driver.set_page_load_timeout(self.conf.selenium.page_timeout)
else: else:
msg = "The INTEGRATION_TESTS env variable is not set." msg = "The INTEGRATION_TESTS env variable is not set."
raise self.skipException(msg) raise self.skipException(msg)

View File

@ -12,9 +12,21 @@ login_url=http://localhost/auth/login/
# Dashboard help page url (string value) # Dashboard help page url (string value)
help_url=http://docs.openstack.org/ help_url=http://docs.openstack.org/
[selenium]
# Timeout in seconds to wait for a page to become available # Timeout in seconds to wait for a page to become available
# (integer value) # (integer value)
page_timeout=10 page_timeout=30
# Implicit timeout to wait until element become available,
# this timeout is used for every find_element, find_elements call.
# (integer value)
implicit_wait=10
# Explicit timeout is used for long lasting operations,
# methods using explicit timeout are usually prefixed with 'wait',
# those methods ignore implicit_wait when looking up web elements.
# (integer value)
explicit_wait=300
[identity] [identity]
# Username to use for non-admin API requests. (string value) # Username to use for non-admin API requests. (string value)

View File

@ -15,6 +15,7 @@ from openstack_dashboard.test.integration_tests import basewebobject
class PageObject(basewebobject.BaseWebObject): class PageObject(basewebobject.BaseWebObject):
"""Base class for page objects.""" """Base class for page objects."""
def __init__(self, driver, conf): def __init__(self, driver, conf):
"""Constructor.""" """Constructor."""
super(PageObject, self).__init__(driver, conf) super(PageObject, self).__init__(driver, conf)