def wrapped(self, *arg, **kwargs): if self.poco(text="帐号登录").exists(): print(self.device + '在登录方式选择页面_有账号登录元素') self.poco("com.dalan.lgh:id/dalan_agreement_check").click( ) #默认没有勾选需要勾选 self.poco(text="帐号登录").click() sleep(3.0) #判断是否还在当前页面,如果在说明反复勾选了 if self.poco(text="帐号登录").exists(): print(self.device + '需要反向勾选用户协议') self.poco("com.dalan.lgh:id/dalan_agreement_check").click( ) #反向勾选 sleep(1.5) self.poco(text="帐号登录").click() sleep(3.0) if self.poco("com.dalan.lgh:id/dalan_password_input").exists( ): #判断账号框是否存在 for i in range(len(config.devices())): if self.device in config.devices()[i]: print('{}设备对应账号{}'.format(self.device, config.number()[i])) self.poco("com.dalan.lgh:id/dalan_password_input" ).set_text(config.number()[i]) sleep(1.5) self.poco(text="密码").set_text('123456') sleep(1.5) self.poco(text="进入游戏").click() sleep(4.5) return func(self) #装饰完成,调用函数
def test_run(): current_time = time.strftime("%Y-%m-%d") if os.path.exists( os.path.dirname(__file__) + '/all_log/all_print/' + current_time + '.log'): pass else: open( os.path.dirname(__file__) + '/all_log/all_print/' + current_time + '.log', 'w') #执行前获取文件总行数 object = log_read.cd_file( os.path.dirname(__file__) + '/all_log/all_print/' + current_time + '.log') count = object.file() #创建sys.stdout并准备 r_obj = log_print_test.__redirection__() #创建sys.stdout对象 sys.stdout = r_obj r_obj.to_file( os.path.dirname(__file__) + '/all_log/all_print/' + current_time + '.log') #把print写入的文件路径 apk_list = dalan_test() #获取数据库链接 r_obj.to_console( ) #放在print的前,则不写print数据到文件,print直接打在控制台(如果放在print后就写入文件,不在控制台打印) #开始实现多进程 process.dalan_main(config.devices(), apk_list) print( '------------------------------------------------重新获取log增量文件---------------------------------------------------------------------------' ) time.sleep(5) report = object.zai_read(count) #读取增量 re_read = log_read.cd_file( os.path.dirname(__file__) + '/all_log/part_log/' + current_time + '执行关键点_日志.log') log_log = re_read.log_re() log_email.email(report + '\n' + log_log)
def hmzc_deng_lu_b5940085(self): if self.poco(text="帐号登录").exists(): print('{}__欢迎进入登录选择方式页面'.format(self.device)) self.poco( "com.dalan.lgh:id/dalan_agreement_check").click() #默认没有勾选需要勾选 sleep(1.5) self.poco(text="帐号登录").click() sleep(3) if self.poco(text="帐号登录").exists(): print('{}_需要反向勾选协议'.format(self.device)) sleep(1.5) self.poco("com.dalan.lgh:id/dalan_agreement_check").click( ) #默认没有勾选需要勾选 sleep(1.5) self.poco(text="帐号登录").click() sleep(3) #判断并输入帐号 if self.poco(textMatches='^忘记密码.*$').exists(): for i in range(len(config.devices())): #迭代设备个数 if self.device in config.devices()[i]: print('已在登录_在输入账号密码页面_{}设备对应账号{}'.format( self.device, config.number()[i])) self.poco( 'com.dalan.lgh:id/dalan_password_input').set_text( config.number()[i]) self.poco('com.dalan.lgh:id/dalan_msg_input').set_text( '123456') self.poco(text="进入游戏").click() sleep(5.0) sleep(2.0) if exists( Template(r"hmzc_公告_mi9.png", record_pos=(0.001, 0.532), resolution=(1080, 2340))): print('{}游戏前_登录页有公告'.format(self.device)) touch( Template(r"hmzc_公告_mi9.png", record_pos=(0.001, 0.532), resolution=(1080, 2340))) sleep(2.5) if exists( Template(r"hmzc_开始游戏_mi9.png", record_pos=(-0.002, 0.706), resolution=(1080, 2340))): touch( Template(r"hmzc_开始游戏_mi9.png", record_pos=(-0.002, 0.706), resolution=(1080, 2340))) sleep(3) if exists( Template(r"hmzc_创角_mi9.png", record_pos=(0.001, 0.802), resolution=(1080, 2340))): print('{}__已在创角页面_需要创角'.format(self.device)) touch( Template(r"hmzc_创角_mi9.png", record_pos=(0.001, 0.802), resolution=(1080, 2340))) sleep(4) stop_app(self.name) #杀掉进程可跳过新手 sleep(2) start_app(self.name, activity=None) sleep(15) #不走创角流程 elif wait(Template(r"hmzc_游戏内断言.png", record_pos=(0.426, -0.846), resolution=(720, 1280)), timeout=20): print('{}__登录游戏成功'.format(self.device)) img = Screencap.GetScreen(time.time(), self.device, "") return True, '登录游戏成功', img[img.find(r'superdalan.com//') + 16:][:-4] #创角后的操作 if exists( Template(r"hmzc_公告_mi9.png", record_pos=(0.001, 0.532), resolution=(1080, 2340))): print('{}_再次启动跳新手--登录页有公告'.format(self.device)) touch( Template(r"hmzc_公告_mi9.png", record_pos=(0.001, 0.532), resolution=(1080, 2340))) sleep(2.5) if exists( Template(r"hmzc_开始游戏_mi9.png", record_pos=(-0.002, 0.706), resolution=(1080, 2340))): touch( Template(r"hmzc_开始游戏_mi9.png", record_pos=(-0.002, 0.706), resolution=(1080, 2340))) if wait(Template(r"hmzc_游戏内断言.png", record_pos=(0.426, -0.846), resolution=(720, 1280)), timeout=25): print('{}__登录游戏成功'.format(self.device)) img = Screencap.GetScreen(time.time(), self.device, "") return True, '登录游戏成功', img[img.find(r'superdalan.com//') + 16:][:-4] else: print('{}__找不到游戏内元素_未能成功进入游戏'.format(self.device)) img = Screencap.GetScreen(time.time(), self.device, "") return False, '找不到游戏内元素_未能成功进入游戏', img[img.find(r'superdalan.com//' ) + 16:][:-4]
def xy_deng_lu(name): clear_app(name) start_app(name) sleep(2.0) #判断是否有权限弹框 if poco("com.android.packageinstaller:id/permission_deny_button").exists(): for i in range(0, 7): #弹框处理 if poco("com.android.packageinstaller:id/permission_deny_button" ).exists(): poco(text="始终允许").click() else: print("已授权_或无需授权=%d" % i) break try: #已有账号记录 if poco(text="同意并进入游戏").wait(15).exists(): poco(text="同意并进入游戏").click() print('已进入登录_协议页面') sleep(20.0) pd_gonggao = baidu_shibie.compressImage('chen.png', 0.42, 0.09, 0.17, 0.05) #获取公告 if pd_gonggao == '公告': print('有公告') poco().click((0.947, 0.101)) if exists( Template(r"开始游戏.png", record_pos=(0.0, 0.592), resolution=(720, 1280))): poco().click((0.502, 0.825)) #开始游戏 print('点击开始游戏') sleep(25.0) poco().click((0.500, 0.900)) #选择角色页面_可能不用选择,为了保险还是点下 if wait( Template(r"游戏内元素.png", record_pos=(-0.408, 0.831), resolution=(720, 1280)), 30): print('成功进入游戏') else: print('进入游戏失败_未找到元素') #新注册账号_新手机或清缓存会有 elif poco(text="进入游戏").exists(): poco(text="进入游戏").click() if poco(text="我知道了").wait(10).exists(): poco(text="我知道了").click() print('注册账号成功') sleep(10.0) poco().click((0.500, 0.900)) #选择角色页面 sleep(25.0) paduan = baidu_shibie.compressImage('chen.png', 0.5, 0.01, 0.15, 0.03) if paduan == 0: print('进入游戏成功') else: print('进入游戏失败_未找到元素') chongzhi_q = baidu_shibie.compressImage('chen.png', 0.43, 0.01, 0.21, 0.03) #充值前获取用户拥有的金额 print('充值前的金额', chongzhi_q) poco().click((0.582, 0.028)) #点击顶部充值 sleep(3.0) chongzhi_y = baidu_shibie.compressImage('chen.png', 0.81, 0.68, 0.13, 0.03) #获取充值页元素 if chongzhi_y == '充值6元': print('已进入充值档位页面_首次充值') sleep(4.0) poco().click((0.9, 0.689)) #点击充值6元 elif baidu_shibie.compressImage('chen.png', 0.60, 0.60, 0.20, 0.10) == '6元': print('已进入充值档位页面_非首次充值') poco().click((0.696, 0.628)) #点击充值6元 else: print('进入充值页面失败') poco(text="微信").click() #微信支付 sleep(4.0) poco(text="立即支付").click() print('微信支付_输入密码页') sleep(3.0) #输入支付密码 touch((220.0, 2060.0)) #4 touch((1202.0, 1844.0)) touch((720.0, 1850.0)) touch((222.0, 2268.0)) touch((752.0, 2435.0)) touch((777.0, 2048.0)) sleep(2.0) poco(text="完成").click() #完成后自动跳转到充值档位页面 sleep(2.5) poco().click((0.934, 0.032)) #关闭充值档位_回到首页 sleep(1.5) chongzhi_h = baidu_shibie.compressImage('chen.png', 0.43, 0.01, 0.15, 0.03) #充值前获取用户拥有的金额 if int(chongzhi_h) == int(chongzhi_q) + 600: print('充值成功') return True elif int(chongzhi_h) == int(chongzhi_q) + 1200: print('首次充值双倍') return True elif int(chongzhi_h) < int(chongzhi_q) + 600: print('充值未到账') return False else: print('充值判断失败') return False except: print('已走异常流程_截图异常页面(原因:主要是因为没有进入指定页面_)') Screencap.GetScreen(time.time(), config.devices(), "mxd_deng_lu") #手动截图
#!/usr/bin/env python # encoding: utf-8 from airtest.core.api import * from dalan_tools import Screencap, config, baidu_shibie auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco connect_device("Android://127.0.0.1:5037" + '/' + config.devices()) poco = AndroidUiautomationPoco() sleep(1.5) def xy_deng_lu(name): clear_app(name) start_app(name) sleep(2.0) #判断是否有权限弹框 if poco("com.android.packageinstaller:id/permission_deny_button").exists(): for i in range(0, 7): #弹框处理 if poco("com.android.packageinstaller:id/permission_deny_button" ).exists(): poco(text="始终允许").click() else: print("已授权_或无需授权=%d" % i) break try: #已有账号记录 if poco(text="同意并进入游戏").wait(15).exists():
def mxd_deng_lu(device, name): #冒险岛 '''登录游戏处理操作''' connect_device("Android:///" + device) auto_setup(__file__) poco = AndroidUiautomationPoco() sleep(3.0) try: if poco(text="同意并进入游戏").exists(): #首次进入游戏 print('{}欢迎进入登录页'.format(device)) sleep(2.0) poco(text="同意并进入游戏").click() sleep(6.0) #弹窗快速注册页面 if poco(textMatches='^我有账号.*$').exists(): poco(textMatches='^我有账号.*$').click() sleep(2.0) if poco(textMatches='^找回密码.*$').exists(): for i in range(len(config.devices())): # if device in config.devices()[i]: print('已在登录_在输入账号密码页面_{}设备对应账号{}'.format( device, config.number()[i])) poco('com.xy.qjsg:id/xy_etx_account').set_text( config.number()[i]) poco('com.xy.qjsg:id/xy_etx_pwd').set_text('123456') poco(text="进入游戏").click() sleep(6.0) if exists( Template(r"mxd_公告.png", record_pos=(-0.004, -0.176), resolution=(1920, 1080))): print('{}游戏前_登录页有公告'.format(device)) poco().click((0.484, 0.824)) #关闭公告 sleep(4.0) elif exists( Template(r"mxd_公告.png", record_pos=(-0.004, -0.176), resolution=(1920, 1080))): print('{}外部-游戏前_登录页有公告'.format(device)) poco().click((0.484, 0.824)) #关闭公告 sleep(3.0) if exists( Template(r"mxd_切换账号.png", record_pos=(0.444, -0.212), resolution=(1280, 720))): touch( Template(r"mxd_切换账号.png", record_pos=(0.444, -0.212), resolution=(1280, 720))) sleep(3.0) #判断是否在登录_输入账号密码页面 if poco(textMatches='^找回密码.*$').exists(): print('{}外部--已在登录_在输入账号密码页面'.format(device)) for i in range(len(config.devices())): if device in config.devices()[i]: print('{}设备对应账号{}'.format(device, config.number()[i])) poco('com.xy.qjsg:id/xy_etx_account').set_text( config.number()[i]) poco('com.xy.qjsg:id/xy_etx_pwd').set_text('123456') poco(text="进入游戏").click() sleep(6.0) elif poco(text="帐号登录").exists(): #新版sdk print(device + '在登录方式选择页面') poco("com.dalan.lgh:id/dalan_agreement_check").click() #默认没有勾选需要勾选 poco(text="帐号登录").click() sleep(3.0) #判断是否还在当前页面,如果在说明反复勾选了 if poco(text="帐号登录").exists(): print(device + '需要反向勾选用户协议') poco("com.dalan.lgh:id/dalan_agreement_check").click() #反向勾选 sleep(1.0) poco(text="帐号登录").click() sleep(3.0) #即将进入帐号输入页面 if poco(textMatches='^忘记密码.*$').exists(): for i in range(len(config.devices())): # if device in config.devices()[i]: print('已在登录_在输入账号密码页面_{}设备对应账号{}'.format( device, config.number()[i])) poco('com.dalan.lgh:id/dalan_password_input').set_text( config.number()[i]) poco('com.dalan.lgh:id/dalan_msg_input').set_text('123456') poco(text="进入游戏").click() sleep(6.0) if exists( Template(r"mxd_公告.png", record_pos=(-0.004, -0.176), resolution=(1920, 1080))): print('{}游戏前_登录页有公告'.format(device)) poco().click((0.484, 0.824)) #关闭公告 sleep(4.0) else: print('{}找不到_同意并进入游戏,或元素超时'.format(device)) if exists( Template(r"mxd_开始冒险.png", threshold=0.6, record_pos=(0.003, 0.198), resolution=(1920, 1080))): poco().click((0.626, 0.676)) #点击进入选区 sleep(3) poco().click((0.198, 0.220)) #点击我的角色模块 print('{}游戏前_选择角色'.format(device)) sleep(3.0) img_3625 = Template(r"mxd_3625_角色.png", record_pos=(-0.037, -0.091), resolution=(1920, 1080)) img_669 = Template(r"mxd_669_角色.png", record_pos=(-0.041, -0.089), resolution=(1280, 720)) img_list = [img_669, img_3625] for pic in img_list: pos = exists(pic) if pos: print('{}_循环查询角色'.format(device)) touch(pos) break # 只要找到图片列表中的任何一张图片,就执行touch else: pass sleep(4.0) poco().click([0.500, 0.845]) #开始冒险 try: if wait( Template(r"mxd_进入游戏按钮.png", record_pos=(0.334, 0.231), resolution=(1280, 720)), 18): touch( Template(r"mxd_进入游戏按钮.png", record_pos=(0.334, 0.231), resolution=(1280, 720))) try: if wait( Template(r"mxd_游戏内任务.png", record_pos=(0.334, 0.231), resolution=(1280, 720)), 30): print('{}进入游戏_成功'.format(device)) img = Screencap.GetScreen(time.time(), device, "True") return True, '登录成功', img[img.find(r'superdalan.com//' ) + 16:][:-4] except: print('{}进入游戏异常_找不到元素'.format(device)) img = Screencap.GetScreen(time.time(), device, "True") return False, '找不到游戏内元素_未能成功进入游戏', img[ img.find(r'superdalan.com//') + 16:][:-4] except: print('{}在选服后出现异常,可能在维护(-详情看截图)'.format(device)) img = Screencap.GetScreen(time.time(), device, "True") return False, '在选服后出现异常,可能在维护,详情看截图', img[ img.find(r'superdalan.com//') + 16:][:-4] except: print('{}已走异常流程_截图异常页面(原因:主要是因为没有进入指定页面_)'.format(device)) img = Screencap.GetScreen(time.time(), device, "True") return False, '由于网络原因,或手机反应慢到导致元素无法找到', img[img. find(r'superdalan.com//') + 16:][:-4]