From c13879946562f8fb6a2b66251871e5a57cb365d5 Mon Sep 17 00:00:00 2001 From: Timur Nurlygayanov Date: Mon, 25 Mar 2013 15:04:10 +0400 Subject: [PATCH] Fixed automated tests for web UI. --- tests/selenium/conf.ini | 2 +- tests/selenium/datacenters_page.py | 4 +- tests/selenium/page.py | 111 +++++++++++++++-------------- tests/selenium/test.py | 36 ++++++---- 4 files changed, 84 insertions(+), 69 deletions(-) diff --git a/tests/selenium/conf.ini b/tests/selenium/conf.ini index 8b43288..437aeba 100644 --- a/tests/selenium/conf.ini +++ b/tests/selenium/conf.ini @@ -1,4 +1,4 @@ [server] address=http://172.18.124.101 user=admin -password=AkvareL707 \ No newline at end of file +password=swordfish \ No newline at end of file diff --git a/tests/selenium/datacenters_page.py b/tests/selenium/datacenters_page.py index 7c32cce..f0e74a8 100644 --- a/tests/selenium/datacenters_page.py +++ b/tests/selenium/datacenters_page.py @@ -20,7 +20,9 @@ class DataCentersPage(page.Page): 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 + print 'Data Center ID: ' + datacenter_id + + xpath = ".//*[@id='windc__row__%s']/td[4]/div/a[2]" % datacenter_id self.Button(xpath).Click() button_id = "windc__row_%s__action_delete" % datacenter_id diff --git a/tests/selenium/page.py b/tests/selenium/page.py index e2dcb56..80085ab 100644 --- a/tests/selenium/page.py +++ b/tests/selenium/page.py @@ -1,11 +1,10 @@ -from selenium import webdriver class ButtonClass: button = None - def __init__(self, object): - self.button = object + def __init__(self, obj): + self.button = obj def Click(self): self.button.click() @@ -19,8 +18,8 @@ class ButtonClass: class LinkClass: link = None - def __init__(self, object): - self.link = object + def __init__(self, obj): + self.link = obj def Click(self): self.link.click() @@ -35,10 +34,9 @@ class LinkClass: class EditBoxClass: - edit = None - def __init__(self, object): - self.edit = object + def __init__(self, obj): + self.edit = obj def isPresented(self): if self.edit != None: @@ -56,8 +54,8 @@ class EditBoxClass: class DropDownListClass: select = None - def __init__(self, object): - self.select = object + def __init__(self, obj): + self.select = obj def isPresented(self): if self.select != None: @@ -72,59 +70,68 @@ class DropDownListClass: class Page: - + driver = None - timeout = 30 - + timeout = 300 + def __init__(self, driver): driver.set_page_load_timeout(30) - driver.implicitly_wait(30) + driver.implicitly_wait(0.01) 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 - + obj = None + k = 0 + while (obj == None and k < self.timeout): + k += 1 + try: + obj = self.driver.find_element_by_name(parameter) + return obj + except: + pass + try: + obj = self.driver.find_element_by_id(parameter) + return obj + except: + pass + try: + obj = self.driver.find_element_by_xpath(parameter) + return obj + except: + pass + try: + obj = self.driver.find_element_by_partial_link_text(parameter) + return obj + except: + pass + + return obj + def Open(self, url): self.driver.get(url) - + def Button(self, name): - object = self._find_element(name) - button = ButtonClass(object) + obj = self._find_element(name) + button = ButtonClass(obj) return button - + def Link(self, name): - object = self._find_element(name) - link = LinkClass(object) + obj = self._find_element(name) + link = LinkClass(obj) return link - + def EditBox(self, name): - object = self._find_element(name) - edit = EditBoxClass(object) + obj = self._find_element(name) + edit = EditBoxClass(obj) return edit - + def DropDownList(self, name): - object = self._find_element(name) - select = DropDownListClass(object) - return select \ No newline at end of file + obj = self._find_element(name) + select = DropDownListClass(obj) + return select + + def Navigate(self, path): + steps = path.split(':') + + for step in steps: + self.Button(step).Click() diff --git a/tests/selenium/test.py b/tests/selenium/test.py index 6c8389c..4391a0b 100644 --- a/tests/selenium/test.py +++ b/tests/selenium/test.py @@ -1,54 +1,60 @@ # -*- coding: utf-8 -*- -import untitest2 +import unittest2 +from login_page import LoginPage from datacenters_page import DataCentersPage +from selenium import webdriver class SanityTests(unittest2.TestCase): def setUp(self): - self.page = DataCentersPage() + 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.close() + self.page.driver.close() def test_01_create_data_center(self): self.page.create_data_center('dc1') - assert self.page.find_data_center('dc1') is not None + assert self.page.Link('dc1').isPresented() def test_02_delete_data_center(self): self.page.delete_data_center('dc1') - assert self.page.find_data_center('dc1') is None + assert not self.page.Link('dc1').isPresented() def test_03_create_data_centers(self): for i in range(1, 20): name = 'datacenter' + str(i) self.page.create_data_center(name) - assert self.page.find_data_center(name) is not None + 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') - assert self.page.find_data_center('datacenter1') is None - assert self.page.find_data_center('datacenter20') is None + assert not self.page.Link('datacenter1').isPresented() + assert not self.page.Link('datacenter20').isPresented() for i in range(2, 19): name = 'datacenter' + str(i) - assert self.page.find_data_center(name) is not None + assert self.page.Link(name).isPresented() def test_05_create_service_ad(self): name = 'dc001.local' - self.page.create_data_center(name) - self.select_data_center(name) - + self.page.create_data_center('test') + self.page.select_data_center('test') + ad_parameters = {'1-dc_name': name, '1-dc_count': 1, '1-adm_password': 'AkvareL707!', '1-recovery_password': 'AkvareL707!'} self.page.create_service('Active Directory', ad_parameters) - - assert self.page.find_service(name) is not None + + assert self.page.Link(name).isPresented() if __name__ == '__main__': - unittest2.main() \ No newline at end of file + unittest2.main()