selenium的PO设计模式02

一、代码和测试数据分离

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()

  

原文地址:https://www.cnblogs.com/miaoxiaochao/p/12822289.html