一、代码和测试数据分离
1)数据封装
封装前:
self.username_inputbox = {'element_name':'用户名输入框', 'locator_type':'xpath', 'locator_value':'//input[@name="account"]', 'timeout': 5 }
封装后:
def __init__(self,driver):
super().__init__(driver)
element = ElementdataUtils('login_page').get_data()
self.username_inputbox = element['username_inputbox']
创建元素基础类(ElementdataUtils):
import os
import xlrd
current_path = os.path.dirname(__name__)
excel_path = os.path.join( current_path,'../element_info_datas/element_data.xlsx' )
class ElementdataUtils():
def __init__(self,page_name,element_path =excel_path): #将页面名称定义
self.element_path=element_path
self.workbook = xlrd.open_workbook(excel_path)
self.sheet = self.workbook.sheet_by_name(page_name)
# value = sheet.cell_value(1,0)
self.row_count = self.sheet.nrows
def get_data(self):
element_infos = {}
for i in range(1, self.row_count):
element_info = {}
element_info['element_name'] = self.sheet.cell_value(i, 1)
element_info['locator_type'] = self.sheet.cell_value(i, 2)
element_info['locator_value'] = self.sheet.cell_value(i, 3)
element_info['timeout'] = self.sheet.cell_value(i, 4)
# element_info['current_page'] = self.sheet.cell_value(i, 5)
element_infos[self.sheet.cell_value(i, 0)] = element_info
return element_infos
2)驱动和url封装
封装前:
current_path = os.path.dirname(__file__)
driver_path = os.path.join(current_path, '../webdriver/chromedriver')
driver = webdriver.Chrome(executable_path=driver_path)
login_page = LoginPage(driver)
login_page.open_url('http://***/zentao/www/index.php?m=user&f=login')
login_page.input_username('**')
login_page.input_password('***')
封装后: driver =Browser().get_chrome_path() login_page = LoginPage(driver) login_page.open_url(local_config.url) login_page.input_username(local_config.username) login_page.input_password(local_config.password) login_page.click_login_button()
创建配置工具类:
import os
import configparser
current_dir = os.path.abspath(os.path.dirname(__file__)) #==os.path.dirname(__file__) abspath表示当前文件的绝对路径,dirname当前文件相对路径
config_path = os.path.join(current_dir, '..','config','config.ini')
class ConfigUtils(object):
def __init__(self,path =config_path):
self.cfg=configparser.ConfigParser() #创建读取配置的对象
self.cfg.read(path)
@property #装饰器就是负责把一个方法变成属性调用.
def url(self):
self.url_value=self.cfg.get('default','url')
return self.url_value
@property
def driver_path(self):
self.driver_path_value=self.cfg.get('default','driver_path')
return self.driver_path_value
@property
def username(self):
self.username_value=self.cfg.get('account','username')
return self.username_value
@property
def password(self):
self.password_value=self.cfg.get('account','password')
return self.password_value
local_config =ConfigUtils()
if __name__=='__main__':
# config =ConfigUtils()
print(local_config.url)
创建驱动类:
import os
from selenium import webdriver
from common.config_utils import local_config
from selenium.webdriver.chrome.options import Options
current_path = os.path.dirname(__file__)
webdriver_path = os.path.join(current_path, '..',local_config.driver_path)
#引用config_utils类中的driver_path方法,因driver_path方法中有修饰器,所以当属性在调用
class Browser(object):
def __init__(self,driver_path =webdriver_path):
self.driver_path =driver_path
def get_chrome_path(self):
chrome_driver_path = os.path.join(self.driver_path,'chromedriver')
driver = webdriver.Chrome(executable_path=chrome_driver_path)
return driver
if __name__=='__main__':
Browser().get_chrome_path()
浙公网安备 33010602011771号