前言
之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新,今天整理一下实战项目的代码共大家学习。(注:项目是针对我们公司内部系统的测试,只能内部网络访问,外部网络无法访问)
问:
1.外部网络无法访问,代码也无法运行,那还看这个项目有啥用 2.如何学习本项目 3.如何学习自动化测试(python+selenium)答:
1.其实代码并不重要,希望大家完完整整的看完这个项目后,自己会有思路有想法,学会这个项目的框架结构和设计思想,把这些能应用到自己的项目中,那么目的就达到了(项目中涉及到的一些公共方法是可以单独运行的,大家可以拿来执行用到自己的项目中)
2.首先希望大家带着目标来学习这个项目1. 项目的目录结构(每个目录中存放什么东西)2.项目如何使用框架(本项目使用的是unittest框架)3.设计模式是如何应用在本项目中的(本项目应用page object设计模式)
3.个人而言
1)如果你没有任何的编程基础,建议先学习一门编程语言,包括环境的搭建,自己动手写代码,遇到问题多想多琢磨,这样一定会加深自己的印象。如果你有一定的编程基础那么直接看看python的基础语法和selenium就ok(我的自动化测试经验也有限,可能给不了大家太多的建议 ,当然会的越多越好 呵!)
2)自己动手搭个框架,手写一个实战的项目,这时候你会发现你还有好多东西不会,那么线路就来了,哪里不会就去学哪里,边学边写,直到你的项目完成,再次回味就会发现你会了好多,当然不会的东西更多了因为你的思路慢慢的扩宽了,你会想到无人值守,集成等等的想法
3)可以参加培训机构的培训,说实话现在的培训机构越来越多,个人认为有些机构的老师确实是没什么水准的,因为他们教的是基础没有太多的拔高内容,但是有一点是好了,你可以很系统的学习一系列的自动化知识
ok 说了很多废话,大家不要介意!直接上项目
项目简介
项目名称:**公司电子零售会员系统
项目目的:实现电子零售会员系统项目自动化测试执行
项目版本:v1.0
项目目录
Retail_TestPro Docs# 存放项目的相关文档 01测试计划 02测试大纲 03测试用例 04测试报告 05测试进度 06技术文档 07测试申请 Package# 存放第三方插件 HTMLTestRunner.py Retail Config init .py Conf.py# 读配置文件获取项目跟目录路径 并获取所有欲使用的目录文件的路径 Config.ini# 存放项目跟目录的路径 Data TestData init .py elementDate.xlsx# 存放项目中所有的元素信息及测试数据 Email_receiver.txt# 存放邮件的接受者信息 Report# 测试报告 Image Fail# 存放用例执行失败时的截图 Pass# 存放用例执行成功时的截图 Log# 存放用例执行过程中的log信息 TestReport# 存放测试用例执行完成后生成的测试报告 Test_case# 测试用例信息 Models # 存放一些公共方法 Doconfini.py# 读配置文件 Doexcel.py# 读excel文件 Driver.py# 存放driver Log.py# 生成log Myunit.py# 继承unittest.Testcase Sendmail.py# 发送邮件 Strhandle.py# 字符串处理 Tcinfo.py# 测试用例基本信息 Testreport.py# 测试报告 Page_obj# 测试模块 Activerule_page.py Base_page.py Company_page.py Createrule_page.py Memberquery_page.py Modifypw_page.py Pointquery_page.py ActiveRuleTc.py CompanyQueryTc.py CreateRuleTc.py LoginTc.py MemberQueryTc.py ModifyPwTc.py PointQueryTc.py runTc.py# 执行测试用例
项目环境
本版
python 36
pip insatll selenium
PyCharm 2017.2.4 Windows 10 10.0
HTMLTestRunner.py
项目框架
unittest单元测试框架
pageobject 设计模式
UI对象库思想
项目设计
1.一个模块(被测项目的页面)对应一个py文件及一个测试类(测试文件) 2.每一个测试页面(系统的页面)中存储页面元素及此页面中涉及到的功能 3.每一个用例组合在一个测试类里面生成一个py文件项目目标
我们在写自动化测试项目的时候一定要想好你的脚本都要哪些功能,页面元素平凡改动的时候是否需要大批量的修改脚本,及测试不同数据时是否也要修改脚本,那么能想到这些我们的初始目标差不多就有了
生成测试用例执行结果报告 2.生成测试用例执行日志 3.用例执行失败或者执行完成后自动发送邮件报告 4.用例执行失败或者成功时截取图片 5.数据驱动(读取测试数据,减少脚本维护成本)项目代码
config.ini # 存放项目跟路径
[project]project_path?=?D:\Petrochina_Retail_Test_Project
conf.py
?1?''' ?2?Code?description:read?config.ini,?get?path ?3?Create?time: ?4?Developer: ?5?''' ?6?import?os?7?import?sys?8?from?retail.test_case.models.doconfIni?import?DoConfIni?9?10?#?获取当前路径11?currPath=?\12?????os.path.split(os.path.realpath(__file__))[0]13?14?#?读配置文件获取项目路径15?readConfig?=?\16?????DoConfIni()17?proPath?=?\18?????readConfig.getConfValue(os.path.join(currPath,'config.ini'),'project','project_path')19?20?#?获取日志路径21?logPath=?\22?????os.path.join(proPath,'retail','report','Log')23?24?#?测试用例路径25?tcPath?=?\26?????os.path.join(proPath,'retail','test_case')27?28?#?获取报告路径29?reportPath=?\30?????os.path.join(proPath,'retail','report','TestReport')31?32?#?获取测试数据路径33?dataPath=?\34?????os.path.join(proPath,'retail','data','TestData')35?36?#?保存截图路径37?#?错误截图38?failImagePath?=?os.path.join(proPath,?'retail',?'report',?'image','fail')39?#?成功截图40?passImagePath?=?os.path.join(proPath,?'retail',?'report',?'image','pass')41?42?#?被调函数名称43?funcName?=?sys._getframe().f_code.co_name44?#?被调函数所在行号45?funcNo?=?sys._getframe().f_back.f_lineno46?47?#?被调函数所在文件名称48?funcFile=?sys._getframe().f_code.co_filename
elementData.xlsx # 存放所有的测试数据及元素
一个excel文件,不方便贴里面内容(先过,别管里面是啥了 哈哈 后面再找吧)
mail_receiver.txt# 存放邮件接收者的账号 , 可以添加多个账号以‘,’号分割
**@qq测试数据
公共方法models下面的文件:
doconfini.py
?1?''' ?2?Code?description:read?conf?file ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?import?logging?8?import?configparser?9?from?retail.config.conf?import?*10?from?retail.test_case.models.log?import?Logger11?12?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)13?class?DoConfIni(object):14?15?????def?__init__(self):16?????????""" 17? 18?????????:param?filename: 19?????????"""20?????????self.cf?=?configparser.ConfigParser()21?????22?????#?从ini文件中读数据23?????def?getConfValue(self,filename,section,name):24?????????""" 25? 26?????????:param?config: 27?????????:param?name: 28?????????:return: 29?????????"""30?????????try:31?????????????self.cf.read(filename)32?????????????value?=?self.cf.get(section,name)33?????????except?Exception?as?e:34?????????????log.logger.exception('read?file?[%s]?for?[%s]?failed?,?did?not?get?the?value'?%(filename,section))35?????????????raise?e36?????????else:37?????????????log.logger.info('read?excel?value?[%s]?successed!?'?%value)38?????????????return?value39?????#?向ini文件中写数据40?????def?writeConfValue(self,filename,?section,?name,?value):41?????????""" 42? 43?????????:param?section:?section 44?????????:param?name:?value?name 45?????????:param?value:??value 46?????????:return:?none 47?????????"""48?????????try:49?????????????self.cf.add_section(section)50?????????????self.cf.set(section,?name,?value)51?????????????self.cf.write(open(filename,?'w'))52?????????except?Exception?:53?????????????log.logger.exception('section?%s?has?been?exist!'?%section)54?????????????raise?configparser.DuplicateSectionError(section)55?????????else:56?????????????log.logger.info('write?section'+section+'with?value?'+value+'?successed!')57?58?if?__name__?==?'__main__':59?????file_path?=?currPath60?????print(file_path)61?????read_config?=?DoConfIni()62?63?????value?=?read_config.getConfValue(os.path.join(currPath,'config.ini'),'project','project_path')64?????print(value)65?66?????read_config.writeConfValue(os.path.join(currPath,'config.ini'),'tesesection',?'name',?'hello?word')
doexcel.py
?1?''' ?2?Code?description:read?excel.xlsx,?get?values ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?import?xlrd?8?import?os?9?import?logging10?from?retail.config?import?conf11?from?retail.test_case.models.log?import?Logger12?13?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)14?15?class?ReadExcel(object):16?17?????def?__init__(self,fileName='elementDate.xlsx',sheetName='elementsInfo'):18?????????""" 19? 20?????????:param?fileName: 21?????????:param?sheetName: 22?????????"""23?????????try:24?????????????self.dataFile?=?os.path.join(conf.dataPath,?fileName)25?????????????self.workBook?=?xlrd.open_workbook(self.dataFile)26?????????????self.sheetName?=?self.workBook.sheet_by_name(sheetName)27?????????except?Exception:28?????????????log.logger.exception('init?class?ReadExcel?fail',?exc_info=True)29?????????????raise30?????????else:31?????????????log.logger.info('initing?class?ReadExcel')32?????#?读excel中的数据33?????def?readExcel(self,rownum,colnum):34?????????""" 35? 36?????????:param?rownum: 37?????????:param?colnum: 38?????????:return: 39?????????"""40?????????try:41?????????????value?=?self.sheetName.cell(rownum,colnum).value42?????????except?Exception:43?????????????log.logger.exception('read?value?from?excel?file?fail',?exc_info=True)44?????????????raise45?????????else:46?????????????log.logger.info('reading?value?[%s]?from?excel?file?[%s]?completed'?%(value,?self.dataFile))47?????????????return?value48?49?if?__name__?==?'__main__':50?????cellValue?=?ReadExcel().readExcel(1,3)51?????print((cellValue))
log.py
?1?''' ?2?Code?description:log?info ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?import?logging?8?import?time?9?10?11?class?Logger(object):12?????def?__init__(self,?logger,?CmdLevel=logging.INFO,?FileLevel=logging.INFO):13?????????""" 14? 15?????????:param?logger: 16?????????:param?CmdLevel: 17?????????:param?FileLevel: 18?????????"""19?????????self.logger?=?logging.getLogger(logger)20?????????self.logger.setLevel(logging.DEBUG)??#?设置日志输出的默认级别21?????????#?日志输出格式22?????????fmt?=?logging.Formatter('%(asctime)s?-?%(filename)s:[%(lineno)s]?-?[%(levelname)s]?-?%(message)s')23?????????#?日志文件名称24?????????#?self.LogFileName?=?os.path.join(conf.log_path,?"{0}.log".format(time.strftime("%Y-%m-%d")))#?%H_%M_%S25?????????currTime?=?time.strftime("%Y-%m-%d")26?????????self.LogFileName?=?r'D:\Petrochina_Retail_Test_Project\retail\report\Log\log'+currTime+'.log'27?????????#?设置控制台输出28?????????#?sh?=?logging.StreamHandler()29?????????#?sh.setFormatter(fmt)30?????????#?sh.setLevel(CmdLevel)#?日志级别31?32?????????#?设置文件输出33?????????fh?=?logging.FileHandler(self.LogFileName)34?????????fh.setFormatter(fmt)35?????????fh.setLevel(FileLevel)#?日志级别36?37?????????#?self.logger.addHandler(sh)38?????????self.logger.addHandler(fh)39?40?????#?def?debug(self,?message):41?????#?????"""42?????#43?????#?????:param?message:44?????#?????:return:45?????#?????"""46?????#?????self.logger.debug(message)47?????#48?????#?def?info(self,message):49?????#?????"""50?????#51?????#?????:param?message:52?????#?????:return:53?????#?????"""54?????#?????self.logger.info(message)55?????#56?????#?def?warn(self,message):57?????#?????"""58?????#59?????#?????:param?message:60?????#?????:return:61?????#?????"""62?????#?????self.logger.warning(message)63?????#64?????#?def?error(self,message):65?????#?????"""66?????#67?????#?????:param?message:68?????#?????:return:69?????#?????"""70?????#?????self.logger.error(message)71?????#72?????#?def?criti(self,message):73?????#?????"""74?????#75?????#?????:param?message:76?????#?????:return:77?????#?????"""78?????#?????self.logger.critical(message)79?80?if?__name__?==?'__main__':81?????logger?=?Logger("fox",CmdLevel=logging.DEBUG,?FileLevel=logging.DEBUG)82?????logger.logger.debug("debug")83?????logger.logger.log(logging.ERROR,'%(module)s?%(info)s',{'module':'log日志','info':'error'})?#ERROR,log日志?error
sendmail.py
??1?''' ??2?Code?description:send?email ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?import?smtplib??8?from?email.mime.text?import?MIMEText??9?from?email.header?import?Header?10?import?os?11?from?retail.config?import?conf?12?from?retail.test_case.models.log?import?Logger?13? ?14?log?=?Logger(__name__) ?15?#???邮件发送接口 ?16?class?SendMail(object): ?17?????''' ?18?????邮件配置信息 ?19?????''' ?20?????def?__init__(self, ?21??????????????????receiver, ?22??????????????????subject='Retail?系统测试报告', ?23??????????????????server='smtp.qq测试数据', ?24??????????????????fromuser='281754043@qq测试数据', ?25??????????????????frompassword='gifhhsbgqyovbhhc', ?26??????????????????sender='281754043@qq测试数据'): ?27?????????""" ?28? ?29?????????:param?receiver: ?30?????????:param?subject: ?31?????????:param?server: ?32?????????:param?fromuser: ?33?????????:param?frompassword: ?34?????????:param?sender: ?35?????????""" ?36? ?37?????????self._server?=?server?38?????????self._fromuser?=?fromuser?39?????????self._frompassword?=?frompassword?40?????????self._sender?=?sender?41?????????self._receiver?=?receiver?42?????????self._subject?=?subject?43? ?44?????def?sendEmail(self,?fileName): ?45?????????""" ?46? ?47?????????:param?filename: ?48?????????:return: ?49?????????""" ?50?????????#???打开报告文件读取文件内容 ?51?????????try: ?52?????????????f?=?open(os.path.join(conf.reportPath,?fileName),?'rb') ?53?????????????fileMsg?=?f.read() ?54?????????except?Exception: ?55?????????????log.logger.exception('open?or?read?file?[%s]?failed,No?such?file?or?directory:?%s'?%(fileName,?conf.reportPath)) ?56?????????????log.logger.info('open?and?read?file?[%s]?successed!'?%fileName) ?57?????????else: ?58?????????????f.close() ?59?????????????#???邮件主题 ?60?????????????subject?=?'Python?test?report'?# ?61?????????????#???邮件设置 ?62?????????????msg?=?MIMEText(fileMsg,?'html',?'utf-8') ?63?????????????msg['subject']?=?Header(subject,?'utf-8') ?64?????????????msg['from']?=?self._sender?65?????????#???连接服务器,登录服务器,发送邮件 ?66?????????????try: ?67?????????????????smtp?=?smtplib.SMTP() ?68?????????????????smtp.connect(self._server) ?69?????????????????smtp.login(self._fromuser,?self._frompassword) ?70?????????????except?Exception: ?71?????????????????log.logger.exception('connect?[%s]?server?failed?or?username?and?password?incorrect!'?%smtp) ?72?????????????else: ?73?????????????????log.logger.info('email?server?[%s]?login?success!'?%smtp) ?74?????????????????try: ?75?????????????????????smtp.sendmail(self._sender,?self._receiver,?msg.as_string()) ?76?????????????????except?Exception: ?77?????????????????????log.logger.exception('send?email?failed!') ?78?????????????????else: ?79?????????????????????log.logger.info('send?email?successed!') ?80? ?81? ?82?#???从文件中读取邮件接收人信息 ?83?def?getReceiverInfo(fileName): ?84?????''' ?85?????:param?filename:?读取接收邮件人信息 ?86?????:return:?接收邮件人信息 ?87?????''' ?88?????try: ?89?????????openFile?=?open(os.path.join(conf.dataPath,?fileName)) ?90?????except?Exception: ?91?????????log.logger.exception('open?or?read?file?[%s]?failed,No?such?file?or?directory:?%s'?%(fileName,?conf.dataPath)) ?92?????else: ?93?????????log.logger.info('open?file?[%s]?successed!'?%fileName) ?94?????????for?line?in?openFile: ?95?????????????msg?=?[i.strip()?for?i?in?line.split(',')] ?96?????????????log.logger.info('reading?[%s]?and?got?receiver?value?is?[%s]'?%(fileName,?msg)) ?97?????????????return?msg?98? ?99?if?__name__?==?'__main__':100?????readMsg=getReceiverInfo('mail_receiver.txt')101?????sendmail?=?SendMail(readMsg)102?????sendmail.sendEmail('2018-09-21?17_44_04.html')
strhandle.py
?1?''' ?2?Code?description:?string?handle ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?import?logging?8?from?retail.test_case.models.log?import?Logger?9?10?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)11?def?strhandle(str):12?????""" 13? 14?????:param?str: 15?????:return: 16?????"""17?????#初始化字符、数字、空格、特殊字符的计数18?????try:19?????????lowerCase?=?020?????????upperCase?=?021?????????number?=?022?????????other?=?023?????????for?stritem?in?str:24??????????#如果在字符串中有小写字母,那么小写字母的数量+125?????????????if?stritem.islower():26?????????????????lowerCase?+=?127?????????????#如果在字符串中有数字,那么数字的数量+128?????????????elif?stritem.isdigit():29?????????????????number?+=?130?????????????elif?stritem.isupper():#?大写字母31?????????????????upperCase?+=132?????????????#如果在字符串中有空格,那么空格的数量+133?????????????else:34?????????????????other?+=?135?????????return?lowerCase,?upperCase,?number,?other36?????except?Exception?as?e:37?????????log.logger.exception('string?handle?error?,?please?check!',?exc_info=True)38?????????raise?e39?40?41?if?__name__=='__main__':42?????list?=?['qwert','erwer']43?????lowercase,?uppercase,?number,?other?=?strhandle(list[0])44?????print?("该字符串中的小写字母有:%d"?%lowercase)45?????print?("该字符串中的大写写字母有:%d"?%uppercase)46?????print?("该字符串中的数字有:%d"?%number)47?????print?("该字符串中的特殊字符有:%d"?%other)
testreport.py
?1?''' ?2?Code?description:test?report ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7? ?8?import?time?9?import?logging10?import?unittest11?from?BeautifulReport?import?BeautifulReport12?import?HTMLTestRunner13?from?retail.config?import?conf14?from?retail.test_case.models.log?import?Logger15?16?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)17?#?用HTMLTestRunner?实现的测试报告18?def?testreport():19?????""" 20? 21?????:return: 22?????"""23?????currTime?=?time.strftime('%Y-%m-%d?%H_%M_%S')24?????fileName?=?conf.reportPath?+?r'\report'?+?currTime?+?'.html'25?????try:26?????????fp?=?open(fileName,?'wb')27?????except?Exception?:28?????????log.logger.exception('[%s]?open?error?cause?Failed?to?generate?test?report'?%fileName)29?????else:30?????????runner?=?HTMLTestRunner.HTMLTestRunner\31?????????????(stream=fp,?title='Retail?sys测试报告',32????????????????????????????????????????????????description='处理器:Intel(R)?Core(TM)?'33????????????????????????????????????????????????????????????'i5-6200U?CPU?@?2030GHz?2.40?GHz?'34?????????????????????????????????????????????????'内存:8G?系统类型:?64位?版本:?windows?10?家庭中文版')35?????????log.logger.info('successed?to?generate?test?report?[%s]'?%fileName)36?????????return?runner,?fp,?fileName37?#38?def?addTc(TCpath?=?conf.tcPath,?rule?=?'*TC.py'):39?????""" 40? 41?????:param?TCpath:?测试用例存放路径 42?????:param?rule:?匹配的测试用例文件 43?????:return:??测试套件 44?????"""45?????discover?=?unittest.defaultTestLoader.discover(TCpath,?rule)46?47?????return?discover48?#?用BeautifulReport模块实现测试报告49?def?runTc(discover):50?????""" 51? 52?????:param?discover:?测试套件 53?????:return: 54?????"""55?????currTime?=?time.strftime('%Y-%m-%d?%H_%M_%S')56?????fileName?=?currTime+'.html'57?????try:58?????????result?=?BeautifulReport(discover)59?????????result.report(filename=fileName,?description='测试报告',?log_path=conf.reportPath)60?????except?Exception:61?????????log.logger.exception('Failed?to?generate?test?report',?exc_info=True)62?????else:63?????????log.logger.info('successed?to?generate?test?report?[%s]'?%?fileName)64?????????return?fileName65?66?if?__name__?==?'__main__':67?????testreport()68?????suite?=?addTc(rule?=?'*TC.py')69?????runTc(suite)
driver.py
?1?''' ?2?Code?description:save?all?driver?info ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?from?selenium?import?webdriver?8?import?logging?9?import?sys10?from?retail.test_case.models.log?import?Logger11?12?13?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)14?class?WDriver(object):15?16?????#?Firefox?driver17?????def?fireFoxDriver(self):18?????????""" 19? 20?????????:return: 21?????????"""22?????????try:23?????????????self.driver?=?webdriver.Firefox()24?????????except?Exception?as?e:25?????????????log.logger.exception('FireFoxDriverServer.exe?executable?needs?to?be?in?PATH.?Please?download!',?exc_info=True)26?????????????raise?e27?????????else:28?????????????log.logger.info('%s:found?the?Firefox?driver?[%s]?successed?!'?%(sys._getframe().f_code.co_name,self.driver))29?????????????return?self.driver30?31?????#?chrom?driver32?????def?chromeDriver(self):33?????????""" 34? 35?????????:return: 36?????????"""37?????????try:38?????????????#?option?=?webdriver.ChromeOptions()#?实现不打开浏览器?执行web自动化测试脚本39?????????????#?option.add_argument('headless')#40?????????????#?self.driver?=?webdriver.Chrome(chrome_options=option)41?????????????self.driver?=?webdriver.Chrome()42?????????except?Exception?as?e:43?????????????log.logger.exception('ChromeDriverServer.exe?executable?needs?to?be?in?PATH.?Please?download!',44??????????????????????????????????exc_info=True)45?????????????raise?e46?????????else:47?????????????log.logger.info('%s:found?the?chrome?driver?[%s]?successed?!'?%?(sys._getframe().f_code.co_name,?self.driver))48?????????????return?self.driver49?50?51?????#?Ie?driver52?????def?ieDriver(self):53?????????""" 54? 55?????????:return: 56?????????"""57?????????try:58?????????????self.driver?=?webdriver.Ie()59?????????except?Exception?as?e:60?????????????log.logger.exception('IEDriverServer.exe?executable?needs?to?be?in?PATH.?Please?download!',61??????????????????????????????????exc_info=True)62?????????????raise?e63?????????else:64?????????????log.logger.info('%s:found?the?IE?driver?[%s]?successed?!'?%?(sys._getframe().f_code.co_name,?self.driver))65?????????????return?self.driver66?67?68?if?__name__?==?'__main__':69?????WDrive=WDriver()70?????WDrive.fireFoxDriver()
myunittest.py
?1?''' ?2?Code?description:unittest?framwork ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?from?retail.test_case.models.driver?import?WDriver?8?import?logging?9?import?unittest10?from?retail.test_case.page_obj.login_page?import?LoginPage11?from?retail.test_case.models.log?import?Logger12?from?selenium?import?webdriver13?14?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)15?class?MyunitTest(unittest.TestCase):16?????""" 17? 18?????"""19?20?????#?add?by?xuechao?at?2018.09.1921?????@classmethod22?????def?setUpClass(cls):?#?一个测试类(文件)执行一次打开浏览器,?节约每个用例打开一次浏览器的时间23?24?????????#cls.driver?=?WDriver().fireFoxDriver()25?????????cls.driver?=?WDriver().chromeDriver()26?????????cls.driver.maximize_window()27?????????log.logger.info('opened?the?browser?successed!')28?????#?----------------------------29?30?????def?setUp(self):31?????????""" 32? 33?????????:return: 34?????????"""35?????????self.login?=?LoginPage(self.driver)36?????????self.login.open()37?????????log.logger.info('************************starting?run?test?cases************************')38?39?????def?tearDown(self):40?????????""" 41? 42?????????:return: 43?????????"""44?????????self.driver.refresh()45?????????log.logger.info('************************test?case?run?completed************************')46?47?????#?add?by? Linux chao?at?2018.09.1948?????@classmethod49?????def?tearDownClass(cls):50?????????cls.driver.quit()51?????????log.logger.info('quit?the?browser?success!')52?????#----------------------------53?if?__name__?==?'__main__':54?????unittest.main()
目前为止,我需要的所有的公共方法都编写完了, 后期再需要别的方法可以加,下面我们就开始编写我们的测试用例,由于我们使用的是PageObject模式,那么我们需要设计一个basepage页面,所有的页面或者说模块全部继承这个basepage,basepage主要编写所有页面的公共方法
base_page.py
??1?''' ??2?Code?description:?base?page?封装一些公共方法 ??3?Create?time: ??4?Developer: ??5?''' ??6?from?selenium.webdriver.support.wait?import?WebDriverWait??7?from?selenium.webdriver.support?import?expected_conditions?as?EC??8?from?selenium.webdriver测试数据mon.by?import?By??9?import?os?10?import?logging?11?import?sys?12?from?retail.test_case.models.log?import?Logger?13?from?retail.config?import?conf?14?from?retail.test_case.models.doexcel?import?ReadExcel?15? ?16?eleData?=?ReadExcel()?#?存储系统所有的元素数据 ?17?testLoginData?=?ReadExcel('elementDate.xlsx',?'userNamePw')?#?登录模块测试数据 ?18?modifyPwData?=?ReadExcel('elementDate.xlsx',?'modifyPw')?#?修改密码模块测试数据 ?19?queryData?=?ReadExcel('elementDate.xlsx',?'queryData') ?20?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO) ?21? ?22?class?BasePage(object): ?23? ?24?????"""主菜单""" ?25?????menuList?=?\?26?????????[(By.LINK_TEXT,?eleData.readExcel(7,?3)),?#?权限管理 ?27?????????(By.LINK_TEXT,?eleData.readExcel(8,?3)),?#?会员档案 ?28?????????(By.LINK_TEXT,?eleData.readExcel(9,?3)),?#?积分消费查询 ?29?????????(By.LINK_TEXT,?eleData.readExcel(10,?3)),?#?功能演示 ?30?????????(By.LINK_TEXT,?eleData.readExcel(11,?3)),?#?待办工作 ?31?????????(By.LINK_TEXT,?eleData.readExcel(12,?3)),?#?报表 ?32?????????(By.LINK_TEXT,?eleData.readExcel(13,?3)),?#?积分规则/活动查询 ?33?????????(By.LINK_TEXT,?eleData.readExcel(14,?3))]?#?积分规则/活动申请 ?34? ?35?????def?__init__(self,?driver,url='http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp'): ?36?????????""" ?37? ?38?????????:param?driver: ?39?????????:param?url: ?40?????????""" ?41?????????self.driver?=?driver?42?????????self.base_url?=?url?43?????def?_open(self,url): ?44?????????""" ?45? ?46?????????:param?url: ?47?????????:return: ?48?????????""" ?49?????????try: ?50?????????????self.driver.get(url) ?51?????????????self.driver.implicitly_wait(10) ?52?????????except?Exception?as?e: ?53?????????????log.logger.exception(e,?exc_info=True) ?54?????????????raise?ValueError('%s?address?access?error,?please?check!'?%url) ?55?????????else: ?56?????????????log.logger.info('%s?is?accessing?address?%s?at?line[46]'?%(sys._getframe().f_code.co_name,url)) ?57? ?58?????def?open(self): ?59?????????""" ?60? ?61?????????:return: ?62?????????""" ?63? ?64?????????self._open(self.base_url) ?65?????????log.logger.info('%s?loading?successed!'?%self.base_url) ?66?????????return?self.base_url?67? ?68?????#?*loc?代表任意数量的位置参数 ?69?????def?findElement(self,?*loc): ?70?????????""" ?71?????????查找单一元素 ?72?????????:param?loc: ?73?????????:return: ?74?????????""" ?75?????????try: ?76?????????????WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc)) ?77?????????????#?log.logger.info('The?page?of?%s?had?already?find?the?element?%s'%(self,loc)) ?78?????????????#?return?self.driver.find_element(*loc) ?79?????????except?Exception?as?e: ?80?????????????log.logger.exception('finding?element?timeout!,?details'?,exc_info=True) ?81?????????????raise?e?82?????????else: ?83?????????????log.logger.info('The?page?of?%s?had?already?find?the?element?%s'?%?(self,?loc)) ?84?????????????return?self.driver.find_element(*loc) ?85? ?86?????def?findElements(self,?*loc): ?87?????????""" ?88?????????查找一组元素 ?89?????????:param?loc: ?90?????????:return: ?91?????????""" ?92?????????try: ?93?????????????WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc)) ?94?????????????#?log.logger.info('The?page?of?%s?had?already?find?the?element?%s'?%?(self,?loc)) ?95?????????????#?return?self.driver.find_elements(*loc) ?96?????????except?Exception?as?e: ?97?????????????log.logger.exception('finding?element?timeout!,?details',?exc_info=True) ?98?????????????raise?e?99?????????else:100?????????????log.logger.info('The?page?of?%s?had?already?find?the?element?%s'?%?(self,?loc))101?????????????return?self.driver.find_elements(*loc)102?103?????def?inputValue(self,?inputBox,?value):104?????????""" 105?????????后期修改其他页面直接调用这个函数 106?????????:param?inputBox: 107?????????:param?value: 108?????????:return: 109?????????"""110?????????inputB?=?self.findElement(*inputBox)111?????????try:112?????????????inputB.clear()113?????????????inputB.send_keys(value)114?????????except?Exception?as?e:115?????????????log.logger.exception('typing?value?error!',?exc_info=True)116?????????????raise?e117?????????else:118?????????????log.logger.info('inputValue:[%s]?is?receiveing?value?[%s]'?%?(inputBox,?value))119?120?????#?获取元素数据121?????def?getValue(self,?*loc):122?????????""" 123? 124?????????:param?loc: 125?????????:return: 126?????????"""127?????????element?=?self.findElement(*loc)128?????????try:129?????????????value?=?element.text130?????????????#return?value131?????????except?Exception:132?????????????#element?=?self.find_element_re(*loc)?#?2018.09.21?for?log133?????????????value?=?element.get_attribute('value')134?????????????log.logger.info('reading?the?element?[%s]?value?[%s]'?%?(loc,?value))135?????????????return?value136?????????except:137?????????????log.logger.exception('read?value?failed',?exc_info=True)138?????????????raise?Exception139?????????else:140?????????????log.logger.info('reading?the?element?[%s]?value?[%s]'?%?(loc,value))141?????????????return?value142?143?????def?getValues(self,?*loc):144?????????""" 145? 146?????????:param?loc: 147?????????:return: 148?????????"""149?????????value_list?=?[]150?????????try:151?????????????for?element?in?self.findElements(*loc):152?????????????????value?=?element.text153?????????????????value_list.append(value)154?????????except?Exception?as?e:155?????????????log.logger.exception('read?value?failed',?exc_info=True)156?????????????raise?e157?????????else:158?????????????log.logger.info('reading?the?element?[%s]?value?[%s]'%?(loc,value_list))159?????????????return?value_list160?161?????#?执行js脚本162?????def?jScript(self,src):163?????????""" 164? 165?????????:param?src: 166?????????:return: 167?????????"""168?????????try:169?????????????self.driver.excute_script(src)170?????????except?Exception?as?e:171?????????????log.logger.exception('execute?js?script?[%s]?failed?'?%src)172?????????????raise?e173?????????else:174?????????????log.logger.info('execute?js?script?[%s]?successed?'?%src)175?176?177?????#?判断元素是否存在178?????def?isElementExist(self,?element):179?????????""" 180? 181?????????:param?element: 182?????????:return: 183?????????"""184?????????try:185?????????????WebDriverWait(self.driver,?10).until(EC.visibility_of_element_located(element))186?????????except:187?????????????#?log.logger.exception('The?element?[%s]?not?exist',?exc_info=True)188?????????????return?False189?????????else:190?????????????#?log.logger.info('The?element?[%s]?have?existed!'?%element)191?????????????return?True192?????#?截图193?????def?saveScreenShot(self,?filename):194?????????""" 195? 196?????????:param?filename: 197?????????:return: 198?????????"""199?????????list_value?=?[]200?201?????????list?=?filename.split('.')202?????????for?value?in?list:203?????????????list_value.append(value)204?????????if?list_value[1]?==?'png'?or?list_value[1]?==?'jpg'?or?list_value[1]?==?'PNG'?or?list_value[1]?==?'JPG':205?????????????if?'fail'?in?list_value[0].split('_'):206?????????????????try:207?????????????????????self.driver.save_screenshot(os.path.join(conf.failImagePath,?filename))208?????????????????except?Exception:209?????????????????????log.logger.exception('save?screenshot?failed?!',?exc_info=True)210?????????????????else:211?????????????????????log.logger.info('the?file?[%s]??save?screenshot?successed?under?[%s]'?%?(filename,?conf.failImagePath))212?????????????elif?'pass'?in?list_value[0]:213?????????????????try:214?????????????????????self.driver.save_screenshot(os.path.join(conf.passImagePath,?filename))215?????????????????except?Exception:216?????????????????????log.logger.exception('save?screenshot?failed?!',?exc_info=True)217?????????????????else:218?????????????????????log.logger.info(219?????????????????????????'the?file?[%s]??save?screenshot?successed?under?[%s]'?%?(filename,?conf.passImagePath))220?????????????else:221?????????????????log.logger.info('save?screenshot?failed?due?to?[%s]?format?incorrect'?%filename)222?????????else:223?????????????log.logger.info('the?file?name?of?[%s]?format?incorrect?cause?save?screenshot?failed,?please?check!'?%?filename)224?225?????#?接受错误提示框226?????def?accept(self,?*loc):227?????????""" 228? 229?????????:return: 230?????????"""231?????????self.findElement(*loc).click()232?????????log.logger.info('closed?the?error?information?fram?successed!')233?234?if?__name__?==?'__main__':235?????pass
#登录页面
?1?''' ?2?Code?description:?login?page ?3?Create?time: ?4?Developer: ?5?''' ?6? ?7?from?selenium.webdriver测试数据mon.by?import?By?8?import?logging?9?import?sys10?from?retail.test_case.page_obj.base_page?import?BasePage,?eleData,?testLoginData11?from?retail.test_case.models.log?import?Logger12?13?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO)14?15?16?class?LoginPage(BasePage):17?18?????"""用户名,密码,登录按钮,保存信息,错误提示"""19?????userNameEle?=?(By.ID,?eleData.readExcel(1,?3))20?????passWordEle?=?(By.ID,?eleData.readExcel(2,?3))21?????loginBtnEle?=?(By.ID,?eleData.readExcel(3,?3))22?????saveInfoEle?=?(By.NAME,?eleData.readExcel(4,?3))23?????errorMessage?=?(By.ID,?eleData.readExcel(5,?3))24?????quitBtn?=?(By.ID,?eleData.readExcel(6,?3))25?26?????#?用户名和密码27?????unpwData?=?\28?????????[[testLoginData.readExcel(1,?0),?testLoginData.readExcel(1,?1)],#?正确的用户名和正确的密码29??????????[testLoginData.readExcel(2,?0),?testLoginData.readExcel(2,?1)],#?错误的用户名和正确的密码30??????????[testLoginData.readExcel(3,?0),?testLoginData.readExcel(3,?1)],#?空的用户名和正确的密码31??????????[testLoginData.readExcel(4,?0),?testLoginData.readExcel(4,?1)],#?错误的用户名和错误的密码32??????????[testLoginData.readExcel(5,?0),?testLoginData.readExcel(5,?1)],#?正确的用户名和空密码33??????????[testLoginData.readExcel(6,?0),?testLoginData.readExcel(6,?1)],#?正确的用户名和错误的密码34??????????[testLoginData.readExcel(7,?0),?testLoginData.readExcel(7,?1)]]#?空用户名和空密码35?36?37?????#?登录按钮38?????def?clickLoginBtn(self):39?????????""" 40? 41?????????:return: 42?????????"""43?????????element?=?self.findElement(*self.loginBtnEle)44?????????element.click()45?????????log.logger.info('%s?,logining....!'?%?sys._getframe().f_code.co_name)46?????#?登录失败时提示47?????def?getFailedText(self):48?????????""" 49? 50?????????:return: 51?????????"""52?????????info?=?self.findElement(*self.errorMessage).text53?????????log.logger.info('login?failed?:?%s'?%info)54?????????return?info55?56?????#?登录失败时弹出的alert57?????def?handleAlert(self):58?????????""" 59? 60?????????:return: 61?????????"""62?????????try:63?????????????alert?=?self.driver.switch_to_alert()64?????????????text?=?alert.text65?????????????alert.accept()66?????????except?Exception:67?????????????log.logger.exception('handle?alert?failed,?please?check?the?details'?,exc_info=True)68?????????????raise69?????????else:70?????????????log.logger.info('login?failed?,%s?handle?alert?successed?alert?info:?%s!'?%(sys._getframe().f_code.co_name,?text))71?????????????return?text72?73?????#?统一登录函数74?????def?loginFunc(self,?username='rmln',?password='qwert1234!@#'):75?????????""" 76?????????:param?username: 77?????????:param?password: 78?????????:return: 79?????????"""80?????????self.inputValue(self.userNameEle,?username)81?????????self.inputValue(self.passWordEle,?password)82?????????self.clickLoginBtn()83?84?????#?清空输入框数据85?????def?clearValue(self,?element):86?87?????????empty?=?self.findElement(*element)88?????????empty.clear()89?????????log.logger.info('emptying?value.......')90?91?92?????#?推出93?????def?quit(self):94?????????self.findElement(*self.quitBtn).click()95?????????log.logger.info('quit')96?97?if?__name__?==?'__main__':98?????pass
登录测试用例
1?''' ??2?Code?description:权限管理/个人设置/密码修改?testcase ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?import?time??8?from?retail.test_case.models.myunit?import?MyunitTest??9?from?retail.test_case.page_obj.modifypw_page?import?PrimaryMenu?10?from?retail.test_case.models.strhandle?import?strhandle?11? ?12?class?ModifyPw_TC(MyunitTest): ?13? ?14?????"""权限管理/个人设置/密码修改模块测试用例""" ?15? ?16?????def?test_menu_is_display(self): ?17?????????"""主菜单校验""" ?18?????????self.login.loginFunc() ?19?????????menu?=?PrimaryMenu(self.driver) ?20?????????time.sleep(4) ?21?????????num?=?0 ?22?????????for?menu_item?in?menu.menuList:?#?循环遍历并断言菜单是否正确 ?23?????????????self.assertEqual(menu.menuList[num][1],(menu.findMenu(*menu_item).text),'菜单不存在') ?24?????????????num=num+1 ?25? ?26?????def?test_modify_password_len(self): ?27?????????"""旧密码非空,新密码长度小于4位,确认密码非空,修改密码失败,弹窗提示""" ?28?????????self.login.loginFunc() ?29?????????menu?=?PrimaryMenu(self.driver) ?30?????????menu.modifyPwMenu()?#?查找修改密码页面 ?31?????????menu.modifyPw(menu.pwdList[0])?#?修改密码 ?32?????????text?=?menu.errorDialog(menu.closeBtn) ?33?????????self.assertIn('密码长度至少?4?位!',?text,?'提示信息错误')?#?密码长度不满足时断言提示信息 ?34? ?35?????def?test_modify_password_strebgth(self): ?36?????????"""旧密码非空,新密码长度大于4且强度不够,确认密码非空,修改密码失败,弹窗提示""" ?37?????????self.login.loginFunc() ?38?????????menu?=?PrimaryMenu(self.driver) ?39?????????menu.modifyPwMenu()?#?查找修改密码页面 ?40?????????menu.modifyPw(menu.pwdList[1])?#?修改密码 ?41?????????text?=?menu.errorDialog(menu.closeBtn) ?42?????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')?#?密码强度不满足时断言提示信息 ?43? ?44?????def?test_modify_password_incorrect(self): ?45?????????"""旧密码不正确非空,新密码等于确认密码且满足条件,修改密码失败,弹窗提示""" ?46?????????self.login.loginFunc() ?47?????????menu?=?PrimaryMenu(self.driver) ?48?????????menu.modifyPwMenu()?#?查找修改密码页面 ?49?????????menu.modifyPw(menu.pwdList[2])?#?修改密码 ?50?????????text?=?menu.errorDialog(menu.closeBtn) ?51?????????self.assertIn('旧密码输入错误!',?text,?'旧密码输入错误!')?#?新密码和确认码不同时断言提示信息 ?52? ?53?????def?test_modify_password_difference(self): ?54?????????"""旧密码非空,新密码不等于确认密码且新密码满足条件,修改密码失败,弹窗提示""" ?55?????????self.login.loginFunc() ?56?????????menu?=?PrimaryMenu(self.driver) ?57?????????menu.modifyPwMenu()?#?查找修改密码页面 ?58?????????menu.modifyPw(menu.pwdList[3])?#?修改密码 ?59?????????text?=?menu.errorDialog(menu.closeBtn) ?60?????????self.assertIn('两次输入的新密码不同!',?text,?'两次输入的新密码不同!')?#?新密码和确认码不同时断言提示信息 ?61? ?62?????def?test_modify_password_all_blank(self): ?63?????????"""旧密码,新密码,确认密码任意为空,修改密码失败,弹窗提示""" ?64?????????self.login.loginFunc() ?65?????????menu?=?PrimaryMenu(self.driver) ?66?????????menu.modifyPwMenu()?#?查找修改密码页面 ?67?????????menu.modifyPw(menu.pwdList[4])?#?修改密码 ?68?????????text?=?menu.errorDialog(menu.closeBtn) ?69?????????self.assertIn('该输入项的值不能为空!',?text,?'?该输入项的值不能为空!')?#?所有密码均为空时断言提示信息 ?70? ?71?????def?test_modify_password(self): ?72?????????"""循环校验提示信息""" ?73?????????self.login.loginFunc() ?74?????????menu?=?PrimaryMenu(self.driver) ?75?????????menu.modifyPwMenu()?#?查找修改密码页面 ?76?????????error_list?=?[] ?77?????????for?list?in?range(len(menu.pwdList)): ?78?????????????menu.modifyPw(menu.pwdList[list]) ?79?????????????if?menu.isElementExist(menu.errMessage): ?80?????????????????text?=?menu.errorDialog(menu.closeBtn)?#?这里只判断是否有提示框弹出,如有说明修改失败,没有或者其他提示框默认为修改成功 ?81?????????????????error_list.append(text) ?82?????????????else: ?83?????????????????self.assertTrue(menu.isElementExist(*menu.errMessage),?'error?fram?not?exist,?please?open?bug') ?84?????????self.assertEqual('密码长度至少?4?位!',error_list[0],'log?infomation?error!') ?85?????????self.assertEqual('密码强度不够,请重新输入密码!',?error_list[1],?'log?infomation?error!') ?86?????????self.assertEqual('旧密码输入错误!',?error_list[2],?'log?infomation?error!') ?87?????????self.assertEqual('两次输入的新密码不同!',?error_list[3],?'log?infomation?error!') ?88?????????self.assertEqual('该输入项的值不能为空!',?error_list[4],?'log?infomation?error!') ?89? ?90?????def?test_modifypw(self): ?91?????????"""循环测试修改密码功能""" ?92?????????self.login.loginFunc()#?登录 ?93?????????menu?=?PrimaryMenu(self.driver) ?94?????????menu.modifyPwMenu()??#?查找修改密码页面 ?95?????????for?item?in?menu.pwdList: ?96?????????????menu.modifyPw(item) ?97?????????????if?menu.isElementExist(menu.errMessage):??#?如果存在提示框?再断言提示信息是否正确 ?98?????????????????if?item[0]?!=?''?and?len(item[1])?<?4??and?item[2]?!='':?#?新密码长度校验 ?99?????????????????????text?=?menu.errorDialog(menu.closeBtn)100?????????????????????try:101?????????????????????????self.assertEqual('密码长度至少?4?位!',text,'the?message?incorrect!')102?????????????????????except?Exception:103?????????????????????????menu.saveScreenShot('fail_密码长度.png')104?????????????????????????raise105?????????????????elif?item[0]?!=?''?and?len(item[1])?>=?4?and?item[2]?!='':?#?新密码强度校验?['a',?'qwert',?'qwert'],106?????????????????????lowercase,?uppercase,?number,?other=strhandle(item[1])107?????????????????????if?lowercase?>?0?and?uppercase?>?0?and?number?==?0?and?other?==?0:?#?小写?大写108?????????????????????????text?=?menu.errorDialog(menu.closeBtn)109?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')110?????????????????????elif?uppercase?>?0?and?other?>?0?and?number?==?0?and?lowercase?==?0:?#?大写?特殊字符111?????????????????????????text?=?menu.errorDialog(menu.closeBtn)112?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')113?????????????????????elif?lowercase?>0?and?other?>?0?and?number?==?0?and?uppercase?==?0:?#?小写?特殊字符114?????????????????????????text?=?menu.errorDialog(menu.closeBtn)115?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')116?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?>?0?and?uppercase?>?0:??#?大写?数字117?????????????????????????text?=?menu.errorDialog(menu.closeBtn)118?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')119?????????????????????elif?lowercase?>?0?and?other?==?0?and?number?>?0?and?uppercase?==?0:??#?小写?数字120?????????????????????????text?=?menu.errorDialog(menu.closeBtn)121?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')122?????????????????????elif?lowercase?>?0?and?other?==?0?and?number?==?0?and?uppercase?==?0:123?????????????????????????text?=?menu.errorDialog(menu.closeBtn)124?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')125?????????????????????elif?lowercase?==?0?and?other?>?0?and?number?==?0?and?uppercase?==?0:126?????????????????????????text?=?menu.errorDialog(menu.closeBtn)127?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')128?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?>?0?and?uppercase?==?0:129?????????????????????????text?=?menu.errorDialog(menu.closeBtn)130?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')131?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?==?0?and?uppercase?>?0:132?????????????????????????text?=?menu.errorDialog(menu.closeBtn)133?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')134?????????????????????elif?item[0]?!=?'qwert1234!@#'?and?item[1]?==?item[2]:#?>=?4135?????????????????????????lowercase,?uppercase,?number,?other?=?strhandle(item[1])136?????????????????????????if?(lowercase?>?0?and?uppercase?>?0?and?number?>?0)?or?(137?????????????????????????????????????lowercase?>?0?and?uppercase?>?0?and?other?>?0)?or?(138?????????????????????????????????????number?>?0?and?other?>?0?and?lowercase?>?0)?or?(139?????????????????????????????????????number?>?0?and?other?>?0?and?uppercase?>?0):140?????????????????????????????text?=?menu.errorDialog(menu.closeBtn)141?????????????????????????????self.assertIn('旧密码输入错误!',?text,?'旧密码输入错误!')??#?新密码和确认码不同时断言提示信息142?????????????????????elif?item[0]?==?'qwert1234!@#$'?and?item[1]?!=?item[2]:#?and?item[1]?>=?4:143?????????????????????????lowercase,?uppercase,?number,?other?=?strhandle(item[1])144?????????????????????????if?(lowercase?>?0?and?uppercase?>?0?and?number?>?0)?or?(145?????????????????????????????????????????????lowercase?>?0?and?uppercase?>?0?and?other?>?0)?or?(146?????????????????????????????????????????????number?>?0?and?other?>?0?and?lowercase?>?0)?or?(147?????????????????????????????????????????????number?>?0?and?other?>?0?and?uppercase?>?0):148?????????????????????????????text?=?menu.errorDialog(menu.closeBtn)149?????????????????????????????self.assertIn('两次输入的新密码不同!',?text,?'?两次输入的新密码不同!')150?????????????????????else:151?????????????????????????print('test?value?incorrect!?please?check?it')152?????????????????elif?item[0]?==?''?or?item[1]?==''?or?item[2]?=='':?#?输入项为空校验153?????????????????????text?=?menu.errorDialog(menu.closeBtn)154?????????????????????self.assertIn('该输入项的值不能为空!',?text,?'?该输入项的值不能为空!')??#?所有密码均为空时断言提示信息155?????????????else:156?????????????????self.assertTrue(menu.isElementExist(menu.errMessage),?'error?fram?not?exist,?please?check?the?test?value?or?file?bug')157?158?if?__name__=='__main__':159?????pass
修改密码页面
?1?''' ??2?Code?description:modify?password?page ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?import?logging??8?import?time??9?from?selenium.webdriver测试数据mon.by?import?By?10?from?selenium.webdriver测试数据mon.action_chains?import?ActionChains?11?from?retail.test_case.page_obj.base_page?import?BasePage,?eleData,?modifyPwData?12?from?retail.test_case.models.log?import?Logger?13? ?14?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO) ?15?class?PrimaryMenu(BasePage): ?16? ?17?????"""密码数据""" ?18?????pwdList?=?\?19?????????[[modifyPwData.readExcel(1,?0),?modifyPwData.readExcel(1,?1),?modifyPwData.readExcel(1,?2)], ?20??????????[modifyPwData.readExcel(2,?0),?modifyPwData.readExcel(2,?1),?modifyPwData.readExcel(2,?2)], ?21??????????[modifyPwData.readExcel(3,?0),?modifyPwData.readExcel(3,?1),?modifyPwData.readExcel(3,?2)], ?22??????????[modifyPwData.readExcel(4,?0),?modifyPwData.readExcel(4,?1),?modifyPwData.readExcel(4,?2)], ?23??????????[modifyPwData.readExcel(5,?0),?modifyPwData.readExcel(5,?1),?modifyPwData.readExcel(5,?2)]] ?24? ?25?????"""权限管理下拉菜单""" ?26?????menuPersonal?=?(By.LINK_TEXT,?eleData.readExcel(15,?3)) ?27?????menuModifyPwd?=?(By.LINK_TEXT,?eleData.readExcel(16,?3)) ?28? ?29?????"""密码修改""" ?30?????oldPwd?=?(By.ID,?eleData.readExcel(17,?3)) ?31?????newPwd?=?(By.ID,?eleData.readExcel(18,?3)) ?32?????commitPwd?=?(By.ID,?eleData.readExcel(19,?3)) ?33? ?34?????"""错误提示框及确定""" ?35?????errMessage?=?(By.XPATH,?eleData.readExcel(20,?3)) ?36?????closeBtn?=?(By.CSS_SELECTOR,?eleData.readExcel(21,?3)) ?37? ?38?????"""密码说明""" ?39?????readMe?=?(By.ID,?eleData.readExcel(22,?3)) ?40? ?41?????"""保存""" ?42?????saveBtn?=?(By.XPATH,?eleData.readExcel(23,?3)) ?43? ?44?????#???主菜单 ?45?????def?findMenu(self,*menuList): ?46?????????""" ?47? ?48?????????:param?menu_list: ?49?????????:return: ?50?????????""" ?51?????????return?self.findElement(*menuList) ?52? ?53?????#???旧密码输入框 ?54?????def?inputOldPw(self,?oldPwd=''): ?55?????????"""""" ?56?????????try: ?57?????????????self.findElement(*self.oldPwd).clear() ?58?????????????self.findElement(*self.oldPwd).send_keys(oldPwd) ?59?????????except?Exception: ?60?????????????log.logger.exception('input?Pw?[%s]?for?oldPw?[%s]?fail'?%(oldPwd,?self.oldPwd)) ?61?????????????raise ?62?????????else: ?63?????????????log.logger.info('inputing?Pw?[%s]?for?oldPw?[%s]?'?%?(oldPwd,?self.oldPwd)) ?64?????#???新密码输入框 ?65?????def?inputNewPw(self,?newPwd=''): ?66?????????""" ?67? ?68?????????:param?newPwd: ?69?????????:return: ?70?????????""" ?71?????????try: ?72?????????????self.findElement(*self.newPwd).clear() ?73?????????????self.findElement(*self.newPwd).send_keys(newPwd) ?74?????????except?Exception: ?75?????????????log.logger.exception('input?Pw?[%s]?for?newPw?[%s]?fail'?%?(newPwd,?self.newPwd)) ?76?????????????raise ?77?????????else: ?78?????????????log.logger.info('inputing?Pw?[%s]?for?newPw?[%s]?'?%?(newPwd,?self.newPwd)) ?79?????#???确认密码输入框 ?80?????def?inputConfirmPw(self,?confirmPwd=''): ?81?????????""" ?82? ?83?????????:param?confirmPwd: ?84?????????:return: ?85?????????""" ?86?????????try: ?87?????????????self.findElement(*self测试数据mitPwd).clear() ?88?????????????self.findElement(*self测试数据mitPwd).send_keys(confirmPwd) ?89?????????except?Exception: ?90?????????????log.logger.exception('input?Pw?[%s]?for?commitPw?[%s]?fail'?%(confirmPwd,?self测试数据mitPwd)) ?91?????????????raise ?92?????????else: ?93?????????????log.logger.info('inputing?Pw?[%s]?for?commitPw?[%s]?'?%(confirmPwd,?self测试数据mitPwd)) ?94?????#???保存 ?95?????def?saveButton(self): ?96?????????""" ?97? ?98?????????:return: ?99?????????""" 100?????????try: 101?????????????self.driver.implicitly_wait(5) 102?????????????clickbutton?=?self.findElement(*self.saveBtn) 103?????????????time.sleep(1) 104?????????????clickbutton.click() 105?????????except?Exception: 106?????????????log.logger.exception('click?save?button?fail') 107?????????????raise 108?????????else: 109?????????????log.logger.info('clciking?the?button') 110? 111?????#???修改密码功能菜单 112?????def?modifyPwMenu(self): 113?????????"""114?115?????????:return:116?????????""" 117?????????try: 118?????????????self.findElement(*self.menuList[0]).click() 119?????????????self.findElement(*self.menuPersonal).click() 120?????????????self.findElement(*self.menuModifyPwd).click() 121?????????except?Exception: 122?????????????log.logger.exception('not?found?menu?[%s]-[%s]-[%s]'?%(self.menuList[0],?self.menuPersonal,?self.menuModifyPwd)) 123?????????????raise 124?????????else: 125?????????????log.logger.info('finding?menu?[%s]-[%s]-[%s]'?%(self.menuList[0],?self.menuPersonal,?self.menuModifyPwd)) 126?????????????self.driver.implicitly_wait(2) 127? 128?????#???修改密码 129?????def?modifyPw(self,?list): 130?????????"""131?132?????????:param?list:133?????????:return:134?????????""" 135?????????try: 136?????????????self.inputOldPw(list[0]) 137?????????????self.inputNewPw(list[1]) 138?????????????self.inputConfirmPw(list[2]) 139?????????????self.saveButton() 140?????????except?Exception: 141?????????????log.logger.exception('input?oldpw/newpw/commitpw?[%s]/[%s]/[%s]?fail'?%(list[0],?list[1],?list[2])) 142?????????????raise 143?????????else: 144?????????????log.logger.info('modifing?pw?[%s]/[%s]/[%s]'?%(list[0],?list[1],?list[2])) 145? 146?????#???错误提示框 147?????def?errorDialog(self,?commit_btn?=?(By.ID,'unieap_form_Button_1_unieap_input')): 148?????????"""149?????????:type?commit_btn:?元祖150?????????"""151?152?????????try:153?????????????messages_frame?=?self.findElement(*self.errMessage)154?????????????text?=?messages_frame.text155?????????????element?=?self.findElement(*commit_btn)156?????????????time.sleep(2)157?????????????action?=?ActionChains(self.driver)158?????????????action.move_to_element(element).perform()159?????????????time.sleep(2)160?????????????element.click()161?????????????action.reset_actions()?#?释放鼠标162?????????except?Exception:163?????????????log.logger.exception('close?errMsgFram?[%s]?or?get?text?[%s]fail'?%(self.errMessage))164?????????????raise165?????????else:166?????????????log.logger.info('close?errMsgFram?[%s]?and?get?text?[%s]?success'?%(self.errMessage,?text))167?????????????return?text168?169?????#?关闭提示框170?????def?closeErrMsg(self,?element):171?????????try:172?????????????ele?=?self.findElement(*element)173?????????????action?=?ActionChains(self.driver)174?????????????action.move_to_element(ele).perform()175?????????????time.sleep(2)176?????????????ele.click()177?????????????action.reset_actions()178?????????except?Exception:179?????????????log.logger.exception('close?the?err?msg?ifram?fail',?exc_info=True)180?????????????raise181?????????else:182?????????????log.logger.info('closing?the?err?msg?ifram?success!')183?184?if?__name__?==?'__main__':185?????pass
修改密码测试用例
?1?''' ??2?Code?description:权限管理/个人设置/密码修改?testcase ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?import?time??8?from?retail.test_case.models.myunit?import?MyunitTest??9?from?retail.test_case.page_obj.modifypw_page?import?PrimaryMenu?10?from?retail.test_case.models.strhandle?import?strhandle?11? ?12?class?ModifyPw_TC(MyunitTest): ?13? ?14?????"""权限管理/个人设置/密码修改模块测试用例""" ?15? ?16?????def?test_menu_is_display(self): ?17?????????"""主菜单校验""" ?18?????????self.login.loginFunc() ?19?????????menu?=?PrimaryMenu(self.driver) ?20?????????time.sleep(4) ?21?????????num?=?0 ?22?????????for?menu_item?in?menu.menuList:?#?循环遍历并断言菜单是否正确 ?23?????????????self.assertEqual(menu.menuList[num][1],(menu.findMenu(*menu_item).text),'菜单不存在') ?24?????????????num=num+1 ?25? ?26?????def?test_modify_password_len(self): ?27?????????"""旧密码非空,新密码长度小于4位,确认密码非空,修改密码失败,弹窗提示""" ?28?????????self.login.loginFunc() ?29?????????menu?=?PrimaryMenu(self.driver) ?30?????????menu.modifyPwMenu()?#?查找修改密码页面 ?31?????????menu.modifyPw(menu.pwdList[0])?#?修改密码 ?32?????????text?=?menu.errorDialog(menu.closeBtn) ?33?????????self.assertIn('密码长度至少?4?位!',?text,?'提示信息错误')?#?密码长度不满足时断言提示信息 ?34? ?35?????def?test_modify_password_strebgth(self): ?36?????????"""旧密码非空,新密码长度大于4且强度不够,确认密码非空,修改密码失败,弹窗提示""" ?37?????????self.login.loginFunc() ?38?????????menu?=?PrimaryMenu(self.driver) ?39?????????menu.modifyPwMenu()?#?查找修改密码页面 ?40?????????menu.modifyPw(menu.pwdList[1])?#?修改密码 ?41?????????text?=?menu.errorDialog(menu.closeBtn) ?42?????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')?#?密码强度不满足时断言提示信息 ?43? ?44?????def?test_modify_password_incorrect(self): ?45?????????"""旧密码不正确非空,新密码等于确认密码且满足条件,修改密码失败,弹窗提示""" ?46?????????self.login.loginFunc() ?47?????????menu?=?PrimaryMenu(self.driver) ?48?????????menu.modifyPwMenu()?#?查找修改密码页面 ?49?????????menu.modifyPw(menu.pwdList[2])?#?修改密码 ?50?????????text?=?menu.errorDialog(menu.closeBtn) ?51?????????self.assertIn('旧密码输入错误!',?text,?'旧密码输入错误!')?#?新密码和确认码不同时断言提示信息 ?52? ?53?????def?test_modify_password_difference(self): ?54?????????"""旧密码非空,新密码不等于确认密码且新密码满足条件,修改密码失败,弹窗提示""" ?55?????????self.login.loginFunc() ?56?????????menu?=?PrimaryMenu(self.driver) ?57?????????menu.modifyPwMenu()?#?查找修改密码页面 ?58?????????menu.modifyPw(menu.pwdList[3])?#?修改密码 ?59?????????text?=?menu.errorDialog(menu.closeBtn) ?60?????????self.assertIn('两次输入的新密码不同!',?text,?'两次输入的新密码不同!')?#?新密码和确认码不同时断言提示信息 ?61? ?62?????def?test_modify_password_all_blank(self): ?63?????????"""旧密码,新密码,确认密码任意为空,修改密码失败,弹窗提示""" ?64?????????self.login.loginFunc() ?65?????????menu?=?PrimaryMenu(self.driver) ?66?????????menu.modifyPwMenu()?#?查找修改密码页面 ?67?????????menu.modifyPw(menu.pwdList[4])?#?修改密码 ?68?????????text?=?menu.errorDialog(menu.closeBtn) ?69?????????self.assertIn('该输入项的值不能为空!',?text,?'?该输入项的值不能为空!')?#?所有密码均为空时断言提示信息 ?70? ?71?????def?test_modify_password(self): ?72?????????"""循环校验提示信息""" ?73?????????self.login.loginFunc() ?74?????????menu?=?PrimaryMenu(self.driver) ?75?????????menu.modifyPwMenu()?#?查找修改密码页面 ?76?????????error_list?=?[] ?77?????????for?list?in?range(len(menu.pwdList)): ?78?????????????menu.modifyPw(menu.pwdList[list]) ?79?????????????if?menu.isElementExist(menu.errMessage): ?80?????????????????text?=?menu.errorDialog(menu.closeBtn)?#?这里只判断是否有提示框弹出,如有说明修改失败,没有或者其他提示框默认为修改成功 ?81?????????????????error_list.append(text) ?82?????????????else: ?83?????????????????self.assertTrue(menu.isElementExist(*menu.errMessage),?'error?fram?not?exist,?please?open?bug') ?84?????????self.assertEqual('密码长度至少?4?位!',error_list[0],'log?infomation?error!') ?85?????????self.assertEqual('密码强度不够,请重新输入密码!',?error_list[1],?'log?infomation?error!') ?86?????????self.assertEqual('旧密码输入错误!',?error_list[2],?'log?infomation?error!') ?87?????????self.assertEqual('两次输入的新密码不同!',?error_list[3],?'log?infomation?error!') ?88?????????self.assertEqual('该输入项的值不能为空!',?error_list[4],?'log?infomation?error!') ?89? ?90?????def?test_modifypw(self): ?91?????????"""循环测试修改密码功能""" ?92?????????self.login.loginFunc()#?登录 ?93?????????menu?=?PrimaryMenu(self.driver) ?94?????????menu.modifyPwMenu()??#?查找修改密码页面 ?95?????????for?item?in?menu.pwdList: ?96?????????????menu.modifyPw(item) ?97?????????????if?menu.isElementExist(menu.errMessage):??#?如果存在提示框?再断言提示信息是否正确 ?98?????????????????if?item[0]?!=?''?and?len(item[1])?<?4??and?item[2]?!='':?#?新密码长度校验 ?99?????????????????????text?=?menu.errorDialog(menu.closeBtn)100?????????????????????try:101?????????????????????????self.assertEqual('密码长度至少?4?位!',text,'the?message?incorrect!')102?????????????????????except?Exception:103?????????????????????????menu.saveScreenShot('fail_密码长度.png')104?????????????????????????raise105?????????????????elif?item[0]?!=?''?and?len(item[1])?>=?4?and?item[2]?!='':?#?新密码强度校验?['a',?'qwert',?'qwert'],106?????????????????????lowercase,?uppercase,?number,?other=strhandle(item[1])107?????????????????????if?lowercase?>?0?and?uppercase?>?0?and?number?==?0?and?other?==?0:?#?小写?大写108?????????????????????????text?=?menu.errorDialog(menu.closeBtn)109?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')110?????????????????????elif?uppercase?>?0?and?other?>?0?and?number?==?0?and?lowercase?==?0:?#?大写?特殊字符111?????????????????????????text?=?menu.errorDialog(menu.closeBtn)112?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')113?????????????????????elif?lowercase?>0?and?other?>?0?and?number?==?0?and?uppercase?==?0:?#?小写?特殊字符114?????????????????????????text?=?menu.errorDialog(menu.closeBtn)115?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')116?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?>?0?and?uppercase?>?0:??#?大写?数字117?????????????????????????text?=?menu.errorDialog(menu.closeBtn)118?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')119?????????????????????elif?lowercase?>?0?and?other?==?0?and?number?>?0?and?uppercase?==?0:??#?小写?数字120?????????????????????????text?=?menu.errorDialog(menu.closeBtn)121?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')122?????????????????????elif?lowercase?>?0?and?other?==?0?and?number?==?0?and?uppercase?==?0:123?????????????????????????text?=?menu.errorDialog(menu.closeBtn)124?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')125?????????????????????elif?lowercase?==?0?and?other?>?0?and?number?==?0?and?uppercase?==?0:126?????????????????????????text?=?menu.errorDialog(menu.closeBtn)127?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')128?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?>?0?and?uppercase?==?0:129?????????????????????????text?=?menu.errorDialog(menu.closeBtn)130?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')131?????????????????????elif?lowercase?==?0?and?other?==?0?and?number?==?0?and?uppercase?>?0:132?????????????????????????text?=?menu.errorDialog(menu.closeBtn)133?????????????????????????self.assertIn('密码强度不够,请重新输入密码!',?text,?'?密码强度不够,请重新输入密码!')134?????????????????????elif?item[0]?!=?'qwert1234!@#'?and?item[1]?==?item[2]:#?>=?4135?????????????????????????lowercase,?uppercase,?number,?other?=?strhandle(item[1])136?????????????????????????if?(lowercase?>?0?and?uppercase?>?0?and?number?>?0)?or?(137?????????????????????????????????????lowercase?>?0?and?uppercase?>?0?and?other?>?0)?or?(138?????????????????????????????????????number?>?0?and?other?>?0?and?lowercase?>?0)?or?(139?????????????????????????????????????number?>?0?and?other?>?0?and?uppercase?>?0):140?????????????????????????????text?=?menu.errorDialog(menu.closeBtn)141?????????????????????????????self.assertIn('旧密码输入错误!',?text,?'旧密码输入错误!')??#?新密码和确认码不同时断言提示信息142?????????????????????elif?item[0]?==?'qwert1234!@#$'?and?item[1]?!=?item[2]:#?and?item[1]?>=?4:143?????????????????????????lowercase,?uppercase,?number,?other?=?strhandle(item[1])144?????????????????????????if?(lowercase?>?0?and?uppercase?>?0?and?number?>?0)?or?(145?????????????????????????????????????????????lowercase?>?0?and?uppercase?>?0?and?other?>?0)?or?(146?????????????????????????????????????????????number?>?0?and?other?>?0?and?lowercase?>?0)?or?(147?????????????????????????????????????????????number?>?0?and?other?>?0?and?uppercase?>?0):148?????????????????????????????text?=?menu.errorDialog(menu.closeBtn)149?????????????????????????????self.assertIn('两次输入的新密码不同!',?text,?'?两次输入的新密码不同!')150?????????????????????else:151?????????????????????????print('test?value?incorrect!?please?check?it')152?????????????????elif?item[0]?==?''?or?item[1]?==''?or?item[2]?=='':?#?输入项为空校验153?????????????????????text?=?menu.errorDialog(menu.closeBtn)154?????????????????????self.assertIn('该输入项的值不能为空!',?text,?'?该输入项的值不能为空!')??#?所有密码均为空时断言提示信息155?????????????else:156?????????????????self.assertTrue(menu.isElementExist(menu.errMessage),?'error?fram?not?exist,?please?check?the?test?value?or?file?bug')157?158?if?__name__=='__main__':159?????pass
会员档案查询页面
?1?''' ??2?Code?description:会员档案查询?page ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?from?retail.test_case.page_obj.base_page?import?queryData??8?import?time??9?from?selenium.webdriver测试数据mon.by?import?By?10?import?logging?11?import?sys?12?from?retail.test_case.page_obj.modifypw_page?import?PrimaryMenu,?eleData?13?from?retail.test_case.models.log?import?Logger?14? ?15?log?=?Logger(__name__,?CmdLevel=logging.INFO,?FileLevel=logging.INFO) ?16? ?17? ?18?class?MemberQuery(PrimaryMenu): ?19?????""" ?20? ?21?????""" ?22?????#?测试数据:?会员编码,?会员姓名,?手机号码 ?23?????valuesList?=?[queryData.readExcel(1,?1),?int(queryData.readExcel(2,?1)),?queryData.readExcel(3,?1)] ?24? ?25?????#?会员档案下拉菜单 ?26?????memberMenu?=?(By.LINK_TEXT,?eleData.readExcel(24,?3)) ?27? ?28?????#?会员查询页面的3个列表(查询条件,会员信息明细,积分变化明细) ?29?????uiElements?=?(By.XPATH,?eleData.readExcel(25,?3)) ?30?????#?会员类型 ?31?????memberTypeBtn?=?(By.ID,?eleData.readExcel(26,?3)) ?32?????#?会员类型下拉选项 ?33?????memberTypeNum?=?[(By.XPATH,?eleData.readExcel(27,?3)),?(By.XPATH,?eleData.readExcel(28,?3)), ?34??????????????????????(By.XPATH,?eleData.readExcel(29,?3))] ?35? ?36?????#?会员级别 ?37?????memberLevelBtn?=?(By.ID,?eleData.readExcel(30,?3)) ?38?????#?会员级别下拉选项 ?39?????memberLevelNum?=?[(By.XPATH,?eleData.readExcel(31,?3)),?(By.XPATH,?eleData.readExcel(32,?3)), ?40???????????????????????(By.XPATH,?eleData.readExcel(33,?3)),?(By.XPATH,?eleData.readExcel(34,?3))] ?41? ?42?????#?会员编号,会员姓名,手机号码 ?43?????memberNumNamePhone?=?[(By.ID,?eleData.readExcel(35,?3)),?(By.ID,?eleData.readExcel(36,?3)), ?44???????????????????????????(By.ID,?eleData.readExcel(37,?3))] ?45?????#?查询异常提示框 ?46?????qFailerr?=?(By.XPATH,?eleData.readExcel(38,?3))??#?查询失败弹出的错误提示框 ?47? ?48?????confirmBtn?=?(By.XPATH,?eleData.readExcel(39,?3)) ?49? ?50?????#?查询与重置 ?51?????queryResetBtn?=?[(By.ID,?eleData.readExcel(40,?3)),?(By.ID,?eleData.readExcel(41,?3))] ?52? ?53?????#?点击会员类型 ?54?????def?selectMemberType(self): ?55?????????""" ?56? ?57?????????:return: ?58?????????""" ?59?????????try: ?60?????????????self.findElement(*self.memberTypeBtn).click() ?61?????????????self.driver.implicitly_wait(2) ?62?????????except?Exception: ?63?????????????log.logger.exception('selecting?member?type?fail?') ?64?????????????raise ?65?????????else: ?66?????????????log.logger.info('---selecting?member?type?') ?67? ?68?????#?点击会员级别 ?69?????def?selectMemberLevel(self): ?70?????????""" ?71? ?72?????????:return: ?73?????????""" ?74?????????try: ?75?????????????self.findElement(*self.memberLevelBtn).click() ?76?????????????self.driver.implicitly_wait(2) ?77?????????except?Exception: ?78?????????????log.logger.exception('selecting?member?level?fail?') ?79?????????????raise ?80?????????else: ?81?????????????log.logger.info('---selecting?member?level?') ?82? ?83?????#?查找会员档案查询菜单 ?84?????def?memberQueryMenu(self): ?85?????????""" ?86? ?87?????????:return: ?88?????????""" ?89?????????self.findElement(*self.menuList[1]).click() ?90?????????self.findElement(*self.memberMenu).click() ?91?????????time.sleep(4) ?92?????????log.logger.info('page?[%s]?:found?the?menu?[%s]?and?[%s]'?%?( ?93?????????????sys._getframe().f_code.co_name,?self.menuList[1],?self.memberMenu)) ?94? ?95?????#?会员类型/会员级别下拉选项 ?96?????def?memberTypeLevelOption(self,?*xpathList): ?97?????????""" ?98? ?99?????????:param?xpath_list: 100?????????:return: 101?????????"""102?????????try:103?????????????member_type_level?=?self.findElement(*xpathList)104?????????????text?=?member_type_level.text105?????????except?Exception:106?????????????log.logger.exception('get?element?member?type/level?item?text?fail',?exc_info=True)107?????????????raise108?????????else:109?????????????log.logger.info('get?element?[%s]?member?type/level?item?text?[%s]?fail'?%?(xpathList,?text))110?????????????return?text,?member_type_level111?112?????#?点击查询和重置按钮113?????def?cQueryResetBtn(self,?*queryResetBtn):114?????????""" 115? 116?????????:param?query_reset_btn: 117?????????:return: 118?????????"""119?????????try:120?????????????self.findElement(*queryResetBtn).click()121?????????except?Exception:122?????????????log.logger.exception('query/reset?button?not?click',?exc_info=True)123?????????????raise124?????????else:125?????????????log.logger.info('clicking?query/reset?button?')126?127?????#?输入查询条件128?????def?iQueryCondition(self,?numNamePhone,?value):129?????????""" 130? 131?????????:param?numNamePhone: 132?????????:param?value: 133?????????:return: 134?????????"""135?????????number_name_phone?=?self.findElement(*numNamePhone)136?????????try:137?????????????number_name_phone.clear()138?????????????number_name_phone.send_keys(value)139?????????except?Exception:140?????????????log.logger.exception('input?value?error',?exc_info=True)141?????????????raise142?????????else:143?????????????log.logger.info('[%s]?is?typing?value?[%s]?'?%?(numNamePhone,?value))144?145?????#?获取条件输入框的内容146?????def?getInputboxValue(self,?*memberNumNamePhone):147?????????""" 148? 149?????????:param?memberNumNamePhone: 150?????????:return: 151?????????"""152?????????try:153?????????????get_member_number_name_phone_text?=?self.findElement(*memberNumNamePhone)154?????????????text?=?get_member_number_name_phone_text.get_attribute('value')155?????????except?Exception:156?????????????log.logger.exception('get?value?of?element?fail',?exc_info=True)157?????????????raise158?????????else:159?????????????log.logger.info('get?value?[%s]?of?element?[%s]?success'?%?(memberNumNamePhone,?text))160?????????????return?text161?162?????#?重置功能的重写163?????def?reset(self):164?????????""" 165? 166?????????:return: 167?????????"""168?????????try:169?????????????self.findElement(*self.memberNumNamePhone[0]).clear()170?????????????self.findElement(*self.memberNumNamePhone[1]).clear()171?????????????self.findElement(*self.memberNumNamePhone[2]).clear()172?????????except?Exception:173?????????????log.logger.exception('reset?fail',?exc_info=True)174?????????????raise175?????????else:176?????????????log.logger.info('reset?[%s]-[%s]-[%s]?success'?%?(177?????????????????self.memberNumNamePhone[0],?self.memberNumNamePhone[1],?self.memberNumNamePhone[2]))178?179?180?if?__name__?==?'__main__':181?????pass
会员档案查询用例
?1?''' ??2?Code?description:会员档案查询?testcase ??3?Create?time: ??4?Developer: ??5?''' ??6? ??7?import?random??8?import?time??9?from?selenium.webdriver测试数据mon.action_chains?import?ActionChains?10?from?retail.test_case.models.myunit?import?MyunitTest?11?from?retail.test_case.page_obj.memeberquery_page?import?MemberQuery?12? ?13?class?MemberQuery_TC(MyunitTest): ?14? ?15?????"""会员档案查询模块测试用例""" ?16? ?17?????#@unittest.skip('dont?run?the?test?case') ?18?????def?test_member_check_ui(self): ?19?????????"""会员档案查询页面显示正确""" ?20?????????menu?=?MemberQuery(self.driver)?#?实例化会员查询页面 ?21?????????self.login.loginFunc() ?22?????????menu.memberQueryMenu()??#?查找会员档案查询菜单 ?23?????????elements?=?menu.findElements(*menu.uiElements) ?24?????????ele_list?=?[] ?25?????????for?eles?in?elements: ?26?????????????if?eles.text?!='': ?27?????????????????ele_list.append(eles.text) ?28?????????self.assertEqual('查询条件',?ele_list[0]) ?29?????????self.assertEqual('会员信息明细',?ele_list[1]) ?30?????????self.assertEqual('积分变化明细',?ele_list[2]) ?31? ?32? ?33?????def?test_member_type(self): ?34?????????"""会员类型下拉列表项正确""" ?35?????????menu?=?MemberQuery(self.driver)??#?实例化会员查询页面 ?36?????????self.login.loginFunc()#?登录 ?37?????????menu.memberQueryMenu()??#?查找会员档案查询菜单 ?38?????????menu.selectMemberType() ?39?????????list_type?=?[] ?40?????????for?member_type?in?menu.memberTypeNum:??#?循环遍历会员类型下拉列表 ?41?????????????text,?memeber_type_level?=?menu.memberTypeLevelOption(*member_type) ?42?????????????list_type.append(text) ?43?????????self.assertEqual('个人会员',?list_type[0]) ?44?????????self.assertEqual('企业会员',?list_type[1]) ?45?????????self.assertEqual('其它',?list_type[2]) ?46? ?47?????def?test_member_level(self): ?48?????????"""会员级别下拉列表项正确""" ?49?????????menu?=?MemberQuery(self.driver)??#?实例化会员查询页面 ?50?????????self.login.loginFunc()??#?登录 ?51?????????menu.memberQueryMenu()?#?查找会员档案查询菜单 ?52?????????menu.selectMemberLevel() ?53?????????list_level?=?[] ?54?????????for?member_level?in?menu.memberLevelNum:?#?循环遍历会员级别下拉列表 ?55?????????????text,?memeber_type_level?=?menu.memberTypeLevelOption(*member_level) ?56?????????????list_level.append(text) ?57?????????self.assertEqual('标准会员',?list_level[0]) ?58?????????self.assertEqual('黄金会员',?list_level[1]) ?59?????????self.assertEqual('铂金会员',?list_level[2]) ?60?????????self.assertEqual('钻石会员',?list_level[3]) ?61? ?62?????#?............................................................................................# ?63?????#?对页面的条件进行组合后单击查询按钮。这是一个大数据量的操作,因此不对返回数据做校验,只看本次组合的条件在页面是否可正常使用。 ?64?????#?如果查询失败,系统会有弹出框提示失败原因,这个应该很好理解的。 ?65?????#?我们抓取这个框是否在一定的时间内出现,如果出现则判定本次查询失败,记录用例结果。 ?66?????#?............................................................................................# ?67? ?68?????def?test_member_query_failed(self): ?69?????????"""默认条件查询成功""" ?70?????????menu?=?MemberQuery(self.driver)??#?实例化会员档案查询页面 ?71?????????self.login.loginFunc()??#?登录 ?72?????????menu.memberQueryMenu()??#?找到会员查询页面 ?73?????????menu.cQueryResetBtn(*menu.queryResetBtn[0])??#?点击[查询] ?74?????????flag?=?menu.isElementExist(menu.qFailerr)??#?断言错误提示框 ?75?????????self.assertFalse(flag,?msg='查询失败')??#?flag为false时,断言成功,?无提示框,说明默认查询成功 ?76? ?77?????def?test_alone_query_1(self): ?78?????????"""按会员编号,会员姓名,手机号码单一条件查询""" ?79?????????menu?=?MemberQuery(self.driver)??#?实例化会员档案查询页面 ?80?????????self.login.loginFunc()??#?登录 ?81?????????menu.memberQueryMenu()??#?找到会员档案查询页面 ?82?????????for?num_name_phone?in?menu.memberNumNamePhone: ?83?????????????menu.reset()??#?重置 ?84?????????????for?value?in?menu.valuesList: ?85?????????????????menu.iQueryCondition(num_name_phone,value) ?86?????????????????menu.cQueryResetBtn(*menu.queryResetBtn[0])?#?点击[查询] ?87?????????????????time.sleep(3) ?88?????????????????flag?=?menu.isElementExist(menu.qFailerr) ?89?????????????????if?flag: ?90?????????????????????self.assertTrue(flag,?'提示框不存在,查询成功') ?91?????????????????????menu.accept(*menu.confirmBtn) ?92?????????????????else: ?93?????????????????????self.assertFalse(flag,?'提示框存在,查询失败') ?94? ?95?????def?test_alone_query_2(self): ?96?????????"""按会员类型单一查询""" ?97?????????menu?=?MemberQuery(self.driver)?#?实例化会员档案查询页面 ?98?????????self.login.loginFunc()?#?登录 ?99?????????menu.memberQueryMenu()?#?找到会员档案查询页面100?????????for?me_type?in?menu.memberTypeNum:101?????????????menu.selectMemberType()?#?点击[会员类型]102?????????????text,?member_type_level?=?menu.memberTypeLevelOption(*me_type)?#?遍历每一个下拉选项103?????????????ActionChains(self.driver).move_to_element(member_type_level).perform()?#?鼠标移动到下拉选项上104?????????????member_type_level.click()?#?选中下拉选项105?????????????menu.cQueryResetBtn(*menu.queryResetBtn[0])??#?点击[查询]106?????????????time.sleep(3)107?????????????flag?=?menu.isElementExist(menu.qFailerr)?#?判断查询成功108?????????????self.assertFalse(flag,?'提示框存在,查询失败')109?110?????def?test_alone_query_3(self):111?????????"""按会员级别单一查询"""112?????????menu?=?MemberQuery(self.driver)??#?实例化会员档案查询页面113?????????self.login.loginFunc()??#?登录114?????????menu.memberQueryMenu()??#?找到会员档案查询页面115?????????for?me_level?in?menu.memberLevelNum:116?????????????menu.selectMemberLevel()?#?点击[会员级别]117?????????????text,?member_level?=?menu.memberTypeLevelOption(*me_level)??#?遍历每一个下拉选项118?????????????ActionChains(self.driver).move_to_element(member_level).perform()??#?鼠标移动到下拉选项上119?????????????member_level.click()??#?选中下拉选项120?????????????menu.cQueryResetBtn(*menu.queryResetBtn[0])??#?点击[查询]121?????????????time.sleep(3)122?????????????flag?=?menu.isElementExist(menu.qFailerr)??#?判断查询成功123?????????????self.assertFalse(flag,?'提示框存在,查询成功')124?125?????def?test_reset(self):126?????????"""重置功能校验"""127?????????menu?=?MemberQuery(self.driver)?#?实例化会员档案查询页面128?????????self.login.loginFunc()?#?登录129?????????menu.memberQueryMenu()?#?找到会员档案查询页面130?????????#?3个条件输入框随机输入数据131?????????for?inputBox?in?menu.memberNumNamePhone:132?????????????menu.iQueryCondition(inputBox,random.choice(menu.valuesList))133?????????#会员类型下拉列表中随机选择一项134?????????menu.selectMemberType()135?????????text_type,?member_type?=?menu.memberTypeLevelOption(*(random.choice(menu.memberTypeNum)))136?????????ActionChains(self.driver).move_to_element(member_type).perform()??#?鼠标移动到下拉选项上137?????????member_type.click()138?139?????????#?menu.selectMemberLevel()140?????????#?text_level,?member_level?=?menu.memberTypeLevelOption(*(random.choice(menu.member_level_num)))141?????????#?#ActionChains(self.driver).move_to_element(member_level).perform()142?????????#?member_level.click()143?144?145?????????#?点击【重置】146?????????menu.cQueryResetBtn(*menu.queryResetBtn[1])147?????????#?获取前3个输入框的内容148?????????text_list?=?[]149?????????for?input_box?in?menu.memberNumNamePhone:150?????????????text?=?menu.getInputboxValue(*input_box)151?????????????text_list.append(text)152?????????#?获取会员类型153?????????type_type_text?=?menu.getInputboxValue(*menu.memberTypeBtn)154?????????text_list.append(type_type_text)155?156?????????#?type_level_text?=?menu.getInputboxValue(*menu.member_level_btn)157?????????#?text_list.append(type_level_text)158?159?????????#?断言每一个条件框是否为空?为空就通过160?????????for?get_attr?in?text_list:161?????????????self.assertEqual('',get_attr)162?163?if?__name__?==?'__main__':164?????pass
执行测试用例
?1?#!?user/bin/python ?2? ?3?'''??????????????????????????????????????????????????????????? ?4?Code?description:auto?run?test?case ?5?Create?time: ?6?Developer: ?7?''' ?8? ?9?import?unittest10?import?time11?from?BeautifulReport?import?BeautifulReport12?from?retail.config.conf?import?*13?from?retail.test_case.models.testreport?import?testreport14?15?#?TODO?:?will?be?use?jenkins?continuous?intergration?teachnology?manage?the?auto?project16?if?__name__?==?'__main__':17?18?????#?currTime?=?time.strftime('%Y-%m-%d?%H_%M_%S')19?????#?filename?=?currTime?+?'.html'20?????#?#?第一种测试报告21?????#?test_suite?=?unittest.defaultTestLoader.discover(tcPath,?pattern='*Tc.py')22?????#?result?=?BeautifulReport(test_suite)23?????#?result.report(filename=?filename,?description='test?report',?log_path=reportPath)24?25?????#?#?第二种测试报告26?????runner,?fp,?fileName?=?testreport()27?????test_suite?=?unittest.defaultTestLoader.discover(tcPath,?pattern='LoginTc.py')28?????runner.run(test_suite)29?????fp.close()
from BeautifulReport import BeautifulReport 这个报告需要自己网上找一下(很多类似的测试报告源码,不一定非使用本案例中的报告模板)
报告展示
有付出才有汇报,接下来看下们的成果
1.截图:
创建规则失败时截图
登录成功截图
用例执行日志:
2018-10-12?15:39:17,916?-?doconfIni.py:[36]?-?[INFO]?-?read?excel?value?[D:\Petrochina_Retail_Test_Project]?successed!? 2018-10-12?15:39:19,119?-?testreport.py:[35]?-?[INFO]?-?successed?to?generate?test?report?[D:\Petrochina_Retail_Test_Project\retail\report\TestReport\report2018-10-12?15_39_19.html]2018-10-12?15:39:21,469?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:39:21,481?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:39:21,493?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:39:21,504?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:39:21,505?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[权限管理]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,538?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[会员档案]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,538?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分消费查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,539?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[功能演示]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,539?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[待办工作]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,539?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[报表]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,539?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,540?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动申请]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,540?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[username]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,540?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[password]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,541?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[loginSubmitButton]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,541?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[checkcookie]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,541?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[inputTdRight]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,541?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[logout]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,541?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmlv]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rml]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,542?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,543?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,543?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,543?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[quert1234]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,543?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:21,543?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:39:41,168?-?driver.py:[27]?-?[INFO]?-?fireFoxDriver:found?the?Firefox?driver?[<selenium.webdriver.firefox.webdriver.WebDriver?(session="d446da40-ae28-4fff-bfd3-2c9045a5c4cc")>]?successed?!2018-10-12?15:39:44,832?-?myunit.py:[25]?-?[INFO]?-?opened?the?browser?successed!2018-10-12?15:39:45,541?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:39:45,541?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:39:45,542?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:39:45,594?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:39:45,719?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:39:47,798?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:39:47,866?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:39:49,923?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:39:51,173?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:39:53,227?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'logout')2018-10-12?15:39:53,624?-?login_page.py:[95]?-?[INFO]?-?quit2018-10-12?15:39:53,674?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:39:53,726?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?15:39:55,785?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:39:55,846?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:39:57,906?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:39:58,103?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:00,143?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:00,189?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:00,213?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:00,248?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:40:02,291?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:02,339?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:40:04,364?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:04,439?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:06,484?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:40:06,525?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:06,565?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?15:40:08,611?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:08,659?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@]2018-10-12?15:40:10,708?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:10,878?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:12,958?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:12,982?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:13,006?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:13,048?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:40:15,116?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:15,148?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:40:17,200?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:17,248?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:19,313?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?15:40:19,351?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:19,392?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:40:21,445?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:21,506?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?15:40:23,555?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:23,718?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:25,810?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:25,847?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:25,872?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:25,906?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:40:27,968?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:28,009?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:40:30,044?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:30,079?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:32,140?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:40:32,140?-?LoginTc.py:[108]?-?[INFO]?-?test_login->run?completed!?please?check?the?test?report2018-10-12?15:40:32,599?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:32,838?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:32,838?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:32,838?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:32,881?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE7B8>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:32,923?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:40:32,947?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE7B8>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:32,990?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?15:40:33,012?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE7B8>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:33,204?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:33,238?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDE7B8>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:33,265?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:33,265?-?LoginTc.py:[49]?-?[INFO]?-?test_login_failed_incorrect_password->run?completed!?please?check?the?test?report2018-10-12?15:40:33,714?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:33,945?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:33,945?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:33,946?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:33,976?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEEF0>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:34,020?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?15:40:34,044?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEEF0>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:34,084?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:40:34,106?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEEF0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:34,270?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:34,307?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEEF0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:34,336?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:34,336?-?LoginTc.py:[40]?-?[INFO]?-?test_login_failed_incorrect_username->run?completed!?please?check?the?test?report2018-10-12?15:40:34,872?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:35,114?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:35,114?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:35,114?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:35,146?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE48>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:35,187?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:40:35,210?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE48>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:35,240?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:40:35,261?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE48>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:35,288?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:35,325?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?15:40:35,325?-?LoginTc.py:[65]?-?[INFO]?-?test_login_failed_password_blank->run?completed!?please?check?the?test?report2018-10-12?15:40:35,756?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:35,988?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:35,988?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:35,988?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:36,017?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEFD0>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:36,062?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?15:40:36,095?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEFD0>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:36,130?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[rmln]2018-10-12?15:40:36,156?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEFD0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:36,336?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:36,370?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEFD0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:40:36,397?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:40:36,397?-?LoginTc.py:[73]?-?[INFO]?-?test_login_failed_unpw_incorrect->run?completed!?please?check?the?test?report2018-10-12?15:40:36,869?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:37,103?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:37,103?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:37,103?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:37,142?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19D9C6A0>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:37,180?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:40:37,211?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19D9C6A0>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:37,245?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:40:37,268?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19D9C6A0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:37,297?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:37,328?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:40:37,328?-?LoginTc.py:[57]?-?[INFO]?-?test_login_failed_username_password_blank->run?completed!?please?check?the?test?report2018-10-12?15:40:37,789?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:38,034?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:40:38,035?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:40:38,035?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:40:38,070?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE10>?had?already?find?the?element?('id',?'username')2018-10-12?15:40:38,113?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:40:38,135?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE10>?had?already?find?the?element?('id',?'password')2018-10-12?15:40:38,170?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:40:38,192?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000022A19CDEE10>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:40:38,718?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:40:38,867?-?base_page.py:[219]?-?[INFO]?-?the?file?[correct_username_password_pass.png]??save?screenshot?successed?under?[D:\Petrochina_Retail_Test_Project\retail\report\image\pass]2018-10-12?15:40:38,867?-?LoginTc.py:[32]?-?[INFO]?-?test_login_success_correct_username_password->run?completed!?please?check?the?test?report2018-10-12?15:40:39,853?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:40:40,741?-?myunit.py:[49]?-?[INFO]?-?quit?the?browser?success!2018-10-12?15:55:32,579?-?doconfIni.py:[36]?-?[INFO]?-?read?excel?value?[D:\Petrochina_Retail_Test_Project]?successed!? 2018-10-12?15:55:32,650?-?testreport.py:[35]?-?[INFO]?-?successed?to?generate?test?report?[D:\Petrochina_Retail_Test_Project\retail\report\TestReport\report2018-10-12?15_55_32.html]2018-10-12?15:55:32,799?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:55:32,809?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:55:32,823?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:55:32,834?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[权限管理]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[会员档案]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分消费查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[功能演示]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[待办工作]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[报表]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,834?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动申请]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[username]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[password]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[loginSubmitButton]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[checkcookie]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[inputTdRight]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[logout]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmlv]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,835?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rml]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[quert1234]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:32,836?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:55:42,284?-?driver.py:[27]?-?[INFO]?-?fireFoxDriver:found?the?Firefox?driver?[<selenium.webdriver.firefox.webdriver.WebDriver?(session="a6069969-6dab-45c0-a732-2c2f0efa4ca1")>]?successed?!2018-10-12?15:55:45,801?-?myunit.py:[25]?-?[INFO]?-?opened?the?browser?successed!2018-10-12?15:55:46,436?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:55:46,436?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:55:46,436?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:55:46,502?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:55:46,553?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:55:48,591?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:55:48,648?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:55:50,720?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:55:51,787?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:55:53,851?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'logout')2018-10-12?15:55:54,136?-?login_page.py:[95]?-?[INFO]?-?quit2018-10-12?15:55:54,192?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:55:54,239?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?15:55:56,295?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:55:56,363?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:55:58,426?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:55:58,615?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:00,651?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:00,681?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:00,708?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:00,741?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:56:02,778?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:02,842?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:56:04,873?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:04,926?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:06,966?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:56:07,003?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:07,054?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?15:56:09,122?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:09,182?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@]2018-10-12?15:56:11,205?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:11,384?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:13,439?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:13,478?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:13,504?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:13,547?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:56:15,585?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:15,639?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:56:17,688?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:17,733?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:19,775?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?15:56:19,814?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:19,866?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:56:21,912?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:21,967?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?15:56:24,019?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:24,229?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:26,258?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:26,286?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:26,309?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:26,346?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:56:28,384?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:28,430?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:56:30,464?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:30,503?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:32,562?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:56:32,563?-?LoginTc.py:[108]?-?[INFO]?-?test_login->run?completed!?please?check?the?test?report2018-10-12?15:56:33,042?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:33,298?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:33,299?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:33,299?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:33,339?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D7B8>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:33,381?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:56:33,405?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D7B8>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:33,448?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?15:56:33,472?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D7B8>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:33,666?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:33,715?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4D7B8>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:33,745?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:33,745?-?LoginTc.py:[49]?-?[INFO]?-?test_login_failed_incorrect_password->run?completed!?please?check?the?test?report2018-10-12?15:56:34,212?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:34,461?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:34,461?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:34,461?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:34,505?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DEF0>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:34,545?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?15:56:34,572?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DEF0>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:34,618?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:56:34,644?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DEF0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:34,826?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:34,873?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DEF0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:34,897?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:34,897?-?LoginTc.py:[40]?-?[INFO]?-?test_login_failed_incorrect_username->run?completed!?please?check?the?test?report2018-10-12?15:56:35,372?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:35,708?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:35,709?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:35,709?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:35,757?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE48>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:35,818?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:56:35,850?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE48>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:35,895?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:56:35,928?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE48>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:35,995?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:36,034?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?15:56:36,034?-?LoginTc.py:[65]?-?[INFO]?-?test_login_failed_password_blank->run?completed!?please?check?the?test?report2018-10-12?15:56:36,566?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:36,817?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:36,818?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:36,818?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:36,878?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DFD0>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:36,920?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?15:56:36,943?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DFD0>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:36,980?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[rmln]2018-10-12?15:56:37,014?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DFD0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:37,212?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:37,266?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DFD0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?15:56:37,293?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?15:56:37,293?-?LoginTc.py:[73]?-?[INFO]?-?test_login_failed_unpw_incorrect->run?completed!?please?check?the?test?report2018-10-12?15:56:37,761?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:38,069?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:38,070?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:38,070?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:38,106?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633D0D6A0>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:38,154?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?15:56:38,179?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633D0D6A0>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:38,217?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?15:56:38,245?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633D0D6A0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:38,299?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:38,332?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?15:56:38,332?-?LoginTc.py:[57]?-?[INFO]?-?test_login_failed_username_password_blank->run?completed!?please?check?the?test?report2018-10-12?15:56:38,856?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:39,117?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?15:56:39,117?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?15:56:39,117?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?15:56:39,161?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE10>?had?already?find?the?element?('id',?'username')2018-10-12?15:56:39,208?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?15:56:39,231?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE10>?had?already?find?the?element?('id',?'password')2018-10-12?15:56:39,283?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?15:56:39,308?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x000001A633C4DE10>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?15:56:40,038?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?15:56:40,125?-?base_page.py:[219]?-?[INFO]?-?the?file?[correct_username_password_pass.png]??save?screenshot?successed?under?[D:\Petrochina_Retail_Test_Project\retail\report\image\pass]2018-10-12?15:56:40,126?-?LoginTc.py:[32]?-?[INFO]?-?test_login_success_correct_username_password->run?completed!?please?check?the?test?report2018-10-12?15:56:41,187?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?15:56:42,002?-?myunit.py:[49]?-?[INFO]?-?quit?the?browser?success!2018-10-12?15:59:49,135?-?doconfIni.py:[36]?-?[INFO]?-?read?excel?value?[D:\Petrochina_Retail_Test_Project]?successed!? 2018-10-12?15:59:49,202?-?testreport.py:[35]?-?[INFO]?-?successed?to?generate?test?report?[D:\Petrochina_Retail_Test_Project\retail\report\TestReport\report2018-10-12?15_59_49.html]2018-10-12?15:59:49,356?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:59:49,366?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:59:49,379?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:59:49,389?-?doexcel.py:[31]?-?[INFO]?-?initing?class?ReadExcel2018-10-12?15:59:49,389?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[权限管理]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,389?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[会员档案]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分消费查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[功能演示]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[待办工作]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[报表]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动查询]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[积分规则/活动申请]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,390?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[username]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[password]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[loginSubmitButton]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[checkcookie]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[inputTdRight]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[logout]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmlv]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,391?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@#]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rml]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[qwert1234!@]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[rmln]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[quert1234]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?15:59:49,392?-?doexcel.py:[46]?-?[INFO]?-?reading?value?[]?from?excel?file?[D:\Petrochina_Retail_Test_Project\retail\data\TestData\elementDate.xlsx]?completed2018-10-12?16:00:00,276?-?driver.py:[27]?-?[INFO]?-?fireFoxDriver:found?the?Firefox?driver?[<selenium.webdriver.firefox.webdriver.WebDriver?(session="0a7f2418-d24d-45c5-893d-5914d64ee0d1")>]?successed?!2018-10-12?16:00:03,791?-?myunit.py:[25]?-?[INFO]?-?opened?the?browser?successed!2018-10-12?16:00:04,323?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:04,323?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:04,323?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:04,368?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:04,426?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:06,504?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:06,570?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?16:00:08,623?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:09,623?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:11,706?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'logout')2018-10-12?16:00:11,943?-?login_page.py:[95]?-?[INFO]?-?quit2018-10-12?16:00:12,002?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:12,049?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?16:00:14,080?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:14,136?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?16:00:16,191?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:16,407?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:18,466?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:18,517?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:18,549?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:18,587?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?16:00:20,658?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:20,736?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?16:00:22,797?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:22,847?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:24,885?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?16:00:24,918?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:24,972?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?16:00:27,029?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:27,107?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@]2018-10-12?16:00:29,135?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:29,302?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:31,367?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:31,395?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:31,420?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:31,466?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:33,497?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:33,534?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?16:00:35,585?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:35,640?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:37,692?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?16:00:37,727?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:37,794?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:39,827?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:39,887?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?16:00:41,983?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:42,178?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:44,234?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:44,277?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:44,311?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:44,350?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?16:00:46,397?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:46,440?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?16:00:48,476?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D828>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:48,512?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:50,555?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?16:00:50,555?-?LoginTc.py:[108]?-?[INFO]?-?test_login->run?completed!?please?check?the?test?report2018-10-12?16:00:51,044?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:51,319?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:51,319?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:51,319?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:51,362?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D7B8>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:51,407?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:51,430?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D7B8>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:51,477?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[quert1234]2018-10-12?16:00:51,500?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D7B8>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:51,693?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:51,742?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06D7B8>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:51,773?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:51,773?-?LoginTc.py:[49]?-?[INFO]?-?test_login_failed_incorrect_password->run?completed!?please?check?the?test?report2018-10-12?16:00:52,193?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:52,405?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:52,406?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:52,406?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:52,444?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DEF0>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:52,487?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmlv]2018-10-12?16:00:52,512?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DEF0>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:52,566?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?16:00:52,594?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DEF0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:52,816?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:52,863?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DEF0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:52,891?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:52,892?-?LoginTc.py:[40]?-?[INFO]?-?test_login_failed_incorrect_username->run?completed!?please?check?the?test?report2018-10-12?16:00:53,344?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:53,579?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:53,580?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:53,580?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:53,620?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE48>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:53,663?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:53,690?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE48>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:53,728?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?16:00:53,757?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE48>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:53,811?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:53,849?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户密码!2018-10-12?16:00:53,849?-?LoginTc.py:[65]?-?[INFO]?-?test_login_failed_password_blank->run?completed!?please?check?the?test?report2018-10-12?16:00:54,283?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:54,590?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:54,590?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:54,590?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:54,637?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DFD0>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:54,678?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rml]2018-10-12?16:00:54,704?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DFD0>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:54,748?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[rmln]2018-10-12?16:00:54,777?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DFD0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:54,994?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:55,047?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DFD0>?had?already?find?the?element?('id',?'inputTdRight')2018-10-12?16:00:55,077?-?login_page.py:[53]?-?[INFO]?-?login?failed?:?输入的用户名或密码错误,请重新输入!2018-10-12?16:00:55,077?-?LoginTc.py:[73]?-?[INFO]?-?test_login_failed_unpw_incorrect->run?completed!?please?check?the?test?report2018-10-12?16:00:55,512?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:55,760?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:55,760?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:55,760?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:55,806?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C12D6A0>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:55,852?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[]2018-10-12?16:00:55,879?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C12D6A0>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:55,915?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[]2018-10-12?16:00:55,942?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C12D6A0>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:55,973?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:56,007?-?login_page.py:[70]?-?[INFO]?-?login?failed?,handleAlert?handle?alert?successed?alert?info:?请填写用户名!2018-10-12?16:00:56,007?-?LoginTc.py:[57]?-?[INFO]?-?test_login_failed_username_password_blank->run?completed!?please?check?the?test?report2018-10-12?16:00:56,485?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:56,699?-?base_page.py:[56]?-?[INFO]?-?_open?is?accessing?address?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?at?line[46]2018-10-12?16:00:56,699?-?base_page.py:[65]?-?[INFO]?-?http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp?loading?successed!2018-10-12?16:00:56,700?-?myunit.py:[35]?-?[INFO]?-?************************starting?run?test?cases************************2018-10-12?16:00:56,739?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE10>?had?already?find?the?element?('id',?'username')2018-10-12?16:00:56,784?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'username')]?is?receiveing?value?[rmln]2018-10-12?16:00:56,809?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE10>?had?already?find?the?element?('id',?'password')2018-10-12?16:00:56,861?-?base_page.py:[118]?-?[INFO]?-?inputValue:[('id',?'password')]?is?receiveing?value?[qwert1234!@#]2018-10-12?16:00:56,903?-?base_page.py:[83]?-?[INFO]?-?The?page?of?<retail.test_case.page_obj.login_page.LoginPage?object?at?0x0000015F8C06DE10>?had?already?find?the?element?('id',?'loginSubmitButton')2018-10-12?16:00:57,456?-?login_page.py:[45]?-?[INFO]?-?clickLoginBtn?,logining....!2018-10-12?16:00:57,583?-?base_page.py:[219]?-?[INFO]?-?the?file?[correct_username_password_pass.png]??save?screenshot?successed?under?[D:\Petrochina_Retail_Test_Project\retail\report\image\pass]2018-10-12?16:00:57,583?-?LoginTc.py:[32]?-?[INFO]?-?test_login_success_correct_username_password->run?completed!?please?check?the?test?report2018-10-12?16:00:58,538?-?myunit.py:[43]?-?[INFO]?-?************************test?case?run?completed************************2018-10-12?16:00:59,037?-?myunit.py:[49]?-?[INFO]?-?quit?the?browser?success!
测试报告:
总结 看到结果还是挺有成就感的,邮件的截图我没发,因为我是内网不知道什么原因邮件服务器连接不上,但是使用外网单独测试邮件发送是没什么问题的!
就写这么多吧,其他页面的用例设计思路都是一样的,因为所有的用例彼此都是独立的,所以多与少都不影响! 要源码的同学可以访问我的github自己下载吧!
博客写的不是很好,有的东西不知道怎么讲,希望大家能够看到懂,当然,不懂的或者像学自动化的有问题的 都可以加我们QQ群(785128166)交流软件测试经验或寻求必要的帮助。
查看更多关于python&selenium自动化测试实战项目——全面!完整!详细!的详细内容...