class AppEngine(): def __init__(self): # 创建日志实例 self.mylog = Logger(logger='appEngine').getlog() # 读取配置文件中的启动appium需要的参数 conf = MyConfig() # 读取ini文件 filePath = os.path.dirname(os.path.dirname(__file__)) conf.read(filePath + '\\config\\config.ini', encoding='utf-8') self.mylog.info("读取文件../config/config.ini") # 获取选择的section的名字 sel = conf.get('select', 'app') self.mylog.info("选择的手机参数为{}下的值".format(sel)) # 获取上面获取的section下的所有options的值 self.options = conf.items(sel) self.url = 'http://localhost:{}/wd/hub'.format( conf.get('appium', 'port')) self.mylog.info("链接appium的地址为:{}".format(self.url)) # 开启app def open_app(self): # 转换成caps caps = {} for i in self.options: caps[i[0]] = i[1] try: self.driver = webdriver.Remote(self.url, caps) self.mylog.info("与appium链接成功") return self.driver except exceptions.MaxRetryError: self.mylog.error("请求多次appium失败,查看服务是否有问题") except Exception as e: self.mylog.error("报错信息:{}".format(e)) # 关闭app def quit_app(self): self.driver.quit()
# import HtmlTestRunner from framework import HTMLTestRunner import os import unittest import time from framework.logger import Logger # create a logger instance logger = Logger(logger="BasePage").getlog() report_path = os.path.dirname( os.path.abspath('')) + '/automation_framework_demo-master/test_report/' now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) HtmlFile = report_path + now + "HTMLReport.html" try: fp = open(HtmlFile, "w+") except FileNotFoundError as e: logger.error("File not found error : " + e) # Testsuite suite = unittest.TestLoader().discover("") if __name__ == '__main__': # with open(HtmlFile, 'w+') as fp: # HTMLTestRunner runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title=u"Test Suit", description=u"Test Suite HTML Report") runner.run(suite)
class BasePage(object): def __init__(self, driver): self.driver = driver self.logger = Logger(self.__class__.__name__).getLogger() def get(self, url): try: self.driver.get(url) self.logger.info('open url:{0}'.format(url)) except Exception as e: self.logger.error('open url:{0} failed'.format(url)) def get_window_img(self): imgpath = config.get("img", "imgPath") imgName = imgpath + rq + '.png' try: self.driver.get_screenshot_as_file(imgName) self.logger.info('save screenshot succeed') except Exception as e: self.logger.error('save screenshot failed {0}'.format(e)) def find_element(self, locator): #切割传入的字符串分离出查找类型和表达式 el = '' if '=>' not in locator: raise ValueError('locator must split by =>') locator_by_str = locator.split('=>')[0] locator_value = locator.split('=>')[1] locator_by = eval( "self.driver.find_element_by_{0}".format(locator_by_str)) try: el = locator_by(locator_value) self.logger.info('find element {0}:{1}'.format( locator_by_str, locator_value)) except NoSuchElementException: self.logger.error('no such element {0}:{1}'.format( locator_by_str, locator_value)) self.get_window_img() except AttributeError as e: self.logger.error('incorrect locator type') return el def type(self, locator, text): el = self.find_element(locator) # el.clear() try: el.send_keys(text) self.logger.info('input value:{0}'.format(text)) except Exception as e: self.logger.error('input value:{0} failed'.format(text)) self.get_window_img() def click(self, locator): el = self.find_element(locator) try: el.click() self.logger.info('click element:{0}'.format(locator)) except Exception as e: self.logger.error('click element:{0} failed'.format(locator)) def refresh(self): self.driver.refresh() self.logger.info('page refresh') def get_page_title(self): self.logger.info('current page title is {0}'.format(self.driver.title)) return self.driver.title