Fixed automated tests for WebUI. Added class Page with simple objects.

This commit is contained in:
Timur Nurlygayanov 2013-03-25 11:52:03 +04:00
parent 1af2c35688
commit eaddba5640
4 changed files with 169 additions and 92 deletions

View File

@ -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

View File

@ -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

130
tests/selenium/page.py Normal file
View File

@ -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

View File

@ -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