#!/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)的更多相关文章

  1. Python实战之Selenium自动化测试web登录

    #!/usr/bin/env python3 # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver ...

  2. Python实战之Selenium自动化测试web刷新FW

    需求:将手工登录,手工刷新服务器的FW转化为Python+Selenium实现自动化操作. 1.创建用户表,实现数据与脚本分离.需要读取模块. 2.自动化刷新FW. 不说话,直接上代码: 1userd ...

  3. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  4. 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)

    1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...

  5. python selenium 自动化测试web

    如何使用python完成自动化测试web页面呢?首选selenium   那基于python的selenium如何使用,下面看一段测试案例: 基于python的selenium 安装方法: pip i ...

  6. python实战项目 — selenium登陆豆瓣

    利用selenium 模仿浏览器,登陆豆瓣 重点: 1. 要设置好 chromedriver配置与使用, chromedriver.exe 和 Chrome的浏览器版本要对应, http://chro ...

  7. 使用python+selenium对web进行自动化测试

    想用python代码,对web网页进行自动化测试 web自动化测试和手动测试的区别: 手动测试:通过手动去对网页的功能进行点点点 web自动化:可以通过代码,自动对网页点点点 首先,将python+s ...

  8. 第一个python&selenium自动化测试实战项目

    说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码,验证是 ...

  9. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

随机推荐

  1. 《个人-GIT使用方法》

    使用GIT版本控制工具及基本使用方法(安装,新建,推送,拉取),托管平台的使用方法. Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 ...

  2. input[type="button"]与<button>的区别

    <button>标签  浏览器支持  所有主流浏览器都支持<button>标签.  重要事项:如果在HTML表单中使用button元素,不同的浏览器会提交不同的值.IE将提交& ...

  3. hdu 3549最大流Ford-Fulkerson算法

    Ford-Fulkerson算法 戳戳http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html Ford-Fulkerson方法依 ...

  4. express传输buffer文件

    最近要做一个功能,导出动态生成的excel文件,这个普普通通的功能却让我折腾了半天.大致流程是这样的,将数据结合excel模板通过ejsExcel库,动态生成excel文件,并发送到客户端. 在exp ...

  5. java伪代码《大道至简》

    阅读<大道至简>第一章,深感作者对编程问题的精炼定义,通过对古老寓言故事<愚公移山>的引用,说明了编程的本质,即顺序,分支,循环.其中又将他们扮演的项目组织者,团队经理,编程人 ...

  6. 8个超震撼的HTML5和纯CSS3动画源码

    HTML5和CSS3之所以强大,不仅因为现在大量的浏览器的支持,更是因为它们已经越来越能满足现代开发的需要.Flash在几年之后肯定会消亡,那么HTML5和CSS3将会替代Flash.今天我们要给大家 ...

  7. 201521123084 《Java程序设计》第7周学习总结

    第7周-集合 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind ------------------------------------------- ...

  8. 扫雷游戏制作过程(C#描述):第四节、菜单操作

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 菜单操作 我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用. 现在我们希望在对应级别 ...

  9. Quartz的misfire处理机制分析

    Quartz是一个特性丰富的开源的任务调度开发库,它可以很方便的集成到你的应用程序中.在Quartz中,当一个持久的触发器因为调度器被关闭或者线程池中没有可用的线程而错过了激活时间时,就会发生激活失败 ...

  10. java第一次作业0

    lsl321 java第一次作业 #1. 本章学习总结 你对于本章知识的学习总结 本章我们学习了各种java相关文件的使用,以及码云,博客,pat等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...