diff --git a/tests/selenium/datacenters_page.py b/tests/selenium/datacenters_page.py index e48a9c1..7c32cce 100644 --- a/tests/selenium/datacenters_page.py +++ b/tests/selenium/datacenters_page.py @@ -1,56 +1,36 @@ import re -from login_page import LoginPage from services_page import ServicesPage +import page -class DataCentersPage(): +class DataCentersPage(page.Page): page = None - def __init__(self): - start_page = LoginPage() - self.page = start_page.login() - self.page.find_element_by_link_text('Project').click() - self.page.find_element_by_link_text('Windows Data Centers').click() - def create_data_center(self, name): - button_text = 'Create Windows Data Center' - self.page.find_element_by_link_text(button_text).click() - name_field = self.page.find_element_by_id('id_name') + self.Button('Create Windows Data Center').Click() + + self.EditBox('id_name').Set(name) xpath = "//input[@value='Create']" - button = self.page.find_element_by_xpath(xpath) + self.Button(xpath).Click() - name_field.clear() - name_field.send_keys(name) - - button.click() - - return self.page - - def find_data_center(self, name): - return self.page.find_element_by_link_text(name) + return self def delete_data_center(self, name): - datacenter = self.find_data_center(name) - link = datacenter.get_attribute('href') + link = self.Link(name).Address() datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] xpath = ".//*[@id='windc__row__%s']/td[3]/div/a[2]" % datacenter_id - more_button = self.page.find_element_by_xpath(xpath) + self.Button(xpath).Click() - more_button.click() + button_id = "windc__row_%s__action_delete" % datacenter_id + self.Button(button_id).Click() - delete_button_id = "windc__row_%s__action_delete" % datacenter_id - delete_button = self.page.find_element_by_id(delete_button_id) + self.Button("Delete Data Center").Click() - delete_button.click() - - self.page.find_element_by_link_text("Delete Data Center").click() - - return self.page + return self def select_data_center(self, name): - datacenter = self.page.find_data_center(name) - datacenter.click() - self.page = ServicesPage(self.page) - return self.page + self.Link(name).Click() + page = ServicesPage(self.driver) + return page diff --git a/tests/selenium/login_page.py b/tests/selenium/login_page.py index f0f357c..b22c9b1 100644 --- a/tests/selenium/login_page.py +++ b/tests/selenium/login_page.py @@ -1,8 +1,8 @@ import ConfigParser -from selenium import webdriver +import page -class LoginPage(): +class LoginPage(page.Page): def login(self): config = ConfigParser.RawConfigParser() @@ -11,20 +11,11 @@ class LoginPage(): user = config.get('server', 'user') password = config.get('server', 'password') - page = webdriver.Firefox() - page.set_page_load_timeout(30) - page.implicitly_wait(30) - page.get(url) - name = page.find_element_by_name('username') - pwd = page.find_element_by_name('password') + self.Open(url) + + self.EditBox('username').Set(user) + self.EditBox('password').Set(password) xpath = "//button[@type='submit']" - button = page.find_element_by_xpath(xpath) + self.Button(xpath).Click() - name.clear() - name.send_keys(user) - pwd.clear() - pwd.send_keys(password) - - button.click() - - return page + return self diff --git a/tests/selenium/page.py b/tests/selenium/page.py new file mode 100644 index 0000000..e2dcb56 --- /dev/null +++ b/tests/selenium/page.py @@ -0,0 +1,130 @@ +from selenium import webdriver + + +class ButtonClass: + button = None + + def __init__(self, object): + self.button = object + + def Click(self): + self.button.click() + + def isPresented(self): + if self.button != None: + return True + return False + + +class LinkClass: + link = None + + def __init__(self, object): + self.link = object + + def Click(self): + self.link.click() + + def isPresented(self): + if self.link != None: + return True + return False + + def Address(self): + return self.link.get_attribute('href') + + +class EditBoxClass: + edit = None + + def __init__(self, object): + self.edit = object + + def isPresented(self): + if self.edit != None: + return True + return False + + def Set(self, value): + self.edit.clear() + self.edit.send_keys(value) + + def Text(self): + return self.edit.get_text() + + +class DropDownListClass: + select = None + + def __init__(self, object): + self.select = object + + def isPresented(self): + if self.select != None: + return True + return False + + def Set(self, value): + self.select.select_by_visible_text(value) + + def Text(self): + return self.select.get_text() + + +class Page: + + driver = None + timeout = 30 + + def __init__(self, driver): + driver.set_page_load_timeout(30) + driver.implicitly_wait(30) + self.driver = driver + + def _find_element(self, parameter): + object = None + try: + object = self.driver.find_element_by_name(parameter) + return object + except: + pass + try: + object = self.driver.find_element_by_id(parameter) + return object + except: + pass + try: + object = self.driver.find_element_by_xpath(parameter) + return object + except: + pass + try: + object = self.driver.find_element_by_link_text(parameter) + return object + except: + pass + + return object + + def Open(self, url): + self.driver.get(url) + + def Button(self, name): + object = self._find_element(name) + button = ButtonClass(object) + return button + + def Link(self, name): + object = self._find_element(name) + link = LinkClass(object) + return link + + def EditBox(self, name): + object = self._find_element(name) + edit = EditBoxClass(object) + return edit + + def DropDownList(self, name): + object = self._find_element(name) + select = DropDownListClass(object) + return select \ No newline at end of file diff --git a/tests/selenium/services_page.py b/tests/selenium/services_page.py index fb43043..e8ea9f8 100644 --- a/tests/selenium/services_page.py +++ b/tests/selenium/services_page.py @@ -1,57 +1,33 @@ -import ConfigParser -from selenium import webdriver +import page +import re -class ServicesPage(): - page = None - - def __init__(self, page): - self.page = page +class ServicesPage(page.Page): def create_service(self, service_type, parameters): - button_id = 'services__action_CreateService' - button = self.page.find_element_by_id(button_id) - button.click() - - self.select_type_of_service(service_type) + self.Button('services__action_CreateService').Click() + self.DropDownList('0-service').Set(service_type) + self.Button('wizard_goto_step').Click() for parameter in parameters: - field = self.page.find_element_by_name(parameter.key) - field.clear() - field.send_keys(parameter.value) + self.EditBox(parameter.key).Set(parameter.value) - xpath = "//input[@value='Deploy']" - deploy_button = self.page.find_element_by_xpath(xpath) - deploy_button.click() + self.Button("//input[@value='Create']").Click() - return page - - def select_type_of_service(self, service_type): - type_field = self.page.find_element_by_name('0-service') - type_field.select_by_visible_text(service_type) - next_button = self.page.find_element_by_name('wizard_goto_step') - next_button.click() - return self.page - - def find_service(self, name): - return self.page.find_element_by_link_text(name) + return self def delete_service(self, name): - service = self.find_data_center(name) - link = service.get_attribute('href') + link = self.Link(name).Address() service_id = re.search('windc/(\S+)', link).group(0)[6:-1] xpath = ".//*[@id='services__row__%s']/td[5]/div/a[2]" % service_id - more_button = self.page.find_element_by_xpath(xpath) - more_button.click() + self.Button(xpath).Click() - delete_button_id = "services__row_%s__action_delete" % datacenter_id - delete_button = self.page.find_element_by_id(delete_button_id) + button_id = "services__row_%s__action_delete" % service_id + self.Button(button_id).Click() - delete_button.click() + self.Button("Delete Service").Click() - self.page.find_element_by_link_text("Delete Service").click() - - return self.page + return self