# coding=gbk
# 宝贝计划登录脚本
import sql
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait as w
import makefiles as mf
import sys
reload(sys) # 重载sys模块
sys.setdefaultencoding('gbk') # 设置默认的十进制编码(解决读取或写入Unicode编码时提示越界)
'''
在python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目标是Unicode,
即编码unicode→str,解码str→unicode,
其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,
u.encode是将unicode类按给定的编码方式转换成字节流str。
注意调用encode方法的是unicode对象,生成的是字节流;
调用decode方法的是str对象(字节流),生成的是unicode对象。
若str对象调用encode会默认先按系统默认编码方式decode成unicode对象再encode,忽视了中间默认的decode往往导致报错。
'''
class Once():
err = 0 # 登录异常数量
passed = 0 # 登录通过数量
fail = 0 # 登录失败数量
def login(self,user,passwd):
wd = webdriver.Firefox() # 打开浏览器
wd.get("http://192.168.15.82:8080/BabyPlan/login.jsp") # 打开项目网址
try:
w(wd, 10).until(lambda x: x.find_element_by_id("userName").is_displayed()) # 显示等待方法,同上
wd.find_element_by_id("userName").send_keys(user) # 找到对象后再赋值
wd.find_element_by_id("password").send_keys(passwd)
wd.find_element_by_id("loginForm").submit()
name = wd.find_element_by_partial_link_text(u"欢迎来到宝贝计划在线教育").text # 获取登录名元素
#print name
self.passed+=1
m = mf.makefile("log/login_pass.log")
m.w(u"账号:%s\n密码:%s\n" % (user, passwd))
# if(user == str(name).replace(u",欢迎来到宝贝计划在线教育","")):
# print u"登录成功!"
except:
try:# 登录失败
m = mf.makefile("log/login_fail.log")
m.w(u"账号:%s\n密码:%s\n" % (user, passwd))
self.fail+=0
except: # 登录异常
self.err+=1
m = mf.makefile("log/login_err.log")
m.w(u"账号:%s\n密码:%s\n" % (user, passwd))
finally:
wd.get_screenshot_as_file("log/login_fail_"+time.strftime(format("%Y_%m_%d_%H_%M_%S"))+".png")
finally:
wd.quit()
if __name__ == '__main__':
a = sql.getUser() # 获取到所有用户的数据(是一个字典)
Test = Once() # 实例化Test类
for i in a:
Test.login(i,a[i]) # 调用Test类里面的login方法,这样就不会影响到类变量的初始化,得到正确的执行数量
print u"执行总数:%d,成功数量:%d,失败数量:%d,异常数量%d" % (Test.passed + Test.fail + Test.err, Test.passed, Test.fail, Test.err)
分类
login
阅读(849) 评论(0)