Python实战之Selenium自动化测试web登录(2)
#!/usr/bin/env python3
# -*- coding:utf-8 -*- from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
from userdata import get_webinfo, get_userinfo, XlUserInfo
from log_module import Loginfo, Xlloginfo def get_ele_times(driver, times, func):
return WebDriverWait(driver, times).until(func) def openBrower():
'''
:return: webdriver handle
'''
webdriver_handle = webdriver.Firefox()
return webdriver_handle # def openUrl(handle, url):
# handle.get(url)
# handle.maximize_window() def openUrl(handle, arg):
handle.get(arg['url'])
handle.maximize_window() def findElement(d, arg):
'''
1.test_id:
2.USERID
3.pwdid
4.loginid
:param d:
:param arg:
:return:
'''
if 'text_id' in arg:
ele_login = get_ele_times(d, 10, lambda d: d.find_element_by_link_text(arg['text_id']))
ele_login.click()
userEle = d.find_element_by_id(arg['userid'])
pwdEle = d.find_element_by_id(arg['pwdid'])
loginEle = d.find_element_by_id(arg['loginid'])
# sign_out
# signOutEle = d.find_element_by_id(arg['signOutid'])
# print(signOutEle)
return userEle, pwdEle, loginEle def findOutele(d, arg):
try:
signOutEle = d.find_element_by_id(arg['signOutid'])
return signOutEle
except:
print("You are not login.") def sendVal(eletuple, arg):
''' :param eletuple:
:param arg:
:return:
'''
list_key = ['uname','pwd']
i = 0
for key in list_key:
eletuple[i].send_keys('')
eletuple[i].clear()
# print(arg[key])
eletuple[i].send_keys(arg[key]) i += 1
eletuple[2].click() def checkResult(d, err_id, arg, log):
result = False
time.sleep(3)
try:
err = d.find_element_by_id(err_id)
print("Account and pwd error")
# msg = "account:{},password:{}==>error:{}".format(arg['uname'],arg['pwd'], err.text)
log.log_write(arg['uname'], arg['pwd'], 'Error', err.text)
print(err.text)
except:
print("Account and pwd Right")
# msg = "Account:{},password:{}==>pass!".format(arg['uname'], arg['pwd'])
log.log_write(arg['uname'], arg['pwd'], 'Pass')
result = True
return result def logout(d, ele_dict):
d.find_element_by_class_name(ele_dict['logout']).click() def login_test(ele_dict,user_list):
d = openBrower()
# log = Loginfo()
log = Xlloginfo()
log.log_init('sheet1', 'uname', 'pwd','result', 'message')
openUrl(d, ele_dict)
ele_tuple = findElement(d, ele_dict)
# print(user_list[0])
for user_info in user_list:
sendVal(ele_tuple, user_info)
result = checkResult(d, ele_dict['errorid'], user_info, log)
# sign_out
# findOutele(d, ele_dict).click()
if result:
# logout
logout(d, ele_dict)
#login
ele_tuple = findElement(d, ele_dict)
else:
ele_tuple = findElement(d, ele_dict)
log.log_close() if __name__ == '__main__':
'''
ele_dict = {
'url': 'http://www.maiziedu.com',
'uname':'maizi_test@139.com',
'pwd': 'abc123456',
'login_text':'Login',
'text_id': login_text,
'userid': 'id_account_l',
'pwdid': 'id_password_l',
'loginid': 'login_btn',
'signOutid':'sign_out',
}
user_list = [{'uname':account,'pwd':pwd},]
'''
# file webinfo/userinfo get_webinfo(path),user_list = get
ele_dict = get_webinfo(r'webinfo.txt')
# user_list = get_userinfo(r'userinfo.txt')
xinfo = XlUserInfo(r'userinfo.xlsx')
user_list = xinfo.get_sheetinfo_by_index(0)
login_test(ele_dict,user_list)
Log_Module
#!/usr/bin/env python3
# -*- coding:utf-8 -*- import time
import xlsxwriter
class Loginfo(object):
def __init__(self, path = '', mode= 'a'):
self.file_time = time.strftime('%Y-%m-%d', time.gmtime())
self.log_time = time.strftime('%H-%M-%S')
fname = "{}{}".format(path, self.file_time)
self.log = open("{}{}.txt".format(path, fname), mode) def log_init(self, sheetname, *title):
pass def log_write(self, msg):
self.log.write("\n{}+{}".format(self.log_time, msg)) def log_close(self):
self.log.close() class Xlloginfo(object):
def __init__(self, path = ''):
fname = '{}{}'.format(path,time.strftime('%Y-%m-%d', time.gmtime()))
self.row = 0
self.xl = xlsxwriter.Workbook(path+fname+'.xls')
self.style = self.xl.add_format({'bg_color':'red'}) def xl_write(self, *args):
col = 0
style = ''
if 'Error' in args:
style = self.style
for val in args:
self.sheet.write_string(self.row, col, val)
col += 1
self.row += 1 def log_init(self, sheetname, *title):
self.sheet = self.xl.add_worksheet(sheetname)
self.sheet.set_column('A:E', 30)
self.xl_write(*title) def log_write(self, *args):
self.xl_write(*args) def log_close(self):
self.xl.close() if __name__ == '__main__':
# log = Loginfo()
# log.log_write('hahaha')
# log.log_close() xinfo = Xlloginfo()
xinfo.log_init('test12','uname','pwd', 'result', 'info')
xinfo.log_close()
UserData
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import codecs
import xlrd, xlsxwriter def get_webinfo(path):
web_info = {}
with codecs.open(path,'r','utf-8') as config:
for line in config:
result = [ele.strip() for ele in line.split('=')]
# print("Result,",result)
web_info.update(dict([result]))
return web_info def get_userinfo(path):
user_info = []
with codecs.open(path,'r','utf-8') as config:
for line in config:
user_dict = {}
result = [ele.strip() for ele in line.split(';')]
for info in result:
account = [ele.strip() for ele in info.split('=')]
# print(account)
# print("Dict",dict([account]))
user_dict.update(dict([account]))
user_info.append(user_dict)
return user_info class XlUserInfo(object):
def __init__(self, path= ''):
self.xl = xlrd.open_workbook(path) def floattostr(self, val):
if isinstance(val, float):
val = str(int(val))
return val def get_sheet_info(self):
listkey = ['uname','pwd']
infolist = []
for row in range(1, self.sheet.nrows):
info = [self.floattostr(val) for val in self.sheet.row_values(row)]
temp = zip(listkey, info)
infolist.append(dict(temp))
return infolist def get_sheetinfo_by_name(self, name):
self.sheet = self.xl.sheet_by_name(name)
return self.get_sheet_info() def get_sheetinfo_by_index(self, index):
self.sheet = self.xl.sheet_by_index(index)
return self.get_sheet_info() if __name__ == '__main__':
# userinfo = get_userinfo(r'userinfo.txt')
# print(userinfo)
# for user in userinfo:
# print(user)
# webinfo = get_webinfo(r'webinfo.txt')
# print(webinfo)
xinfo = XlUserInfo(r'userinfo.xlsx')
info = xinfo.get_sheetinfo_by_index(0)
print(info)
info = xinfo.get_sheetinfo_by_name('Sheet1')
print(info)
Python实战之Selenium自动化测试web登录(2)的更多相关文章
- Python实战之Selenium自动化测试web登录
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver ...
- Python实战之Selenium自动化测试web刷新FW
需求:将手工登录,手工刷新服务器的FW转化为Python+Selenium实现自动化操作. 1.创建用户表,实现数据与脚本分离.需要读取模块. 2.自动化刷新FW. 不说话,直接上代码: 1userd ...
- 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...
- 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...
- python selenium 自动化测试web
如何使用python完成自动化测试web页面呢?首选selenium 那基于python的selenium如何使用,下面看一段测试案例: 基于python的selenium 安装方法: pip i ...
- python实战项目 — selenium登陆豆瓣
利用selenium 模仿浏览器,登陆豆瓣 重点: 1. 要设置好 chromedriver配置与使用, chromedriver.exe 和 Chrome的浏览器版本要对应, http://chro ...
- 使用python+selenium对web进行自动化测试
想用python代码,对web网页进行自动化测试 web自动化测试和手动测试的区别: 手动测试:通过手动去对网页的功能进行点点点 web自动化:可以通过代码,自动对网页点点点 首先,将python+s ...
- 第一个python&selenium自动化测试实战项目
说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码,验证是 ...
- 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门
第1章 Selenium自动化测试框架入门 1.1 Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...
随机推荐
- Linux-mount命令和umount命令 (8)
mount:用于挂载文件系统,使能访问其它文件系统中的资源 umount:用于卸载已挂载的文件系统 mount: 格式: mount [-参数] [设备名称] [挂载点] 其中常用的参数(参数默认自带 ...
- 汇编指令-CMP、TEQ(5)
cmp:(compare)指令进行比较两个操作数的大小 格式: cmp oprd1,oprd2 比较oprd1和oprd2操作数,然后通过助记符来实现想要的判断. teq: (test equal ...
- Java的构造器
初始化和清理是涉及安全的两个问题.C++和Java都引入了构造器(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法. 可以假想为编写的每个类都定义一个initialize()方 ...
- tkinter第一章
tk1 ------------------------------------------------------------------------------------------ impor ...
- 201521123010 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 ①List中指定元素的删除(题目4-1) 1.1 实验总结 A: 这道题是老 ...
- 201521123093 java 第四周学习总结
1.平面作业 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1.类与方法的注释 2.super关键字代表的是父类,super.方法表示调用的是父类 2. ...
- 201521123030《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 控制可见性的4个访问修饰符 private -- 仅对本类可见 public -- 对所有类 ...
- 解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
想必不少人都会遇到题目中的问题.我在一次和舍友一起重装系统的时候变遇到了上述的问题, 经过仔细分析发现电脑会出现上述问题所必要的条件 系统中没有存在合理的运行库文件 所运行的软件是之前重装系统之间留下 ...
- 201521123064 《Java程序设计》第9周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次作业题集异常 Q1:常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前 ...
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
Mybatis缓存 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. myba ...