from conf import AutoConf#先判断有没有配置文件path_file=”./conf.json”config=AutoConf(path_file)conf=config.getconf()# conf[‘userinfo’]包含帐号信息userinfo=conf[‘userinfo’]# 声明重试次数retry=int(userinfo[‘retry’])
1.定义一个装饰器,返回json格式的数据
# 定义一个计时的装饰器def timek(func):# print(args)def inner(*args,**kw):# print(args)#args是浏览器对象# print(kw) #是tmp字典start_time=time.perf_counter()res=func(*args,**kw)# print(res)usetime=time.perf_counter()-start_timeresxx={“status”:res,”time”:usetime}# print(resxx)#这里进行判断是否为none是因为func函数用了递归所以要进行判断res是否为none,为none不正常# print(res==None)return resxx#func函数成功执行才返回结果,否则不返回中断return inner
2.定义一个双层函数来执行具体的事件行为,外层函数用来配合装饰器统计时间,内层函数用来解决递归和装饰器冲突的问题
@timekdef smstest(browser,tmp=retry):”’admin1帐号对短信平台手动核验”’def _smstest(browser,tmp):try:#开头考虑第二次有弹窗browser.todefault()xx=browser.byname(“module”)browser.toframe(xx)xx=browser.byid(“module_586708682065679”) #点击短信平台browser.execute_script(“arguments[0].click()”,xx)browser.todefault()#点击手工短信发送xx=browser.byatext(“手工短信发送”)browser.execute_script(“arguments[0].click();”,xx)browser.todefault()xx=browser.byname(“main”)browser.toframe(xx)time.sleep(0.3)xx=browser.byname(“sMPNumber”)browser.execute_script(“arguments[0].click();”,xx)time.sleep(0.5)# 输入手机号码回车准备发送短信xx.send_keys(userinfo[‘phone’])time.sleep(0.3)xx.send_keys(Keys.ENTER)browser.byname(“sMessageContent”).send_keys(“测试短信接口”)xx=browser.byname(“send”)browser.execute_script(“arguments[0].click();”,xx)# time.sleep(0.8)waitalert(browser)browser.switch_to.alert.accept()waitalert(browser)xx=browser.switch_to.alertxxtext=xx.text# print(xxtext)xx.accept()#退出登录logout(browser)if “完成” in xxtext:return “短信发送成功”elif “失败” in xxtext:return “短信发送失败”except Exception as e:print(e)if tmp!=0:tmp-=1time.sleep(0.3)return _smstest(browser,tmp=tmp)else:return “未知错误”return _smstest(browser,tmp)
3.selenium等待函数,根据ajax或者弹窗或者frame智能等待处理.
# 等待alert出现,否则一直等def waitalert(browser,time=8):”’等待alert出现,否则就等0.5秒,超过8秒跳过”’try:browser.switch_to.alertexcept:print(“等待alert出现”)timetmp=0alertstatus=0while alertstatus==0:if timetmp<8:timetmp+=0.5time.sleep(0.5)waitalert(browser,time=8)else:break# 判断关键词keyword是否在text中 ====暂时可能有问题,用pagewaitqdef pagewait(keywords, textobj, waittime=5):”’判断关键词keywords是否在textobj,不在一直等,存在返回1,主要对ajax页面进行分析”’# global browserppagestat = 0timek = 0while ppagestat == 0:if “请稍等” not in textobj:ppagestat = 1elif keywords in textobj:ppagestat = 1else:print(“else等待元素出现”)time.sleep(0.1)timek += 1if timek > waittime * 2:#默认最大等待时间30s,超时跳出breakreturn ppagestat# 切换银行帐号的等待函数def bankwait(browser,t=1):”’切换七家银行的等待时间”’try:print(“又一次等待银行返回数据”)browser.byclass(“ItemBody”)print(“找到返回元素了….”)except:#异常只执行一次if t<4:t+=1bankwait(browser,t)
转载请注明:稻香的博客 » python装饰器与递归函数的联合应用[可配置]