第二个python&selenium自动化测试实战项目
前言
之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过 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 文件
项目目标
我们在写自动化测试项目的时候一定要想好你的脚本都要哪些功能,页面元素平凡改动的时候是否需要大批量的修改脚本,及测试不同数据时是否也要修改脚本,那么能想到这些我们的初始目标差不多就有了
1. 生成测试用例执行结果报告
2. 生成测试用例执行日志
3. 用例执行失败或者执行完成后自动发送邮件报告
4. 用例执行失败或者成功时截取图片
5. 数据驱动(读取测试数据,减少脚本维护成本)
项目代码
config.ini # 存放项目跟路径
1 2 | [project] project_path = D:\Petrochina_Retail_Test_Project |
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_name 44 # 被调函数所在行号 45 funcNo = sys._getframe().f_back.f_lineno 46 47 # 被调函数所在文件名称 48 funcFile= sys._getframe().f_code.co_filename
elementData.xlsx # 存放所有的测试数据及元素
一个 excel 文件,不方便贴里面内容(先过,别管里面是啥了 哈哈 后面再找吧)
mail_receiver.txt# 存放邮件接收者的账号 , 可以添加多个账号以‘,’号分割
**@qq.com
公共方法 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 Logger 11 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 e 36 else: 37 log.logger.info('read excel value [%s] successed! ' %value) 38 return value 39 # 向 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 = currPath 60 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 logging 10 from retail.config import conf 11 from retail.test_case.models.log import Logger 12 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 raise 30 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).value 42 except Exception: 43 log.logger.exception('read value from excel file fail', exc_info=True) 44 raise 45 else: 46 log.logger.info('reading value [%s] from excel file [%s] completed' %(value, self.dataFile)) 47 return value 48 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_%S 25 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.com', 24 fromuser='281754043@qq.com', 25 frompassword='gifhhsbgqyovbhhc', 26 sender='281754043@qq.com'): 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 = 0 20 upperCase = 0 21 number = 0 22 other = 0 23 for stritem in str: 24 #如果在字符串中有小写字母,那么小写字母的数量 +1 25 if stritem.islower(): 26 lowerCase += 1 27 #如果在字符串中有数字,那么数字的数量 +1 28 elif stritem.isdigit(): 29 number += 1 30 elif stritem.isupper():# 大写字母 31 upperCase +=1 32 #如果在字符串中有空格,那么空格的数量 +1 33 else: 34 other += 1 35 return lowerCase, upperCase, number, other 36 except Exception as e: 37 log.logger.exception('string handle error , please check!', exc_info=True) 38 raise e 39 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 logging 10 import unittest 11 from BeautifulReport import BeautifulReport 12 import HTMLTestRunner 13 from retail.config import conf 14 from retail.test_case.models.log import Logger 15 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, fileName 37 # 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 discover 48 # 用 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 fileName 65 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 sys 10 from retail.test_case.models.log import Logger 11 12 13 log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) 14 class WDriver(object): 15 16 # Firefox driver 17 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 e 27 else: 28 log.logger.info('%s:found the Firefox driver [%s] successed !' %(sys._getframe().f_code.co_name,self.driver)) 29 return self.driver 30 31 # chrom driver 32 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 e 46 else: 47 log.logger.info('%s:found the chrome driver [%s] successed !' % (sys._getframe().f_code.co_name, self.driver)) 48 return self.driver 49 50 51 # Ie driver 52 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 e 63 else: 64 log.logger.info('%s:found the IE driver [%s] successed !' % (sys._getframe().f_code.co_name, self.driver)) 65 return self.driver 66 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 unittest 10 from retail.test_case.page_obj.login_page import LoginPage 11 from retail.test_case.models.log import Logger 12 from selenium import webdriver 13 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.19 21 @classmethod 22 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 linuxchao at 2018.09.19 48 @classmethod 49 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 主要编写所有页面的公共方法
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.common.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 e 117 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.text 130 #return value 131 except Exception: 132 #element = self.find_element_re(*loc) # 2018.09.21 for log 133 value = element.get_attribute('value') 134 log.logger.info('reading the element [%s] value [%s]' % (loc, value)) 135 return value 136 except: 137 log.logger.exception('read value failed', exc_info=True) 138 raise Exception 139 else: 140 log.logger.info('reading the element [%s] value [%s]' % (loc,value)) 141 return value 142 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.text 153 value_list.append(value) 154 except Exception as e: 155 log.logger.exception('read value failed', exc_info=True) 156 raise e 157 else: 158 log.logger.info('reading the element [%s] value [%s]'% (loc,value_list)) 159 return value_list 160 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 e 173 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 False 189 else: 190 # log.logger.info('The element [%s] have existed!' %element) 191 return True 192 # 截图 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.common.by import By 8 import logging 9 import sys 10 from retail.test_case.page_obj.base_page import BasePage, eleData, testLoginData 11 from retail.test_case.models.log import Logger 12 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).text 53 log.logger.info('login failed : %s' %info) 54 return info 55 56 # 登录失败时弹出的 alert 57 def handleAlert(self): 58 """ 59 60 :return: 61 """ 62 try: 63 alert = self.driver.switch_to_alert() 64 text = alert.text 65 alert.accept() 66 except Exception: 67 log.logger.exception('handle alert failed, please check the details' ,exc_info=True) 68 raise 69 else: 70 log.logger.info('login failed ,%s handle alert successed alert info: %s!' %(sys._getframe().f_code.co_name, text)) 71 return text 72 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:login testcase 3 Create time: 4 Developer: 5 """ 6 7 import unittest 8 import time 9 import logging 10 import sys 11 from retail.test_case.models.myunit import MyunitTest 12 from retail.test_case.models.log import Logger 13 14 15 log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) 16 17 class Login_TC(MyunitTest): 18 19 """登录模块测试用例""" 20 21 def test_login_success_correct_username_password(self): 22 """用户名正确, 密码正确, 登录成功""" 23 self.login.loginFunc() 24 currUrl = self.driver.current_url # 获取当前的 url 地址 25 try: 26 self.assertIn('main', currUrl, 'main not in current url!') 27 except Exception: 28 self.login.saveScreenShot('correct_username_password_fail.png') 29 raise 30 else: 31 self.login.saveScreenShot('correct_username_password_pass.png') 32 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 33 34 def test_login_failed_incorrect_username(self): 35 """用户名错误, 密码正确, 登录失败""" 36 37 self.login.loginFunc(self.login.unpwData[1][0], self.login.unpwData[1][1]) 38 failText = self.login.getFailedText() 39 self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误') 40 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 41 42 def test_login_failed_incorrect_password(self): 43 44 """用户名正确, 密码错误, 登录失败""" 45 46 self.login.loginFunc(self.login.unpwData[5][0], self.login.unpwData[5][1]) 47 failText = self.login.getFailedText() 48 self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误') 49 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 50 51 def test_login_failed_username_password_blank(self): 52 """用户名为空, 密码为空, 登录失败""" 53 54 self.login.loginFunc(self.login.unpwData[6][0], self.login.unpwData[6][1]) 55 failText = self.login.handleAlert() # 获取 alert 的提示信息 56 self.assertEqual('请填写用户名', failText, '提示信息错误') 57 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 58 59 def test_login_failed_password_blank(self): 60 """用户名正确, 密码为空, 登录失败""" 61 62 self.login.loginFunc(self.login.unpwData[4][0], self.login.unpwData[4][1]) 63 failText = self.login.handleAlert() # 获取 alert 的提示信息 64 self.assertEqual('请填写用户密码', failText, '提示信息错误') 65 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 66 67 def test_login_failed_unpw_incorrect(self): 68 """用户名错误, 密码错误, 登录失败""" 69 # try: 70 self.login.loginFunc(self.login.unpwData[3][0], self.login.unpwData[4][0]) 71 failText = self.login.getFailedText() 72 self.assertEqual ('输入的用户名或密码错误,请重新输入!', failText, 'failed') 73 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 74 75 def test_login(self): 76 """循环测试登录功能""" 77 for listitem in self.login.unpwData: 78 self.login.inputValue(self.login.userNameEle,listitem[0]) 79 time.sleep(2) 80 self.login.inputValue(self.login.passWordEle,listitem[1]) 81 time.sleep(2) 82 self.login.clickLoginBtn() 83 time.sleep(2) 84 if listitem[0] =='rmln' and listitem[1] == 'qwert1234!@#': 85 currUrl = self.driver.current_url 86 self.assertIn ('main' , currUrl) 87 self.login.quit() 88 elif listitem[0] == 'rmln' and listitem[1] != 'qwert1234!@#': 89 if listitem[1] == '': 90 failText = self.login.handleAlert() # 获取 alert 的提示信息 91 self.assertEqual('请填写用户密码', failText, '提示信息错误') 92 else: 93 failText = self.login.getFailedText() 94 self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误') 95 elif listitem[0] != 'rmln' and listitem[1] == 'qwert1234!@#': 96 if listitem[0]=='': 97 failText = self.login.handleAlert() # 获取 alert 的提示信息 98 self.assertEqual('请填写用户名', failText, '提示信息错误') 99 else: 100 failText = self.login.getFailedText() 101 self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误') 102 elif listitem[0] == listitem[1] == '': 103 failText = self.login.handleAlert() # 获取 alert 的提示信息 104 self.assertEqual('请填写用户名', failText, '提示信息错误') 105 else: 106 failText = self.login.getFailedText() 107 self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误') 108 log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) 109 110 if __name__ == '__main__': 111 unittest.main()
# 修改密码页面
1 ''' 2 Code description:modify password page 3 Create time: 4 Developer: 5 ''' 6 7 import logging 8 import time 9 from selenium.webdriver.common.by import By 10 from selenium.webdriver.common.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.commitPwd).clear() 88 self.findElement(*self.commitPwd).send_keys(confirmPwd) 89 except Exception: 90 log.logger.exception('input Pw [%s] for commitPw [%s] fail' %(confirmPwd, self.commitPwd)) 91 raise 92 else: 93 log.logger.info('inputing Pw [%s] for commitPw [%s] ' %(confirmPwd, self.commitPwd)) 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.text 155 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 raise 165 else: 166 log.logger.info('close errMsgFram [%s] and get text [%s] success' %(self.errMessage, text)) 167 return text 168 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 raise 181 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 raise 105 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]:# >= 4 135 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.common.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.text 105 except Exception: 106 log.logger.exception('get element member type/level item text fail', exc_info=True) 107 raise 108 else: 109 log.logger.info('get element [%s] member type/level item text [%s] fail' % (xpathList, text)) 110 return text, member_type_level 111 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 raise 124 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 raise 142 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 raise 158 else: 159 log.logger.info('get value [%s] of element [%s] success' % (memberNumNamePhone, text)) 160 return text 161 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 raise 175 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.common.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 unittest 10 import time 11 from BeautifulReport import BeautifulReport 12 from retail.config.conf import * 13 from retail.test_case.models.testreport import testreport 14 15 # TODO : will be use jenkins continuous intergration teachnology manage the auto project 16 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 ReadExcel 2018-10-12 15:39:21,481 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:39:21,493 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:39:21,504 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] - quit 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 ReadExcel 2018-10-12 15:55:32,809 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:55:32,823 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:55:32,834 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] - quit 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 ReadExcel 2018-10-12 15:59:49,366 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:59:49,379 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-10-12 15:59:49,389 - doexcel.py:[31] - [INFO] - initing class ReadExcel 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] completed 2018-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] - quit 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 report 2018-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 281754043 添加时注明:博客园