diff --git a/tests/selenium/datacenters_page.py b/tests/selenium/datacenters_page.py index f0e74a8..03e4e26 100644 --- a/tests/selenium/datacenters_page.py +++ b/tests/selenium/datacenters_page.py @@ -4,9 +4,9 @@ import page class DataCentersPage(page.Page): - page = None def create_data_center(self, name): + self.Refresh() self.Button('Create Windows Data Center').Click() @@ -14,14 +14,12 @@ class DataCentersPage(page.Page): xpath = "//input[@value='Create']" self.Button(xpath).Click() - return self - def delete_data_center(self, name): + self.Refresh() + link = self.Link(name).Address() datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] - print 'Data Center ID: ' + datacenter_id - xpath = ".//*[@id='windc__row__%s']/td[4]/div/a[2]" % datacenter_id self.Button(xpath).Click() @@ -30,9 +28,27 @@ class DataCentersPage(page.Page): self.Button("Delete Data Center").Click() - return self - def select_data_center(self, name): self.Link(name).Click() page = ServicesPage(self.driver) return page + + def deploy_data_center(self, name): + self.Refresh() + + link = self.Link(name).Address() + datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] + + xpath = ".//*[@id='windc__row__%s']/td[4]/div/a[2]" % datacenter_id + self.Button(xpath).Click() + + button_id = "windc__row_%s__action_deploy" % datacenter_id + self.Button(button_id).Click() + + def get_datacenter_status(self, name): + self.Navigate('Windows Data Centers') + link = self.Link(name).Address() + datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] + + xpath = ".//*[@id='windc__row__%s']/td[3]" % datacenter_id + return self.TableCell(xpath).Text() diff --git a/tests/selenium/page.py b/tests/selenium/page.py index 80085ab..43ed7cc 100644 --- a/tests/selenium/page.py +++ b/tests/selenium/page.py @@ -1,16 +1,38 @@ +import logging +from selenium.webdriver.support.ui import Select +logging.basicConfig() +LOG = logging.getLogger(' Page object: ') + + +class TableCellClass: + table = None + + def __init__(self, obj): + if not obj: + LOG.error('TableCell does not found') + self.table = obj + + def Text(self): + if self.table: + return self.table.text() + else: + return '' class ButtonClass: button = None def __init__(self, obj): + if not obj: + LOG.error('Button does not found') self.button = obj def Click(self): - self.button.click() + if self.button: + self.button.click() def isPresented(self): - if self.button != None: + if self.button: return True return False @@ -19,60 +41,84 @@ class LinkClass: link = None def __init__(self, obj): + if not obj: + LOG.error('Link does not found') self.link = obj def Click(self): - self.link.click() + if self.link: + self.link.click() def isPresented(self): - if self.link != None: + if self.link: return True return False def Address(self): - return self.link.get_attribute('href') + if self.link: + return self.link.get_attribute('href') + else: + return '' class EditBoxClass: def __init__(self, obj): + if not obj: + LOG.error('EditBox does not found') self.edit = obj def isPresented(self): - if self.edit != None: + if self.edit: return True return False def Set(self, value): - self.edit.clear() - self.edit.send_keys(value) + if self.edit: + self.edit.clear() + self.edit.send_keys(value) def Text(self): - return self.edit.get_text() + if self.edit: + return self.edit.get_text() + else: + return '' class DropDownListClass: select = None def __init__(self, obj): + if not obj: + LOG.error('DropDownList does not found') self.select = obj def isPresented(self): - if self.select != None: + if self.select is not None: return True return False def Set(self, value): - self.select.select_by_visible_text(value) + if self.select: + Select(self.select).select_by_visible_text(value) def Text(self): - return self.select.get_text() + if self.select: + return self.select.get_text() + else: + return '' + + +error_msg = """ + Object with parameter: %s + does not found on page. + """ class Page: driver = None - timeout = 300 + timeout = 30 def __init__(self, driver): driver.set_page_load_timeout(30) @@ -82,7 +128,7 @@ class Page: def _find_element(self, parameter): obj = None k = 0 - while (obj == None and k < self.timeout): + while (obj is None and k < self.timeout): k += 1 try: obj = self.driver.find_element_by_name(parameter) @@ -105,11 +151,20 @@ class Page: except: pass - return obj + LOG.error(error_msg % parameter) + return None def Open(self, url): self.driver.get(url) + def Refresh(self): + self.driver.refresh() + + def TableCell(self, name): + obj = self._find_element(name) + table = TableCellClass(obj) + return table + def Button(self, name): obj = self._find_element(name) button = ButtonClass(obj) diff --git a/tests/selenium/services_page.py b/tests/selenium/services_page.py index e8ea9f8..772b9df 100644 --- a/tests/selenium/services_page.py +++ b/tests/selenium/services_page.py @@ -5,19 +5,20 @@ import re class ServicesPage(page.Page): def create_service(self, service_type, parameters): + self.Refresh() self.Button('services__action_CreateService').Click() self.DropDownList('0-service').Set(service_type) self.Button('wizard_goto_step').Click() - for parameter in parameters: - self.EditBox(parameter.key).Set(parameter.value) + for key in parameters: + self.EditBox(key).Set(parameters[key]) self.Button("//input[@value='Create']").Click() - return self - def delete_service(self, name): + self.Refresh() + link = self.Link(name).Address() service_id = re.search('windc/(\S+)', link).group(0)[6:-1] @@ -29,5 +30,3 @@ class ServicesPage(page.Page): self.Button(button_id).Click() self.Button("Delete Service").Click() - - return self diff --git a/tests/selenium/test.py b/tests/selenium/test.py index 4391a0b..1af0699 100644 --- a/tests/selenium/test.py +++ b/tests/selenium/test.py @@ -5,19 +5,7 @@ from login_page import LoginPage from datacenters_page import DataCentersPage from selenium import webdriver - -class SanityTests(unittest2.TestCase): - - def setUp(self): - driver = webdriver.Firefox() - self.page = LoginPage(driver) - self.page.login() - self.page.Navigate('Project:Windows Data Centers') - self.page = DataCentersPage(driver) - - def tearDown(self): - self.page.driver.close() - +""" def test_01_create_data_center(self): self.page.create_data_center('dc1') assert self.page.Link('dc1').isPresented() @@ -27,25 +15,42 @@ class SanityTests(unittest2.TestCase): assert not self.page.Link('dc1').isPresented() def test_03_create_data_centers(self): - for i in range(1, 20): + for i in range(1, 10): name = 'datacenter' + str(i) self.page.create_data_center(name) assert self.page.Link(name).isPresented() def test_04_delete_data_centers(self): self.page.delete_data_center('datacenter1') - self.page.delete_data_center('datacenter20') + self.page.delete_data_center('datacenter9') assert not self.page.Link('datacenter1').isPresented() - assert not self.page.Link('datacenter20').isPresented() + assert not self.page.Link('datacenter9').isPresented() - for i in range(2, 19): + for i in range(2, 9): name = 'datacenter' + str(i) assert self.page.Link(name).isPresented() +""" + + +class SanityTests(unittest2.TestCase): + + @classmethod + def setUpClass(self): + driver = webdriver.Firefox() + self.page = LoginPage(driver) + self.page.login() + self.page.Navigate('Project:Windows Data Centers') + self.page = DataCentersPage(driver) + + @classmethod + def tearDownClass(self): + self.page.driver.close() def test_05_create_service_ad(self): name = 'dc001.local' - self.page.create_data_center('test') - self.page.select_data_center('test') + self.page.Navigate('Windows Data Centers') + self.page.create_data_center('test05') + self.page = self.page.select_data_center('test05') ad_parameters = {'1-dc_name': name, '1-dc_count': 1, @@ -54,7 +59,99 @@ class SanityTests(unittest2.TestCase): self.page.create_service('Active Directory', ad_parameters) assert self.page.Link(name).isPresented() +""" + def test_06_create_service_ad_two_instances(self): + name = 'dc002.local' + self.page.Navigate('Windows Data Centers') + self.page.create_data_center('test06') + self.page = self.page.select_data_center('test06') + ad_parameters = {'1-dc_name': name, + '1-dc_count': 2, + '1-adm_password': 'P@ssw0rd2', + '1-recovery_password': 'P@ssw0rd'} + self.page.create_service('Active Directory', ad_parameters) + + assert self.page.Link(name).isPresented() + + def test_07_create_service_ad_with_iis(self): + ad_name = 'dc003.local' + self.page.Navigate('Windows Data Centers') + self.page.create_data_center('test07') + self.page = self.page.select_data_center('test07') + + ad_parameters = {'1-dc_name': ad_name, + '1-dc_count': 3, + '1-adm_password': 'P@ssw0rd', + '1-recovery_password': 'P@ssw0rd2'} + self.page.create_service('Active Directory', ad_parameters) + + assert self.page.Link(ad_name).isPresented() + + iis_name = 'iis_server1' + iis_parameters = {'1-iis_name': iis_name, + '1-adm_password': 'P@ssw0rd', + '1-iis_domain': 'dc003.local', + '1-domain_user_name': 'Administrator', + '1-domain_user_password': 'P@ssw0rd'} + self.page.create_service('Internet Information Services', + iis_parameters) + + assert self.page.Link(iis_name).isPresented() + + iis_name = 'iis_server2' + iis_parameters = {'1-iis_name': iis_name, + '1-adm_password': 'P@ssw0rd', + '1-iis_domain': 'dc003.local', + '1-domain_user_name': 'Administrator', + '1-domain_user_password': 'P@ssw0rd'} + self.page.create_service('Internet Information Services', + iis_parameters) + + assert self.page.Link(iis_name).isPresented() + + iis_name = 'iis_server3' + iis_parameters = {'1-iis_name': iis_name, + '1-adm_password': 'P@ssw0rd', + '1-iis_domain': 'dc003.local', + '1-domain_user_name': 'Administrator', + '1-domain_user_password': 'P@ssw0rd'} + self.page.create_service('Internet Information Services', + iis_parameters) + + assert self.page.Link(iis_name).isPresented() + + def test_08_deploy_data_center(self): + ad_name = 'AD.net' + self.page.Navigate('Windows Data Centers') + self.page.create_data_center('test08') + self.page = self.page.select_data_center('test08') + + ad_parameters = {'1-dc_name': ad_name, + '1-dc_count': 2, + '1-adm_password': 'P@ssw0rd', + '1-recovery_password': 'P@ssw0rd2'} + self.page.create_service('Active Directory', ad_parameters) + + assert self.page.Link(ad_name).isPresented() + + iis_parameters = {'1-iis_name': 'iis_server', + '1-adm_password': 'P@ssw0rd', + '1-iis_domain': 'AD.net', + '1-domain_user_name': 'Administrator', + '1-domain_user_password': 'P@ssw0rd'} + self.page.create_service('Internet Information Services', + iis_parameters) + + assert self.page.Link('iis_server').isPresented() + + self.page.Navigate('Windows Data Centers') + self.page = DataCentersPage(self.page.driver) + self.page.deploy_data_center('test08') + + status = self.page.get_datacenter_status('test08') + assert 'Deploy in progress' in status +""" if __name__ == '__main__': unittest2.main()