def __init__(self): """ 初始化连接串,并连接oracle """ self._logger = init_logging() self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo') self._dbtype = self._dbinfo.get('type') self._username = self._yaml.get(self._dbtype).get('username') self._password = self._yaml.get(self._dbtype).get('password') self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass') self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl')
def test_demo(self): driver = InitDriverUtil().select_driver() element1 = driver.find_element_by_id( id_='com.baidu.searchbox:id/baidu_searchbox') element1.click() element2 = driver.find_element_by_id( id_='com.baidu.searchbox:id/SearchTextInput') testdata = YamlParser().parser_test_data_conf('demo.yaml') element2.send_keys(testdata.get('搜索关键字')) # com.baidu.searchbox:id/home_operation_enter element3 = driver.find_element_by_id( id_='com.baidu.searchbox:id/home_operation_enter') element3.click() time.sleep(10)
class SeleniumUtil: def __init__(self, driver): self._driver = driver self._yml = YamlParser() self._logger = init_logging() def _find_element(self, elcf, elnode): """ 查找元素 :param elcf: 元素所在的yaml配置文件 :param elnode: 元素节点名称 :return: """ location = self._yml.parser_elements_from_yaml(cf=elcf, element=elnode) by, value = location.get('定位方式'), location.get('定位值') self._logger.info('[{node}]的定位方式为:{by},定位值为:{value}'.format( node=elnode, by=by, value=value)) # 定位元素 element = self._driver.find_element(by=by, value=value) return element def operate_element(self, elcf, elnode, dtyml=None, dtnode=None): """ 元素操作 dtyml/dtnode都为None时,内部默认将该操作当做点击事件进行处理 :param elcf: 元素所在的yaml配置文件 :param elnode: 元素节点名称 :param dtyml: 测试数据所在的yaml配置文件 :param dtnode: 测试数据节点名称 :return: """ element = self._find_element(elcf=elcf, elnode=elnode) # 获取测试数据信息 data = self._yml.parser_data_from_yaml(cf=dtyml, data=dtnode) optype, opvalue = data.get('操作'), data.get('值') if dtyml is None and dtnode is None: # 元素点击(click) element.click() elif operator.eq(optype, '输入'): # 元素输入(input) element.clear() element.send_keys(opvalue) else: self._logger.error('暂不支持的操作方式')
def __init__(self): self._logger = InitLogging().init_logging() self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._project_root = root_path + os.sep self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep
class InitDriverUtil: """ 初始化驱动程序,web项目同时输入地址 @CREATED: [email protected] @CREATED_DATE: 2019-11-30 @MODIFIED_DATE: """ def __init__(self): self._logger = InitLogging().init_logging() self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._project_root = root_path + os.sep self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep def select_driver(self): project_type = self._conf.get('projectType') if 'web' == project_type: return self.init_web_driver() elif 'app' == project_type: return self.init_appium_driver() else: self._logger.error("当前仅支持app、web两种类型的项目!") def init_web_driver(self): """ 初始化web浏览器 :return: driver """ driver_version = self._conf.get('browser') driver = '' if operator.contains(driver_version.lower(), 'chrome'): driver_path = self._driver_root_path + 'chrome' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Chrome(executable_path=driver_path) elif operator.contains(driver_version.lower(), 'firefox'): driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Firefox(executable_path=driver_path) elif operator.contains(driver_version.lower(), 'ie'): driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Ie(executable_path=driver_path) else: self._logger.error('您选择的浏览器类型赞不支持') # 浏览器最大化 driver.maximize_window() # 项目名称 project = self._conf.get('project') # 项目url url = self._conf.get(project).get('url') # 输入地址到浏览器地址栏 driver.get(url=url) driver.implicitly_wait(self._conf.get(project).get('timeout')) return driver def init_appium_driver(self): """ 初始化appium驱动 :return: driver """ desired_caps = {} # appilcation settings project = self._conf.get('project') desired_caps.update(self._conf.get(project).get('appInfo')) # appium common settings desired_caps.update(self._conf.get('appium_config')) # 获取设备名称 device_name = self._conf.get(project).get('useDevice') # 设备信息 device_info = self._conf.get(device_name) desired_caps.update(device_info) # init webdriver driver = webdriver.Remote(self._conf.get('remoteurl'), desired_caps) return driver
def __init__(self, driver): self._driver = driver self._yml = YamlParser() self._logger = init_logging()
class InitDriverUtil: """ 初始化驱动程序,web项目同时输入地址 @CREATED: [email protected] @CREATED_DATE: 2019-11-30 @MODIFIED_DATE: """ def __init__(self): self._logger = init_logging() self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._project_root = root_path + os.sep self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep def select_driver(self): """ 选择驱动类型 :return: """ project_type = self._conf.get('projectType') if 'web' == project_type: return self._init_web_driver() elif 'app' == project_type: return self._init_appium_driver() else: self._logger.error("当前仅支持app、web两种类型的项目!") def _init_web_driver(self): """ 初始化web浏览器 :return: driver """ driver_version = self._conf.get('browser') distribute = self._conf.get('seleniumGrid') driver = '' # 分布式开关开时,远程驱动浏览器,分布式开关关时本地驱动浏览器 if not distribute.get('switch'): # 本地驱动chrome浏览器 if operator.contains(driver_version.lower(), 'chrome'): driver_path = self._driver_root_path + 'chrome' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Chrome(executable_path=driver_path) # 本地驱动firefox浏览器 elif operator.contains(driver_version.lower(), 'firefox'): driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Firefox(executable_path=driver_path) # 本地驱动ie浏览器 elif operator.contains(driver_version.lower(), 'ie'): driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Ie(executable_path=driver_path) # 本地驱动edge浏览器 elif operator.contains(driver_version.lower(), 'edge'): driver_path = self._driver_root_path + 'edge' + os.sep + self._conf.get( 'webbrowser').get(driver_version) driver = webdriver.Edge(executable_path=driver_path) else: raise self._logger.error('您选择的浏览器类型赞不支持') elif distribute.get('switch'): # 远程驱动chrome浏览器 if operator.contains(driver_version.lower(), 'chrome'): driver_path = '/opt/selenium/chromedriver-86.0.4240.22' chrome_desired = { "browserName": "chrome", "platform": "LINUX", "cssSelectorsEnabled": True, "javascriptEnabled": True, "binary": driver_path, } driver = webdriver.Remote( command_executor=distribute.get('hubUrl'), desired_capabilities=chrome_desired) # 远程驱动firefox浏览器,暂不支持 elif operator.contains(driver_version.lower(), 'firefox'): driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get( 'webbrowser').get(driver_version) fox_desired = { "browserName": "firefox", "platform": "WINDOWS", "cssSelectorsEnabled": True, "javascriptEnabled": True, "firefox_binary": driver_path, } driver = webdriver.Remote( command_executor=distribute.get('hubUrl'), desired_capabilities=fox_desired) # 远程本地驱动ie浏览器 elif operator.contains(driver_version.lower(), 'ie'): driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get( 'webbrowser').get(driver_version) ie_desired = { "browserName": "internet explorer", "platform": "WINDOWS", "cssSelectorsEnabled": True, "javascriptEnabled": True, "binary": driver_path, } driver = webdriver.Remote( command_executor=distribute.get('hubUrl'), desired_capabilities=ie_desired) # 远程驱动edge浏览器,暂不支持 elif operator.contains(driver_version.lower(), 'edge'): driver_path = self._driver_root_path + 'edge' + os.sep + self._conf.get( 'webbrowser').get(driver_version) edge_desired = { "browserName": "MicrosoftEdge", "platform": "WINDOWS", "cssSelectorsEnabled": True, "javascriptEnabled": True, "binary": driver_path, } driver = webdriver.Remote( command_executor=distribute.get('hubUrl'), desired_capabilities=edge_desired) else: self._logger.error('您选择的浏览器类型赞不支持') driver.file_detector = LocalFileDetector() # 浏览器最大化 driver.maximize_window() # 项目名称 project = self._conf.get('project') # 项目url url = self._conf.get(project).get('url') # 输入地址到浏览器地址栏 driver.get(url=url) driver.implicitly_wait(self._conf.get(project).get('timeout')) return driver def _init_appium_driver(self): """ 初始化appium驱动 :return: driver """ desired_caps = {} # appilcation settings project = self._conf.get('project') desired_caps.update(self._conf.get(project).get('appInfo')) # appium common settings desired_caps.update(self._conf.get('appium_config')) # 获取设备名称 device_name = self._conf.get(project).get('useDevice') # 设备信息 device_info = self._conf.get(device_name) desired_caps.update(device_info) # init webdriver driver = webdriver.Remote(self._conf.get('remoteurl'), desired_caps) return driver
class dbUtil: def __init__(self): """ 初始化连接串,并连接oracle """ self._logger = InitLogging().init_logging() self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo') self._dbtype = self._dbinfo.get('type') self._username = self._yaml.get(self._dbtype).get('username') self._password = self._yaml.get(self._dbtype).get('password') # self._database = self._dbinfo.get('database') self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass') self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl') # self._dbfile = self._dbinfo.get('dbfile') # self._connstr = self._dbinfo.get('connectstr') # self._port = self._dbinfo.get('port') # jdbcClass: oracle.jdbc.driver.OracleDriver # jdbcurl: jdbc:oracle: thin: def connect_database(self): """ 连接数据库 :return: """ # jdbc驱动包路径 lib_path = root_path + os.sep + 'libs' + os.sep conn = None cursor = None # 根据配置的不同数据库类型选择对应的驱动并初始化连接 if operator.eq(self._dbtype, 'oracle'): conn = jdbc.connect(jclassname=self._jdbcclass, jars=lib_path + 'mysql-connector-java-8.0.16.jar', url=self._jdbcurl, driver_args={ 'user': self._username, 'password': self._password }) cursor = conn.cursor() if operator.eq(self._dbtype, 'mysql'): conn = jdbc.connect(jclassname=self._jdbcclass, url=self._jdbcurl, driver_args={ 'user': self._username, 'password': self._password }, jars=lib_path + 'mysql-connector-java-8.0.16.jar') cursor = conn.cursor() if operator.eq(self._dbtype, 'sqlite'): conn = jdbc.connect(jclassname=self._jdbcclass, url=self._jdbcurl, jars=lib_path + 'sqlite-jdbc-3.28.0.jar') cursor = conn.cursor() if operator.eq(self._dbtype, 'hive'): pass if operator.eq(self._dbtype, 'gauss'): pass else: self._logger.error('暂不支持%s数据库类型' % self._dbtype) return {'conn': conn, 'cursor': cursor} def execute_single_sql(self, operate, sql, parameters=None): """ 执行单个SQL语句 :param operate: SQL类型,DML、DDL :param sql: SQL语句 :param parameters: SQL参数 :return: 查询结果集 """ db_obj = self.connect_database() db_obj.get('cursor').execute(operation=sql, parameters=parameters) if operator.eq(operate, 'ddl'): db_obj.get('conn').commit() result = db_obj.get('cursor').fetchall() db_obj.get('cursor').close() db_obj.get('conn').close() return result
class dbUtil: def __init__(self): """ 初始化连接串,并连接oracle """ self._logger = init_logging() self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml') self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo') self._dbtype = self._dbinfo.get('type') self._username = self._yaml.get(self._dbtype).get('username') self._password = self._yaml.get(self._dbtype).get('password') self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass') self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl') def connect_database(self): """ 连接数据库 """ lib_path = root_path + os.sep + 'libs' + os.sep if operator.eq(self._dbtype, 'oralce'): conn = jdbc.connect(jclassname=self._jdbcclass, jars=lib_path + 'ojdbc8.jar', url=self._jdbcurl, driver_args={ 'user': self._username, 'password': self._password }) cursor = conn.cursor() elif operator.eq(self._dbtype, 'mysql'): conn = jdbc.connect(jclassname=self._jdbcclass, url=self._jdbcurl, driver_args={ 'user': self._username, 'password': self._password }, jars=lib_path + 'mysql-connector-java-8.0.16.jar') cursor = conn.cursor() elif operator.eq(self._dbtype, 'sqlite3'): conn = jdbc.connect(jclassname=self._jdbcclass, url=self._jdbcurl, jars=lib_path + 'sqlite-jdbc-3.28.0.jar') cursor = conn.cursor() else: self._logger.error('暂不支持%s数据库类型' % self._dbtype) raise return {'conn': conn, 'cursor': cursor} def execute_sql(self, operate, sql, parameters=None): """ 执行单个SQL :param operate: 操作类型,ddl/dml :param sql: sql语句,使用参数的方式时,sql必须使用 :variable的方式绑定变量 :param parameters: sql参数,传入字典族 :return: 查询结果集 """ db_obj = self.connect_database() db_obj.get('cursor').execute(operation=sql, parameters=parameters) if operator.eq(operate, 'ddl'): db_obj.get('conn').commit() result = db_obj.get('cursor').fetchall() db_obj.get('cursor').close() db_obj.get('conn').close() return result