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 # 存放项目跟路径
[project]
project_path = D:\Petrochina_Retail_Test_Project
'''
Code description:read config.ini, get path
Create time:
Developer:
'''
import os
import sys
from retail.test_case.models.doconfIni import DoConfIni # 获取当前路径
currPath= \
os.path.split(os.path.realpath(__file__))[0] # 读配置文件获取项目路径
readConfig = \
DoConfIni()
proPath = \
readConfig.getConfValue(os.path.join(currPath,'config.ini'),'project','project_path') # 获取日志路径
logPath= \
os.path.join(proPath,'retail','report','Log') # 测试用例路径
tcPath = \
os.path.join(proPath,'retail','test_case') # 获取报告路径
reportPath= \
os.path.join(proPath,'retail','report','TestReport') # 获取测试数据路径
dataPath= \
os.path.join(proPath,'retail','data','TestData') # 保存截图路径
# 错误截图
failImagePath = os.path.join(proPath, 'retail', 'report', 'image','fail')
# 成功截图
passImagePath = os.path.join(proPath, 'retail', 'report', 'image','pass') # 被调函数名称
funcName = sys._getframe().f_code.co_name
# 被调函数所在行号
funcNo = sys._getframe().f_back.f_lineno # 被调函数所在文件名称
funcFile= sys._getframe().f_code.co_filename
conf.py
elementData.xlsx # 存放所有的测试数据及元素
一个excel文件,不方便贴里面内容(先过,别管里面是啥了 哈哈 后面再找吧)
mail_receiver.txt# 存放邮件接收者的账号 , 可以添加多个账号以‘,’号分割
**@qq.com
公共方法models下面的文件:
doconfini.py
'''
Code description:read conf file
Create time:
Developer:
''' import logging
import configparser
from retail.config.conf import *
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
class DoConfIni(object): def __init__(self):
""" :param filename:
"""
self.cf = configparser.ConfigParser() # 从ini文件中读数据
def getConfValue(self,filename,section,name):
""" :param config:
:param name:
:return:
"""
try:
self.cf.read(filename)
value = self.cf.get(section,name)
except Exception as e:
log.logger.exception('read file [%s] for [%s] failed , did not get the value' %(filename,section))
raise e
else:
log.logger.info('read excel value [%s] successed! ' %value)
return value
# 向ini文件中写数据
def writeConfValue(self,filename, section, name, value):
""" :param section: section
:param name: value name
:param value: value
:return: none
"""
try:
self.cf.add_section(section)
self.cf.set(section, name, value)
self.cf.write(open(filename, 'w'))
except Exception :
log.logger.exception('section %s has been exist!' %section)
raise configparser.DuplicateSectionError(section)
else:
log.logger.info('write section'+section+'with value '+value+' successed!') if __name__ == '__main__':
file_path = currPath
print(file_path)
read_config = DoConfIni() value = read_config.getConfValue(os.path.join(currPath,'config.ini'),'project','project_path')
print(value) read_config.writeConfValue(os.path.join(currPath,'config.ini'),'tesesection', 'name', 'hello word')
doexcel.py
'''
Code description:read excel.xlsx, get values
Create time:
Developer:
''' import xlrd
import os
import logging
from retail.config import conf
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) class ReadExcel(object): def __init__(self,fileName='elementDate.xlsx',sheetName='elementsInfo'):
""" :param fileName:
:param sheetName:
"""
try:
self.dataFile = os.path.join(conf.dataPath, fileName)
self.workBook = xlrd.open_workbook(self.dataFile)
self.sheetName = self.workBook.sheet_by_name(sheetName)
except Exception:
log.logger.exception('init class ReadExcel fail', exc_info=True)
raise
else:
log.logger.info('initing class ReadExcel')
# 读excel中的数据
def readExcel(self,rownum,colnum):
""" :param rownum:
:param colnum:
:return:
"""
try:
value = self.sheetName.cell(rownum,colnum).value
except Exception:
log.logger.exception('read value from excel file fail', exc_info=True)
raise
else:
log.logger.info('reading value [%s] from excel file [%s] completed' %(value, self.dataFile))
return value if __name__ == '__main__':
cellValue = ReadExcel().readExcel(1,3)
print((cellValue))
log.py
'''
Code description:log info
Create time:
Developer:
''' import logging
import time class Logger(object):
def __init__(self, logger, CmdLevel=logging.INFO, FileLevel=logging.INFO):
""" :param logger:
:param CmdLevel:
:param FileLevel:
"""
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.DEBUG) # 设置日志输出的默认级别
# 日志输出格式
fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s')
# 日志文件名称
# self.LogFileName = os.path.join(conf.log_path, "{0}.log".format(time.strftime("%Y-%m-%d")))# %H_%M_%S
currTime = time.strftime("%Y-%m-%d")
self.LogFileName = r'D:\Petrochina_Retail_Test_Project\retail\report\Log\log'+currTime+'.log'
# 设置控制台输出
# sh = logging.StreamHandler()
# sh.setFormatter(fmt)
# sh.setLevel(CmdLevel)# 日志级别 # 设置文件输出
fh = logging.FileHandler(self.LogFileName)
fh.setFormatter(fmt)
fh.setLevel(FileLevel)# 日志级别 # self.logger.addHandler(sh)
self.logger.addHandler(fh) # def debug(self, message):
# """
#
# :param message:
# :return:
# """
# self.logger.debug(message)
#
# def info(self,message):
# """
#
# :param message:
# :return:
# """
# self.logger.info(message)
#
# def warn(self,message):
# """
#
# :param message:
# :return:
# """
# self.logger.warning(message)
#
# def error(self,message):
# """
#
# :param message:
# :return:
# """
# self.logger.error(message)
#
# def criti(self,message):
# """
#
# :param message:
# :return:
# """
# self.logger.critical(message) if __name__ == '__main__':
logger = Logger("fox",CmdLevel=logging.DEBUG, FileLevel=logging.DEBUG)
logger.logger.debug("debug")
logger.logger.log(logging.ERROR,'%(module)s %(info)s',{'module':'log日志','info':'error'}) #ERROR,log日志 error
sendmail.py
'''
Code description:send email
Create time:
Developer:
''' import smtplib
from email.mime.text import MIMEText
from email.header import Header
import os
from retail.config import conf
from retail.test_case.models.log import Logger log = Logger(__name__)
# 邮件发送接口
class SendMail(object):
'''
邮件配置信息
'''
def __init__(self,
receiver,
subject='Retail 系统测试报告',
server='smtp.qq.com',
fromuser='281754043@qq.com',
frompassword='gifhhsbgqyovbhhc',
sender='281754043@qq.com'):
""" :param receiver:
:param subject:
:param server:
:param fromuser:
:param frompassword:
:param sender:
""" self._server = server
self._fromuser = fromuser
self._frompassword = frompassword
self._sender = sender
self._receiver = receiver
self._subject = subject def sendEmail(self, fileName):
""" :param filename:
:return:
"""
# 打开报告文件读取文件内容
try:
f = open(os.path.join(conf.reportPath, fileName), 'rb')
fileMsg = f.read()
except Exception:
log.logger.exception('open or read file [%s] failed,No such file or directory: %s' %(fileName, conf.reportPath))
log.logger.info('open and read file [%s] successed!' %fileName)
else:
f.close()
# 邮件主题
subject = 'Python test report' #
# 邮件设置
msg = MIMEText(fileMsg, 'html', 'utf-8')
msg['subject'] = Header(subject, 'utf-8')
msg['from'] = self._sender
# 连接服务器,登录服务器,发送邮件
try:
smtp = smtplib.SMTP()
smtp.connect(self._server)
smtp.login(self._fromuser, self._frompassword)
except Exception:
log.logger.exception('connect [%s] server failed or username and password incorrect!' %smtp)
else:
log.logger.info('email server [%s] login success!' %smtp)
try:
smtp.sendmail(self._sender, self._receiver, msg.as_string())
except Exception:
log.logger.exception('send email failed!')
else:
log.logger.info('send email successed!') # 从文件中读取邮件接收人信息
def getReceiverInfo(fileName):
'''
:param filename: 读取接收邮件人信息
:return: 接收邮件人信息
'''
try:
openFile = open(os.path.join(conf.dataPath, fileName))
except Exception:
log.logger.exception('open or read file [%s] failed,No such file or directory: %s' %(fileName, conf.dataPath))
else:
log.logger.info('open file [%s] successed!' %fileName)
for line in openFile:
msg = [i.strip() for i in line.split(',')]
log.logger.info('reading [%s] and got receiver value is [%s]' %(fileName, msg))
return msg if __name__ == '__main__':
readMsg=getReceiverInfo('mail_receiver.txt')
sendmail = SendMail(readMsg)
sendmail.sendEmail('2018-09-21 17_44_04.html')
strhandle.py
'''
Code description: string handle
Create time:
Developer:
''' import logging
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
def strhandle(str):
""" :param str:
:return:
"""
#初始化字符、数字、空格、特殊字符的计数
try:
lowerCase = 0
upperCase = 0
number = 0
other = 0
for stritem in str:
#如果在字符串中有小写字母,那么小写字母的数量+1
if stritem.islower():
lowerCase += 1
#如果在字符串中有数字,那么数字的数量+1
elif stritem.isdigit():
number += 1
elif stritem.isupper():# 大写字母
upperCase +=1
#如果在字符串中有空格,那么空格的数量+1
else:
other += 1
return lowerCase, upperCase, number, other
except Exception as e:
log.logger.exception('string handle error , please check!', exc_info=True)
raise e if __name__=='__main__':
list = ['qwert','erwer']
lowercase, uppercase, number, other = strhandle(list[0])
print ("该字符串中的小写字母有:%d" %lowercase)
print ("该字符串中的大写写字母有:%d" %uppercase)
print ("该字符串中的数字有:%d" %number)
print ("该字符串中的特殊字符有:%d" %other)
testreport.py
'''
Code description:test report
Create time:
Developer:
''' import time
import logging
import unittest
from BeautifulReport import BeautifulReport
import HTMLTestRunner
from retail.config import conf
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
# 用HTMLTestRunner 实现的测试报告
def testreport():
""" :return:
"""
currTime = time.strftime('%Y-%m-%d %H_%M_%S')
fileName = conf.reportPath + r'\report' + currTime + '.html'
try:
fp = open(fileName, 'wb')
except Exception :
log.logger.exception('[%s] open error cause Failed to generate test report' %fileName)
else:
runner = HTMLTestRunner.HTMLTestRunner\
(stream=fp, title='Retail sys测试报告',
description='处理器:Intel(R) Core(TM) '
'i5-6200U CPU @ 2030GHz 2.40 GHz '
'内存:8G 系统类型: 64位 版本: windows 10 家庭中文版')
log.logger.info('successed to generate test report [%s]' %fileName)
return runner, fp, fileName
#
def addTc(TCpath = conf.tcPath, rule = '*TC.py'):
""" :param TCpath: 测试用例存放路径
:param rule: 匹配的测试用例文件
:return: 测试套件
"""
discover = unittest.defaultTestLoader.discover(TCpath, rule) return discover
# 用BeautifulReport模块实现测试报告
def runTc(discover):
""" :param discover: 测试套件
:return:
"""
currTime = time.strftime('%Y-%m-%d %H_%M_%S')
fileName = currTime+'.html'
try:
result = BeautifulReport(discover)
result.report(filename=fileName, description='测试报告', log_path=conf.reportPath)
except Exception:
log.logger.exception('Failed to generate test report', exc_info=True)
else:
log.logger.info('successed to generate test report [%s]' % fileName)
return fileName if __name__ == '__main__':
testreport()
suite = addTc(rule = '*TC.py')
runTc(suite)
driver.py
'''
Code description:save all driver info
Create time:
Developer:
''' from selenium import webdriver
import logging
import sys
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
class WDriver(object): # Firefox driver
def fireFoxDriver(self):
""" :return:
"""
try:
self.driver = webdriver.Firefox()
except Exception as e:
log.logger.exception('FireFoxDriverServer.exe executable needs to be in PATH. Please download!', exc_info=True)
raise e
else:
log.logger.info('%s:found the Firefox driver [%s] successed !' %(sys._getframe().f_code.co_name,self.driver))
return self.driver # chrom driver
def chromeDriver(self):
""" :return:
"""
try:
# option = webdriver.ChromeOptions()# 实现不打开浏览器 执行web自动化测试脚本
# option.add_argument('headless')#
# self.driver = webdriver.Chrome(chrome_options=option)
self.driver = webdriver.Chrome()
except Exception as e:
log.logger.exception('ChromeDriverServer.exe executable needs to be in PATH. Please download!',
exc_info=True)
raise e
else:
log.logger.info('%s:found the chrome driver [%s] successed !' % (sys._getframe().f_code.co_name, self.driver))
return self.driver # Ie driver
def ieDriver(self):
""" :return:
"""
try:
self.driver = webdriver.Ie()
except Exception as e:
log.logger.exception('IEDriverServer.exe executable needs to be in PATH. Please download!',
exc_info=True)
raise e
else:
log.logger.info('%s:found the IE driver [%s] successed !' % (sys._getframe().f_code.co_name, self.driver))
return self.driver if __name__ == '__main__':
WDrive=WDriver()
WDrive.fireFoxDriver()
myunittest.py
'''
Code description:unittest framwork
Create time:
Developer:
''' from retail.test_case.models.driver import WDriver
import logging
import unittest
from retail.test_case.page_obj.login_page import LoginPage
from retail.test_case.models.log import Logger
from selenium import webdriver log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
class MyunitTest(unittest.TestCase):
""" """ # add by xuechao at 2018.09.19
@classmethod
def setUpClass(cls): # 一个测试类(文件)执行一次打开浏览器, 节约每个用例打开一次浏览器的时间 #cls.driver = WDriver().fireFoxDriver()
cls.driver = WDriver().chromeDriver()
cls.driver.maximize_window()
log.logger.info('opened the browser successed!')
# ---------------------------- def setUp(self):
""" :return:
"""
self.login = LoginPage(self.driver)
self.login.open()
log.logger.info('************************starting run test cases************************') def tearDown(self):
""" :return:
"""
self.driver.refresh()
log.logger.info('************************test case run completed************************') # add by linuxchao at 2018.09.19
@classmethod
def tearDownClass(cls):
cls.driver.quit()
log.logger.info('quit the browser success!')
#----------------------------
if __name__ == '__main__':
unittest.main()
目前为止,我需要的所有的公共方法都编写完了, 后期再需要别的方法可以加,下面我们就开始编写我们的测试用例,由于我们使用的是PageObject模式,那么我们需要设计一个basepage页面,所有的页面或者说模块全部继承这个basepage,basepage主要编写所有页面的公共方法
'''
Code description: base page 封装一些公共方法
Create time:
Developer:
'''
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import os
import logging
import sys
from retail.test_case.models.log import Logger
from retail.config import conf
from retail.test_case.models.doexcel import ReadExcel eleData = ReadExcel() # 存储系统所有的元素数据
testLoginData = ReadExcel('elementDate.xlsx', 'userNamePw') # 登录模块测试数据
modifyPwData = ReadExcel('elementDate.xlsx', 'modifyPw') # 修改密码模块测试数据
queryData = ReadExcel('elementDate.xlsx', 'queryData')
log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) class BasePage(object): """主菜单"""
menuList = \
[(By.LINK_TEXT, eleData.readExcel(7, 3)), # 权限管理
(By.LINK_TEXT, eleData.readExcel(8, 3)), # 会员档案
(By.LINK_TEXT, eleData.readExcel(9, 3)), # 积分消费查询
(By.LINK_TEXT, eleData.readExcel(10, 3)), # 功能演示
(By.LINK_TEXT, eleData.readExcel(11, 3)), # 待办工作
(By.LINK_TEXT, eleData.readExcel(12, 3)), # 报表
(By.LINK_TEXT, eleData.readExcel(13, 3)), # 积分规则/活动查询
(By.LINK_TEXT, eleData.readExcel(14, 3))] # 积分规则/活动申请 def __init__(self, driver,url='http://11.11.164.134:9081/rmms/modules/ep.rmms.portal/login/login.jsp'):
""" :param driver:
:param url:
"""
self.driver = driver
self.base_url = url
def _open(self,url):
""" :param url:
:return:
"""
try:
self.driver.get(url)
self.driver.implicitly_wait(10)
except Exception as e:
log.logger.exception(e, exc_info=True)
raise ValueError('%s address access error, please check!' %url)
else:
log.logger.info('%s is accessing address %s at line[46]' %(sys._getframe().f_code.co_name,url)) def open(self):
""" :return:
""" self._open(self.base_url)
log.logger.info('%s loading successed!' %self.base_url)
return self.base_url # *loc 代表任意数量的位置参数
def findElement(self, *loc):
"""
查找单一元素
:param loc:
:return:
"""
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
# log.logger.info('The page of %s had already find the element %s'%(self,loc))
# return self.driver.find_element(*loc)
except Exception as e:
log.logger.exception('finding element timeout!, details' ,exc_info=True)
raise e
else:
log.logger.info('The page of %s had already find the element %s' % (self, loc))
return self.driver.find_element(*loc) def findElements(self, *loc):
"""
查找一组元素
:param loc:
:return:
"""
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
# log.logger.info('The page of %s had already find the element %s' % (self, loc))
# return self.driver.find_elements(*loc)
except Exception as e:
log.logger.exception('finding element timeout!, details', exc_info=True)
raise e
else:
log.logger.info('The page of %s had already find the element %s' % (self, loc))
return self.driver.find_elements(*loc) def inputValue(self, inputBox, value):
"""
后期修改其他页面直接调用这个函数
:param inputBox:
:param value:
:return:
"""
inputB = self.findElement(*inputBox)
try:
inputB.clear()
inputB.send_keys(value)
except Exception as e:
log.logger.exception('typing value error!', exc_info=True)
raise e
else:
log.logger.info('inputValue:[%s] is receiveing value [%s]' % (inputBox, value)) # 获取元素数据
def getValue(self, *loc):
""" :param loc:
:return:
"""
element = self.findElement(*loc)
try:
value = element.text
#return value
except Exception:
#element = self.find_element_re(*loc) # 2018.09.21 for log
value = element.get_attribute('value')
log.logger.info('reading the element [%s] value [%s]' % (loc, value))
return value
except:
log.logger.exception('read value failed', exc_info=True)
raise Exception
else:
log.logger.info('reading the element [%s] value [%s]' % (loc,value))
return value def getValues(self, *loc):
""" :param loc:
:return:
"""
value_list = []
try:
for element in self.findElements(*loc):
value = element.text
value_list.append(value)
except Exception as e:
log.logger.exception('read value failed', exc_info=True)
raise e
else:
log.logger.info('reading the element [%s] value [%s]'% (loc,value_list))
return value_list # 执行js脚本
def jScript(self,src):
""" :param src:
:return:
"""
try:
self.driver.excute_script(src)
except Exception as e:
log.logger.exception('execute js script [%s] failed ' %src)
raise e
else:
log.logger.info('execute js script [%s] successed ' %src) # 判断元素是否存在
def isElementExist(self, element):
""" :param element:
:return:
"""
try:
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(element))
except:
# log.logger.exception('The element [%s] not exist', exc_info=True)
return False
else:
# log.logger.info('The element [%s] have existed!' %element)
return True
# 截图
def saveScreenShot(self, filename):
""" :param filename:
:return:
"""
list_value = [] list = filename.split('.')
for value in list:
list_value.append(value)
if list_value[1] == 'png' or list_value[1] == 'jpg' or list_value[1] == 'PNG' or list_value[1] == 'JPG':
if 'fail' in list_value[0].split('_'):
try:
self.driver.save_screenshot(os.path.join(conf.failImagePath, filename))
except Exception:
log.logger.exception('save screenshot failed !', exc_info=True)
else:
log.logger.info('the file [%s] save screenshot successed under [%s]' % (filename, conf.failImagePath))
elif 'pass' in list_value[0]:
try:
self.driver.save_screenshot(os.path.join(conf.passImagePath, filename))
except Exception:
log.logger.exception('save screenshot failed !', exc_info=True)
else:
log.logger.info(
'the file [%s] save screenshot successed under [%s]' % (filename, conf.passImagePath))
else:
log.logger.info('save screenshot failed due to [%s] format incorrect' %filename)
else:
log.logger.info('the file name of [%s] format incorrect cause save screenshot failed, please check!' % filename) # 接受错误提示框
def accept(self, *loc):
""" :return:
"""
self.findElement(*loc).click()
log.logger.info('closed the error information fram successed!') if __name__ == '__main__':
pass
base_page.py
#登录页面
'''
Code description: login page
Create time:
Developer:
''' from selenium.webdriver.common.by import By
import logging
import sys
from retail.test_case.page_obj.base_page import BasePage, eleData, testLoginData
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) class LoginPage(BasePage): """用户名,密码,登录按钮,保存信息,错误提示"""
userNameEle = (By.ID, eleData.readExcel(1, 3))
passWordEle = (By.ID, eleData.readExcel(2, 3))
loginBtnEle = (By.ID, eleData.readExcel(3, 3))
saveInfoEle = (By.NAME, eleData.readExcel(4, 3))
errorMessage = (By.ID, eleData.readExcel(5, 3))
quitBtn = (By.ID, eleData.readExcel(6, 3)) # 用户名和密码
unpwData = \
[[testLoginData.readExcel(1, 0), testLoginData.readExcel(1, 1)],# 正确的用户名和正确的密码
[testLoginData.readExcel(2, 0), testLoginData.readExcel(2, 1)],# 错误的用户名和正确的密码
[testLoginData.readExcel(3, 0), testLoginData.readExcel(3, 1)],# 空的用户名和正确的密码
[testLoginData.readExcel(4, 0), testLoginData.readExcel(4, 1)],# 错误的用户名和错误的密码
[testLoginData.readExcel(5, 0), testLoginData.readExcel(5, 1)],# 正确的用户名和空密码
[testLoginData.readExcel(6, 0), testLoginData.readExcel(6, 1)],# 正确的用户名和错误的密码
[testLoginData.readExcel(7, 0), testLoginData.readExcel(7, 1)]]# 空用户名和空密码 # 登录按钮
def clickLoginBtn(self):
""" :return:
"""
element = self.findElement(*self.loginBtnEle)
element.click()
log.logger.info('%s ,logining....!' % sys._getframe().f_code.co_name)
# 登录失败时提示
def getFailedText(self):
""" :return:
"""
info = self.findElement(*self.errorMessage).text
log.logger.info('login failed : %s' %info)
return info # 登录失败时弹出的alert
def handleAlert(self):
""" :return:
"""
try:
alert = self.driver.switch_to_alert()
text = alert.text
alert.accept()
except Exception:
log.logger.exception('handle alert failed, please check the details' ,exc_info=True)
raise
else:
log.logger.info('login failed ,%s handle alert successed alert info: %s!' %(sys._getframe().f_code.co_name, text))
return text # 统一登录函数
def loginFunc(self, username='rmln', password='qwert1234!@#'):
"""
:param username:
:param password:
:return:
"""
self.inputValue(self.userNameEle, username)
self.inputValue(self.passWordEle, password)
self.clickLoginBtn() # 清空输入框数据
def clearValue(self, element): empty = self.findElement(*element)
empty.clear()
log.logger.info('emptying value.......') # 推出
def quit(self):
self.findElement(*self.quitBtn).click()
log.logger.info('quit') if __name__ == '__main__':
pass
login_page.py
# 登录测试用例
"""
Code description:login testcase
Create time:
Developer:
""" import unittest
import time
import logging
import sys
from retail.test_case.models.myunit import MyunitTest
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) class Login_TC(MyunitTest): """登录模块测试用例""" def test_login_success_correct_username_password(self):
"""用户名正确,密码正确,登录成功"""
self.login.loginFunc()
currUrl = self.driver.current_url # 获取当前的url地址
try:
self.assertIn('main', currUrl, 'main not in current url!')
except Exception:
self.login.saveScreenShot('correct_username_password_fail.png')
raise
else:
self.login.saveScreenShot('correct_username_password_pass.png')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login_failed_incorrect_username(self):
"""用户名错误,密码正确,登录失败""" self.login.loginFunc(self.login.unpwData[1][0], self.login.unpwData[1][1])
failText = self.login.getFailedText()
self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login_failed_incorrect_password(self): """用户名正确,密码错误,登录失败""" self.login.loginFunc(self.login.unpwData[5][0], self.login.unpwData[5][1])
failText = self.login.getFailedText()
self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login_failed_username_password_blank(self):
"""用户名为空,密码为空,登录失败""" self.login.loginFunc(self.login.unpwData[6][0], self.login.unpwData[6][1])
failText = self.login.handleAlert() # 获取alert的提示信息
self.assertEqual('请填写用户名', failText, '提示信息错误')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login_failed_password_blank(self):
"""用户名正确,密码为空,登录失败""" self.login.loginFunc(self.login.unpwData[4][0], self.login.unpwData[4][1])
failText = self.login.handleAlert() # 获取alert的提示信息
self.assertEqual('请填写用户密码', failText, '提示信息错误')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login_failed_unpw_incorrect(self):
"""用户名错误,密码错误,登录失败"""
# try:
self.login.loginFunc(self.login.unpwData[3][0], self.login.unpwData[4][0])
failText = self.login.getFailedText()
self.assertEqual ('输入的用户名或密码错误,请重新输入!', failText, 'failed')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) def test_login(self):
"""循环测试登录功能"""
for listitem in self.login.unpwData:
self.login.inputValue(self.login.userNameEle,listitem[0])
time.sleep(2)
self.login.inputValue(self.login.passWordEle,listitem[1])
time.sleep(2)
self.login.clickLoginBtn()
time.sleep(2)
if listitem[0] =='rmln' and listitem[1] == 'qwert1234!@#':
currUrl = self.driver.current_url
self.assertIn ('main' , currUrl)
self.login.quit()
elif listitem[0] == 'rmln' and listitem[1] != 'qwert1234!@#':
if listitem[1] == '':
failText = self.login.handleAlert() # 获取alert的提示信息
self.assertEqual('请填写用户密码', failText, '提示信息错误')
else:
failText = self.login.getFailedText()
self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误')
elif listitem[0] != 'rmln' and listitem[1] == 'qwert1234!@#':
if listitem[0]=='':
failText = self.login.handleAlert() # 获取alert的提示信息
self.assertEqual('请填写用户名', failText, '提示信息错误')
else:
failText = self.login.getFailedText()
self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误')
elif listitem[0] == listitem[1] == '':
failText = self.login.handleAlert() # 获取alert的提示信息
self.assertEqual('请填写用户名', failText, '提示信息错误')
else:
failText = self.login.getFailedText()
self.assertEqual('输入的用户名或密码错误,请重新输入!', failText, '提示信息错误')
log.logger.info('%s->run completed! please check the test report' % (sys._getframe().f_code.co_name)) if __name__ == '__main__':
unittest.main()
LoginTc.py
# 修改密码页面
'''
Code description:modify password page
Create time:
Developer:
''' import logging
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from retail.test_case.page_obj.base_page import BasePage, eleData, modifyPwData
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO)
class PrimaryMenu(BasePage): """密码数据"""
pwdList = \
[[modifyPwData.readExcel(1, 0), modifyPwData.readExcel(1, 1), modifyPwData.readExcel(1, 2)],
[modifyPwData.readExcel(2, 0), modifyPwData.readExcel(2, 1), modifyPwData.readExcel(2, 2)],
[modifyPwData.readExcel(3, 0), modifyPwData.readExcel(3, 1), modifyPwData.readExcel(3, 2)],
[modifyPwData.readExcel(4, 0), modifyPwData.readExcel(4, 1), modifyPwData.readExcel(4, 2)],
[modifyPwData.readExcel(5, 0), modifyPwData.readExcel(5, 1), modifyPwData.readExcel(5, 2)]] """权限管理下拉菜单"""
menuPersonal = (By.LINK_TEXT, eleData.readExcel(15, 3))
menuModifyPwd = (By.LINK_TEXT, eleData.readExcel(16, 3)) """密码修改"""
oldPwd = (By.ID, eleData.readExcel(17, 3))
newPwd = (By.ID, eleData.readExcel(18, 3))
commitPwd = (By.ID, eleData.readExcel(19, 3)) """错误提示框及确定"""
errMessage = (By.XPATH, eleData.readExcel(20, 3))
closeBtn = (By.CSS_SELECTOR, eleData.readExcel(21, 3)) """密码说明"""
readMe = (By.ID, eleData.readExcel(22, 3)) """保存"""
saveBtn = (By.XPATH, eleData.readExcel(23, 3)) # 主菜单
def findMenu(self,*menuList):
""" :param menu_list:
:return:
"""
return self.findElement(*menuList) # 旧密码输入框
def inputOldPw(self, oldPwd=''):
""""""
try:
self.findElement(*self.oldPwd).clear()
self.findElement(*self.oldPwd).send_keys(oldPwd)
except Exception:
log.logger.exception('input Pw [%s] for oldPw [%s] fail' %(oldPwd, self.oldPwd))
raise
else:
log.logger.info('inputing Pw [%s] for oldPw [%s] ' % (oldPwd, self.oldPwd))
# 新密码输入框
def inputNewPw(self, newPwd=''):
""" :param newPwd:
:return:
"""
try:
self.findElement(*self.newPwd).clear()
self.findElement(*self.newPwd).send_keys(newPwd)
except Exception:
log.logger.exception('input Pw [%s] for newPw [%s] fail' % (newPwd, self.newPwd))
raise
else:
log.logger.info('inputing Pw [%s] for newPw [%s] ' % (newPwd, self.newPwd))
# 确认密码输入框
def inputConfirmPw(self, confirmPwd=''):
""" :param confirmPwd:
:return:
"""
try:
self.findElement(*self.commitPwd).clear()
self.findElement(*self.commitPwd).send_keys(confirmPwd)
except Exception:
log.logger.exception('input Pw [%s] for commitPw [%s] fail' %(confirmPwd, self.commitPwd))
raise
else:
log.logger.info('inputing Pw [%s] for commitPw [%s] ' %(confirmPwd, self.commitPwd))
# 保存
def saveButton(self):
""" :return:
"""
try:
self.driver.implicitly_wait(5)
clickbutton = self.findElement(*self.saveBtn)
time.sleep(1)
clickbutton.click()
except Exception:
log.logger.exception('click save button fail')
raise
else:
log.logger.info('clciking the button') # 修改密码功能菜单
def modifyPwMenu(self):
""" :return:
"""
try:
self.findElement(*self.menuList[0]).click()
self.findElement(*self.menuPersonal).click()
self.findElement(*self.menuModifyPwd).click()
except Exception:
log.logger.exception('not found menu [%s]-[%s]-[%s]' %(self.menuList[0], self.menuPersonal, self.menuModifyPwd))
raise
else:
log.logger.info('finding menu [%s]-[%s]-[%s]' %(self.menuList[0], self.menuPersonal, self.menuModifyPwd))
self.driver.implicitly_wait(2) # 修改密码
def modifyPw(self, list):
""" :param list:
:return:
"""
try:
self.inputOldPw(list[0])
self.inputNewPw(list[1])
self.inputConfirmPw(list[2])
self.saveButton()
except Exception:
log.logger.exception('input oldpw/newpw/commitpw [%s]/[%s]/[%s] fail' %(list[0], list[1], list[2]))
raise
else:
log.logger.info('modifing pw [%s]/[%s]/[%s]' %(list[0], list[1], list[2])) # 错误提示框
def errorDialog(self, commit_btn = (By.ID,'unieap_form_Button_1_unieap_input')):
"""
:type commit_btn: 元祖
""" try:
messages_frame = self.findElement(*self.errMessage)
text = messages_frame.text
element = self.findElement(*commit_btn)
time.sleep(2)
action = ActionChains(self.driver)
action.move_to_element(element).perform()
time.sleep(2)
element.click()
action.reset_actions() # 释放鼠标
except Exception:
log.logger.exception('close errMsgFram [%s] or get text [%s]fail' %(self.errMessage))
raise
else:
log.logger.info('close errMsgFram [%s] and get text [%s] success' %(self.errMessage, text))
return text # 关闭提示框
def closeErrMsg(self, element):
try:
ele = self.findElement(*element)
action = ActionChains(self.driver)
action.move_to_element(ele).perform()
time.sleep(2)
ele.click()
action.reset_actions()
except Exception:
log.logger.exception('close the err msg ifram fail', exc_info=True)
raise
else:
log.logger.info('closing the err msg ifram success!') if __name__ == '__main__':
pass
modifypw_page.py
# 修改密码测试用例
'''
Code description:权限管理/个人设置/密码修改 testcase
Create time:
Developer:
''' import time
from retail.test_case.models.myunit import MyunitTest
from retail.test_case.page_obj.modifypw_page import PrimaryMenu
from retail.test_case.models.strhandle import strhandle class ModifyPw_TC(MyunitTest): """权限管理/个人设置/密码修改模块测试用例""" def test_menu_is_display(self):
"""主菜单校验"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
time.sleep(4)
num = 0
for menu_item in menu.menuList: # 循环遍历并断言菜单是否正确
self.assertEqual(menu.menuList[num][1],(menu.findMenu(*menu_item).text),'菜单不存在')
num=num+1 def test_modify_password_len(self):
"""旧密码非空,新密码长度小于4位,确认密码非空,修改密码失败,弹窗提示"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
menu.modifyPw(menu.pwdList[0]) # 修改密码
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码长度至少 4 位!', text, '提示信息错误') # 密码长度不满足时断言提示信息 def test_modify_password_strebgth(self):
"""旧密码非空,新密码长度大于4且强度不够,确认密码非空,修改密码失败,弹窗提示"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
menu.modifyPw(menu.pwdList[1]) # 修改密码
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!') # 密码强度不满足时断言提示信息 def test_modify_password_incorrect(self):
"""旧密码不正确非空,新密码等于确认密码且满足条件,修改密码失败,弹窗提示"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
menu.modifyPw(menu.pwdList[2]) # 修改密码
text = menu.errorDialog(menu.closeBtn)
self.assertIn('旧密码输入错误!', text, '旧密码输入错误!') # 新密码和确认码不同时断言提示信息 def test_modify_password_difference(self):
"""旧密码非空,新密码不等于确认密码且新密码满足条件,修改密码失败,弹窗提示"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
menu.modifyPw(menu.pwdList[3]) # 修改密码
text = menu.errorDialog(menu.closeBtn)
self.assertIn('两次输入的新密码不同!', text, '两次输入的新密码不同!') # 新密码和确认码不同时断言提示信息 def test_modify_password_all_blank(self):
"""旧密码,新密码,确认密码任意为空,修改密码失败,弹窗提示"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
menu.modifyPw(menu.pwdList[4]) # 修改密码
text = menu.errorDialog(menu.closeBtn)
self.assertIn('该输入项的值不能为空!', text, ' 该输入项的值不能为空!') # 所有密码均为空时断言提示信息 def test_modify_password(self):
"""循环校验提示信息"""
self.login.loginFunc()
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
error_list = []
for list in range(len(menu.pwdList)):
menu.modifyPw(menu.pwdList[list])
if menu.isElementExist(menu.errMessage):
text = menu.errorDialog(menu.closeBtn) # 这里只判断是否有提示框弹出,如有说明修改失败,没有或者其他提示框默认为修改成功
error_list.append(text)
else:
self.assertTrue(menu.isElementExist(*menu.errMessage), 'error fram not exist, please open bug')
self.assertEqual('密码长度至少 4 位!',error_list[0],'log infomation error!')
self.assertEqual('密码强度不够,请重新输入密码!', error_list[1], 'log infomation error!')
self.assertEqual('旧密码输入错误!', error_list[2], 'log infomation error!')
self.assertEqual('两次输入的新密码不同!', error_list[3], 'log infomation error!')
self.assertEqual('该输入项的值不能为空!', error_list[4], 'log infomation error!') def test_modifypw(self):
"""循环测试修改密码功能"""
self.login.loginFunc()# 登录
menu = PrimaryMenu(self.driver)
menu.modifyPwMenu() # 查找修改密码页面
for item in menu.pwdList:
menu.modifyPw(item)
if menu.isElementExist(menu.errMessage): # 如果存在提示框 再断言提示信息是否正确
if item[0] != '' and len(item[1]) < 4 and item[2] !='': # 新密码长度校验
text = menu.errorDialog(menu.closeBtn)
try:
self.assertEqual('密码长度至少 4 位!',text,'the message incorrect!')
except Exception:
menu.saveScreenShot('fail_密码长度.png')
raise
elif item[0] != '' and len(item[1]) >= 4 and item[2] !='': # 新密码强度校验 ['a', 'qwert', 'qwert'],
lowercase, uppercase, number, other=strhandle(item[1])
if lowercase > 0 and uppercase > 0 and number == 0 and other == 0: # 小写 大写
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif uppercase > 0 and other > 0 and number == 0 and lowercase == 0: # 大写 特殊字符
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase >0 and other > 0 and number == 0 and uppercase == 0: # 小写 特殊字符
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase == 0 and other == 0 and number > 0 and uppercase > 0: # 大写 数字
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase > 0 and other == 0 and number > 0 and uppercase == 0: # 小写 数字
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase > 0 and other == 0 and number == 0 and uppercase == 0:
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase == 0 and other > 0 and number == 0 and uppercase == 0:
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase == 0 and other == 0 and number > 0 and uppercase == 0:
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif lowercase == 0 and other == 0 and number == 0 and uppercase > 0:
text = menu.errorDialog(menu.closeBtn)
self.assertIn('密码强度不够,请重新输入密码!', text, ' 密码强度不够,请重新输入密码!')
elif item[0] != 'qwert1234!@#' and item[1] == item[2]:# >= 4
lowercase, uppercase, number, other = strhandle(item[1])
if (lowercase > 0 and uppercase > 0 and number > 0) or (
lowercase > 0 and uppercase > 0 and other > 0) or (
number > 0 and other > 0 and lowercase > 0) or (
number > 0 and other > 0 and uppercase > 0):
text = menu.errorDialog(menu.closeBtn)
self.assertIn('旧密码输入错误!', text, '旧密码输入错误!') # 新密码和确认码不同时断言提示信息
elif item[0] == 'qwert1234!@#$' and item[1] != item[2]:# and item[1] >= 4:
lowercase, uppercase, number, other = strhandle(item[1])
if (lowercase > 0 and uppercase > 0 and number > 0) or (
lowercase > 0 and uppercase > 0 and other > 0) or (
number > 0 and other > 0 and lowercase > 0) or (
number > 0 and other > 0 and uppercase > 0):
text = menu.errorDialog(menu.closeBtn)
self.assertIn('两次输入的新密码不同!', text, ' 两次输入的新密码不同!')
else:
print('test value incorrect! please check it')
elif item[0] == '' or item[1] =='' or item[2] =='': # 输入项为空校验
text = menu.errorDialog(menu.closeBtn)
self.assertIn('该输入项的值不能为空!', text, ' 该输入项的值不能为空!') # 所有密码均为空时断言提示信息
else:
self.assertTrue(menu.isElementExist(menu.errMessage), 'error fram not exist, please check the test value or file bug') if __name__=='__main__':
pass
ModifyPw.py
# 会员档案查询页面
'''
Code description:会员档案查询 page
Create time:
Developer:
''' from retail.test_case.page_obj.base_page import queryData
import time
from selenium.webdriver.common.by import By
import logging
import sys
from retail.test_case.page_obj.modifypw_page import PrimaryMenu, eleData
from retail.test_case.models.log import Logger log = Logger(__name__, CmdLevel=logging.INFO, FileLevel=logging.INFO) class MemberQuery(PrimaryMenu):
""" """
# 测试数据: 会员编码, 会员姓名, 手机号码
valuesList = [queryData.readExcel(1, 1), int(queryData.readExcel(2, 1)), queryData.readExcel(3, 1)] # 会员档案下拉菜单
memberMenu = (By.LINK_TEXT, eleData.readExcel(24, 3)) # 会员查询页面的3个列表(查询条件,会员信息明细,积分变化明细)
uiElements = (By.XPATH, eleData.readExcel(25, 3))
# 会员类型
memberTypeBtn = (By.ID, eleData.readExcel(26, 3))
# 会员类型下拉选项
memberTypeNum = [(By.XPATH, eleData.readExcel(27, 3)), (By.XPATH, eleData.readExcel(28, 3)),
(By.XPATH, eleData.readExcel(29, 3))] # 会员级别
memberLevelBtn = (By.ID, eleData.readExcel(30, 3))
# 会员级别下拉选项
memberLevelNum = [(By.XPATH, eleData.readExcel(31, 3)), (By.XPATH, eleData.readExcel(32, 3)),
(By.XPATH, eleData.readExcel(33, 3)), (By.XPATH, eleData.readExcel(34, 3))] # 会员编号,会员姓名,手机号码
memberNumNamePhone = [(By.ID, eleData.readExcel(35, 3)), (By.ID, eleData.readExcel(36, 3)),
(By.ID, eleData.readExcel(37, 3))]
# 查询异常提示框
qFailerr = (By.XPATH, eleData.readExcel(38, 3)) # 查询失败弹出的错误提示框 confirmBtn = (By.XPATH, eleData.readExcel(39, 3)) # 查询与重置
queryResetBtn = [(By.ID, eleData.readExcel(40, 3)), (By.ID, eleData.readExcel(41, 3))] # 点击会员类型
def selectMemberType(self):
""" :return:
"""
try:
self.findElement(*self.memberTypeBtn).click()
self.driver.implicitly_wait(2)
except Exception:
log.logger.exception('selecting member type fail ')
raise
else:
log.logger.info('---selecting member type ') # 点击会员级别
def selectMemberLevel(self):
""" :return:
"""
try:
self.findElement(*self.memberLevelBtn).click()
self.driver.implicitly_wait(2)
except Exception:
log.logger.exception('selecting member level fail ')
raise
else:
log.logger.info('---selecting member level ') # 查找会员档案查询菜单
def memberQueryMenu(self):
""" :return:
"""
self.findElement(*self.menuList[1]).click()
self.findElement(*self.memberMenu).click()
time.sleep(4)
log.logger.info('page [%s] :found the menu [%s] and [%s]' % (
sys._getframe().f_code.co_name, self.menuList[1], self.memberMenu)) # 会员类型/会员级别下拉选项
def memberTypeLevelOption(self, *xpathList):
""" :param xpath_list:
:return:
"""
try:
member_type_level = self.findElement(*xpathList)
text = member_type_level.text
except Exception:
log.logger.exception('get element member type/level item text fail', exc_info=True)
raise
else:
log.logger.info('get element [%s] member type/level item text [%s] fail' % (xpathList, text))
return text, member_type_level # 点击查询和重置按钮
def cQueryResetBtn(self, *queryResetBtn):
""" :param query_reset_btn:
:return:
"""
try:
self.findElement(*queryResetBtn).click()
except Exception:
log.logger.exception('query/reset button not click', exc_info=True)
raise
else:
log.logger.info('clicking query/reset button ') # 输入查询条件
def iQueryCondition(self, numNamePhone, value):
""" :param numNamePhone:
:param value:
:return:
"""
number_name_phone = self.findElement(*numNamePhone)
try:
number_name_phone.clear()
number_name_phone.send_keys(value)
except Exception:
log.logger.exception('input value error', exc_info=True)
raise
else:
log.logger.info('[%s] is typing value [%s] ' % (numNamePhone, value)) # 获取条件输入框的内容
def getInputboxValue(self, *memberNumNamePhone):
""" :param memberNumNamePhone:
:return:
"""
try:
get_member_number_name_phone_text = self.findElement(*memberNumNamePhone)
text = get_member_number_name_phone_text.get_attribute('value')
except Exception:
log.logger.exception('get value of element fail', exc_info=True)
raise
else:
log.logger.info('get value [%s] of element [%s] success' % (memberNumNamePhone, text))
return text # 重置功能的重写
def reset(self):
""" :return:
"""
try:
self.findElement(*self.memberNumNamePhone[0]).clear()
self.findElement(*self.memberNumNamePhone[1]).clear()
self.findElement(*self.memberNumNamePhone[2]).clear()
except Exception:
log.logger.exception('reset fail', exc_info=True)
raise
else:
log.logger.info('reset [%s]-[%s]-[%s] success' % (
self.memberNumNamePhone[0], self.memberNumNamePhone[1], self.memberNumNamePhone[2])) if __name__ == '__main__':
pass
memberquery_page.py
# 会员档案查询用例
'''
Code description:会员档案查询 testcase
Create time:
Developer:
''' import random
import time
from selenium.webdriver.common.action_chains import ActionChains
from retail.test_case.models.myunit import MyunitTest
from retail.test_case.page_obj.memeberquery_page import MemberQuery class MemberQuery_TC(MyunitTest): """会员档案查询模块测试用例""" #@unittest.skip('dont run the test case')
def test_member_check_ui(self):
"""会员档案查询页面显示正确"""
menu = MemberQuery(self.driver) # 实例化会员查询页面
self.login.loginFunc()
menu.memberQueryMenu() # 查找会员档案查询菜单
elements = menu.findElements(*menu.uiElements)
ele_list = []
for eles in elements:
if eles.text !='':
ele_list.append(eles.text)
self.assertEqual('查询条件', ele_list[0])
self.assertEqual('会员信息明细', ele_list[1])
self.assertEqual('积分变化明细', ele_list[2]) def test_member_type(self):
"""会员类型下拉列表项正确"""
menu = MemberQuery(self.driver) # 实例化会员查询页面
self.login.loginFunc()# 登录
menu.memberQueryMenu() # 查找会员档案查询菜单
menu.selectMemberType()
list_type = []
for member_type in menu.memberTypeNum: # 循环遍历会员类型下拉列表
text, memeber_type_level = menu.memberTypeLevelOption(*member_type)
list_type.append(text)
self.assertEqual('个人会员', list_type[0])
self.assertEqual('企业会员', list_type[1])
self.assertEqual('其它', list_type[2]) def test_member_level(self):
"""会员级别下拉列表项正确"""
menu = MemberQuery(self.driver) # 实例化会员查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 查找会员档案查询菜单
menu.selectMemberLevel()
list_level = []
for member_level in menu.memberLevelNum: # 循环遍历会员级别下拉列表
text, memeber_type_level = menu.memberTypeLevelOption(*member_level)
list_level.append(text)
self.assertEqual('标准会员', list_level[0])
self.assertEqual('黄金会员', list_level[1])
self.assertEqual('铂金会员', list_level[2])
self.assertEqual('钻石会员', list_level[3]) # ............................................................................................#
# 对页面的条件进行组合后单击查询按钮。这是一个大数据量的操作,因此不对返回数据做校验,只看本次组合的条件在页面是否可正常使用。
# 如果查询失败,系统会有弹出框提示失败原因,这个应该很好理解的。
# 我们抓取这个框是否在一定的时间内出现,如果出现则判定本次查询失败,记录用例结果。
# ............................................................................................# def test_member_query_failed(self):
"""默认条件查询成功"""
menu = MemberQuery(self.driver) # 实例化会员档案查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 找到会员查询页面
menu.cQueryResetBtn(*menu.queryResetBtn[0]) # 点击[查询]
flag = menu.isElementExist(menu.qFailerr) # 断言错误提示框
self.assertFalse(flag, msg='查询失败') # flag为false时,断言成功, 无提示框,说明默认查询成功 def test_alone_query_1(self):
"""按会员编号,会员姓名,手机号码单一条件查询"""
menu = MemberQuery(self.driver) # 实例化会员档案查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 找到会员档案查询页面
for num_name_phone in menu.memberNumNamePhone:
menu.reset() # 重置
for value in menu.valuesList:
menu.iQueryCondition(num_name_phone,value)
menu.cQueryResetBtn(*menu.queryResetBtn[0]) # 点击[查询]
time.sleep(3)
flag = menu.isElementExist(menu.qFailerr)
if flag:
self.assertTrue(flag, '提示框不存在,查询成功')
menu.accept(*menu.confirmBtn)
else:
self.assertFalse(flag, '提示框存在,查询失败') def test_alone_query_2(self):
"""按会员类型单一查询"""
menu = MemberQuery(self.driver) # 实例化会员档案查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 找到会员档案查询页面
for me_type in menu.memberTypeNum:
menu.selectMemberType() # 点击[会员类型]
text, member_type_level = menu.memberTypeLevelOption(*me_type) # 遍历每一个下拉选项
ActionChains(self.driver).move_to_element(member_type_level).perform() # 鼠标移动到下拉选项上
member_type_level.click() # 选中下拉选项
menu.cQueryResetBtn(*menu.queryResetBtn[0]) # 点击[查询]
time.sleep(3)
flag = menu.isElementExist(menu.qFailerr) # 判断查询成功
self.assertFalse(flag, '提示框存在,查询失败') def test_alone_query_3(self):
"""按会员级别单一查询"""
menu = MemberQuery(self.driver) # 实例化会员档案查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 找到会员档案查询页面
for me_level in menu.memberLevelNum:
menu.selectMemberLevel() # 点击[会员级别]
text, member_level = menu.memberTypeLevelOption(*me_level) # 遍历每一个下拉选项
ActionChains(self.driver).move_to_element(member_level).perform() # 鼠标移动到下拉选项上
member_level.click() # 选中下拉选项
menu.cQueryResetBtn(*menu.queryResetBtn[0]) # 点击[查询]
time.sleep(3)
flag = menu.isElementExist(menu.qFailerr) # 判断查询成功
self.assertFalse(flag, '提示框存在,查询成功') def test_reset(self):
"""重置功能校验"""
menu = MemberQuery(self.driver) # 实例化会员档案查询页面
self.login.loginFunc() # 登录
menu.memberQueryMenu() # 找到会员档案查询页面
# 3个条件输入框随机输入数据
for inputBox in menu.memberNumNamePhone:
menu.iQueryCondition(inputBox,random.choice(menu.valuesList))
#会员类型下拉列表中随机选择一项
menu.selectMemberType()
text_type, member_type = menu.memberTypeLevelOption(*(random.choice(menu.memberTypeNum)))
ActionChains(self.driver).move_to_element(member_type).perform() # 鼠标移动到下拉选项上
member_type.click() # menu.selectMemberLevel()
# text_level, member_level = menu.memberTypeLevelOption(*(random.choice(menu.member_level_num)))
# #ActionChains(self.driver).move_to_element(member_level).perform()
# member_level.click() # 点击【重置】
menu.cQueryResetBtn(*menu.queryResetBtn[1])
# 获取前3个输入框的内容
text_list = []
for input_box in menu.memberNumNamePhone:
text = menu.getInputboxValue(*input_box)
text_list.append(text)
# 获取会员类型
type_type_text = menu.getInputboxValue(*menu.memberTypeBtn)
text_list.append(type_type_text) # type_level_text = menu.getInputboxValue(*menu.member_level_btn)
# text_list.append(type_level_text) # 断言每一个条件框是否为空 为空就通过
for get_attr in text_list:
self.assertEqual('',get_attr) if __name__ == '__main__':
pass
MemberQueryTc.py
# 执行测试用例
#! user/bin/python '''
Code description:auto run test case
Create time:
Developer:
''' import unittest
import time
from BeautifulReport import BeautifulReport
from retail.config.conf import *
from retail.test_case.models.testreport import testreport # TODO : will be use jenkins continuous intergration teachnology manage the auto project
if __name__ == '__main__': # currTime = time.strftime('%Y-%m-%d %H_%M_%S')
# filename = currTime + '.html'
# # 第一种测试报告
# test_suite = unittest.defaultTestLoader.discover(tcPath, pattern='*Tc.py')
# result = BeautifulReport(test_suite)
# result.report(filename= filename, description='test report', log_path=reportPath) # # 第二种测试报告
runner, fp, fileName = testreport()
test_suite = unittest.defaultTestLoader.discover(tcPath, pattern='LoginTc.py')
runner.run(test_suite)
fp.close()
RunTc.py
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 添加时注明:博客园
python+selenium 自动化测试实战的更多相关文章
- 第一章 python+selenium自动化测试实战
@序章 自动化测试是软件测试的主流方向之一: 教程从测试的根本需求出发,讲解如何开展自动化测试. 首先,我们要明白,自动化仅仅是满足我们某种需求的一种工具:没有必要花费时间把它全部弄懂:我们只需要学会 ...
- 第一个python&selenium自动化测试实战项目
说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码,验证是 ...
- python&selenium自动化测试实战项目
https://www.cnblogs.com/linuxchao/p/linuxchao-python-selenium-demo.html
- 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas
1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- Python+selenium自动化测试中Windows窗口跳转方法
Python+selenium自动化测试中Windows窗口跳转方法 #第一种方法 #获得当前窗口 nowhandle=driver.current_window_handle #打开弹窗 drive ...
- 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门
第1章 Selenium自动化测试框架入门 1.1 Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...
- 《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!
1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...
- 《Selenium自动化测试实战》新书上市,有需要朋友们可以了解下,欢迎大家多提宝贵意见
京东:https://item.jd.com/13123910.html当当:http://product.dangdang.com/29204520.html 1. 本书基于 Python 3.8 ...
随机推荐
- SpringMVC, Spring和Mybatis整合案例一
一 准备工作 包括:spring(包括springmvc).mybatis.mybatis-spring整合包.数据库驱动.第三方连接池. 二 整合思路 Dao层: 1.SqlMapConfig. ...
- linux下redis数据库的简单使用
一.redis简介 Redis是一个key-value存储系统.和 Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持list ...
- mysql数据库的安装与配置
mysql数据库的安装与配置及workbench的简单使用 mysql数据库社区版下载:https://dev.mysql.com/downloads/installer/ 我这里选的是社区安装版(适 ...
- async 和 await 之异步编程的学习
async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...
- 关于原生js中bind函数的实现
今天继续研究了bind函数的实现,也知道了shim和polyfill的说法,现在总结一下, if (!Function.prototype.bind) { Function.prototype.bin ...
- python之six用法
six.PY2 返回一个表示当前运行环境是否为python2的boolean值 six.PY3 返回一个表示当前运行环境是否为python3的boolean值 import six,sys print ...
- python - hash类型操作
Redis在内存中存储hash类型是以name对应一个字典形式存储的 常用操作 在name对应的hash中获取根据key获取valuehget(name,key) 在name 对应的hash 中设备键 ...
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- bzoj 3680 吊打xxx 模拟退火
第一道模拟退火 重心嘛,就是要找到一个点,使其到所有点距离*该点权值和最小 思路:初始化一个T,mint,当T大于mint时,每次随机一个解,如果解比当前解优,直接转移,否则,以某概率(与T正相关)转 ...
- POJ_1556_The Doors_判断线段相交+最短路
POJ_1556_The Doors_判断线段相交+最短路 Description You are to find the length of the shortest path through a ...