#!/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. web程序员标准环境之DreamWeaver【…

    Adobe Dreamweaver,简称"DW",中文名称 "梦想编织者",是美国MACROMEDIA公司开发的集网页制作和管理网站于一身的所见即所得网页编辑器 ...

  2. GIF、JPEG 和 PNG的区别在哪…

    原文地址:GIF.JPEG 和 PNG的区别在哪里?作者:苗得雨 GIF.JPEG 和 PNG 是三种最常见的图片格式. GIF:1987 年诞生,常用于网页动画,使用无损压缩,支持 256 种颜色( ...

  3. 软工+C(2017第8期) 提问与回复

    // 上一篇:野生程序员 // 下一篇:助教指南 在线上博客教学里引入了第三方助教,助教在每次作业期间尽力完成"消灭零点评"的目标.然而紧接而来的问题是:学生对博客作业点评的回复率 ...

  4. 团队作业8——第二次项目冲刺(Beta阶段)5.25

    1.当天站立式会议照片 会议内容: 本次会议为第六次会议 本次会议在陆大楼3楼召开,本次会议内容: ①:检查总结上次任务完成情况 ②:安排今天的分工 ③:对昨天的问题进行讨论 ④:遇到困难,及时群里反 ...

  5. 201521123117 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  6. Eclipse rap 富客户端开发总结(12) :Rap 优化之组件的销毁

    一.概述      经过几个月的rap 项目实战,总结了一些小经验,在这里总结一下,希望对大家有所帮助. 二.销毁的处理       相信学习rap 的同学都知道,swt 中提供了许多的组件,像lab ...

  7. CoordinatorLayout的使用

    最近项目有一个需求,做出类似闲鱼鱼塘界面的效果.如下图: 所以想到用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout去搭建此界面. Coor ...

  8. linux下iconv()函数的用法(转载并修改)

    linux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不 ...

  9. java基础知识2--String,StringBufffer,StringBuilder的区别

    String,StringBufffer,StringBuilder的区别 1.可变不可变方面 String类中使用字符数组保存字符串  ,final 修饰当然是不可变的,用String来操作字符串的 ...

  10. centos 7(Linux) 下yum安装mysql

    1:查询centos7 中是否有可安装的mysql.命令查询 yum list mysql* 没有可安装的mysql软件... 2:sudo rpm -Uvh http://dev.mysql.com ...