def __init__(self): self.info = Information() self.my_andriod_poco = MyPocoObject() self.eg = EntryGame() self.phone_name = self.info.get_phone_name() self.use_name = self.info.get_config("Account_Number", "YzTest2") self.game_name = self.info.get_config("App_Name", "game_name") # 获取设备型号 self.high = self.info.get_config("Phone_Model", "high") self.medium = self.info.get_config("Phone_Model", "medium") self.low = self.info.get_config("Phone_Model", "low") self.test = self.info.get_config("Phone_Model", "test") self.high_touch_x = self.info.get_config("Coordinate", "high_start_x") self.high_touch_y = self.info.get_config("Coordinate", "high_start_y") self.medium_touch_x = self.info.get_config("Coordinate", "medium_start_x") self.medium_touch_y = self.info.get_config("Coordinate", "medium_start_y") self.low_touch_x = self.info.get_config("Coordinate", "low_start_x") self.low_touch_y = self.info.get_config("Coordinate", "low_start_y") self.test_touch_x = self.info.get_config("Coordinate", "test_start_x") self.test_touch_y = self.info.get_config("Coordinate", "test_start_y") self.high_end_x = self.info.get_config("Coordinate", "high_end_x") self.high_end_y = self.info.get_config("Coordinate", "high_end_y") self.medium_end_x = self.info.get_config("Coordinate", "medium_end_x") self.medium_end_y = self.info.get_config("Coordinate", "medium_end_y") self.low_end_x = self.info.get_config("Coordinate", "low_end_x") self.low_end_y = self.info.get_config("Coordinate", "low_end_y") self.test_end_x = self.info.get_config("Coordinate", "test_end_x") self.test_end_y = self.info.get_config("Coordinate", "test_end_y") self.game_name = self.info.get_config("App_Name", "game_name")
def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") if self.game_name == "com.youzu.test.qa": pass else: pass
def __init__(self): """ 在if、elif结构中初始化对象 """ self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") if self.game_name == "com.youzu.test.qa": self.rgss2 = ResourceGmSs2() else: pass
def __init__(self): """ 初始化点击类、信息类、性能类 """ self.my_poco = MyPocoObject() self.info = Information() self.xn = YzTest2Performance() self.eg = EntryGame() self.fg = Fight() self.rg = ResourceGm() self.na = NewAccount() self.sp = Protocol() self.mrc = MyRunCase()
class NewAccountSs2: def __init__(self): self.info = Information() self.rg = ResourceGm() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") def new_account_ss2(self, resource_dic_input, sever_name_input, play_dic): """ ss2的创建一个符合要求的账号,时间戳账号记录在config.ini.new_game_account字段 :param dic_input: 字典,账号的数据 :param sever_name_input: 区服名 :return: """ home() stop_app(self.game_name) sleep(2) start_app(self.game_name) sleep(10) self.poco = StdPoco() self.my_poco.set_poco(self.poco) newUser = str(int(time.time()))[3:] # 时间戳截取账号 self.info.set_config("Account_Number", "new_game_account", newUser) # 记录账号 self.my_poco.find_poco("InputName", find_type="name") text(newUser) self.my_poco.find_poco("确 认") self.my_poco.find_poco("公 告", click_name="AnnoCloseBtn", click_type="name") self.my_poco.find_poco("点击选服") self.my_poco.find_poco( self.poco("List_kind_server").child(text="11 - 20区"), find_type="obj", click_list=[0.95, 0.15]) # todo 不同游戏可能要改 sever_name = self.info.get_config("Sever_Name", sever_name_input) self.my_poco.find_poco( self.poco("List_server").offspring(text=sever_name), find_type="obj") self.my_poco.find_poco("Txt_guide", find_type="name") # 关闭新手引导 self.my_poco.find_poco("Btn_login", find_type="name") # 开始游戏 sleep(5) self.my_poco.find_poco("进入游戏") # 创建角色 sleep(15) self.rg.add_resource(resource_dic_input) # 添加资源 if "副本" in play_dic.keys(): self.rg.set_play_fuben_num(play_dic["副本"]) if "列传" in play_dic.keys(): self.rg.set_play_liezhuan_num(play_dic["列传"]) stop_app(self.game_name) # 操作完毕后关闭游戏
class UnexpectedWin: def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") def set_poco(self, poco_input): """ :param poco_input: 用于设置和切换不同的poco对象 :return: """ self.poco = poco_input def unexpected_win(self): """ 异常弹窗跳过,区分不同的游戏走不同的逻辑 :param poco_input: poco对象 :return: """ if self.game_name == "com.youzu.wgame2": sxuw = UnexpectedWinSx() sxuw.sx_unexpected_win() elif self.game_name == "com.youzu.test.qa": ss2uw = UnexpectedWinSs2() ss2uw.set_poco(self.poco) ss2uw.ss2_unexpected_win() else: pass
class Fight: """ 后续需要废弃,改为gm后台发送经验进行升级,不需要循环打副本 """ def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") def to_fight(self, sections_name, find_type1, click_name1, ynlist1, click_type1, number_of_times, find_level): """ 重复战斗功能,用于练级等需要手动提升等级的操作 :param 参数列表同find_poco,但不含click_list :param number_of_times: 战斗几次 :param find_level: 到什么等级停止 :return: """ if self.game_name == "com.youzu.test.qa": fgss2 = FightSs2() fgss2.ss2_fight(sections_name, find_type1, click_name1, ynlist1, click_type1, number_of_times, find_level) elif self.game_name == "com.youzu.wgame2": fgsx = FightSx() fgsx.sx_fight(sections_name, find_type1, click_name1, ynlist1, click_type1, number_of_times, find_level) else: pass
class EntryGameSx: def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") self.sever_poco = self.info.get_config("Sever_poco", self.game_name) def entry_game_sx(self, sever_name_input, game_account_input): """ sx的登录游戏,游戏已经启动,到游戏主界面的操作 :param sever_name_input: 服务器名称,和ini中一致 :param game_account_input: 需要登录的账号,和ini中一致 :return: """ poco = StdPoco() self.my_poco.set_poco(poco) game_account = self.info.get_config("Account_Number", game_account_input)
class EntryGame: def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") self.sever_poco = self.info.get_config("Sever_poco", self.game_name) def open_game(self, sever_name_input, game_account_input): """ 启动游戏并到游戏主界面,返回一个poco对象,用于用例使用 :return: """ snapshot(msg="上个脚本结束画面") home() stop_app(self.game_name) sleep(2) start_app(self.game_name) sleep(20) poco = self.entry_game(sever_name_input, game_account_input) return poco def close_game(self): """关闭游戏""" snapshot(msg="关闭游戏") stop_app(self.game_name) # 接口方法,后期拓展游戏使用 def entry_game(self, sever_name_input, game_account_input): """ 登录游戏,从游戏启动到进入游戏主界面的一系列操作 :return:poco """ if self.game_name == "com.youzu.test.qa": # ss2 egss2 = EntryGameSs2() poco = egss2.entry_game_ss2(sever_name_input, game_account_input) return poco elif self.game_name == "com.youzu.wgame2": egsx = EntryGameSx() poco = egsx.entry_game_sx(sever_name_input, game_account_input) return poco else: pass
class FightSs2: def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") self.poco = StdPoco() self.my_poco.set_poco(self.poco) def ss2_fight(self, sections_name, find_type1, click_name1, ynlist1, click_type1, number_of_times, find_level): # 循环 for i in range(number_of_times): # 开始点击战斗之前,判断体力是否足够 physical_strength_str = self.poco("Comp_res1").child( "Label_vit").get_text() physical_strength_int = int(physical_strength_str) if physical_strength_int <= 10: self.my_poco.find_poco( self.poco("Comp_res1").child("Label_vit"), find_type="obj") tld_str = self.poco("Comp_base").child("Txt_Num").get_text() tld_int = int(tld_str) if tld_int == 0: self.my_poco.find_poco("购 买") self.my_poco.find_poco("购 买") else: self.my_poco.find_poco("使 用") self.my_poco.find_poco(sections_name, find_type=find_type1, click_name=click_name1, ynlist=ynlist1, click_type=click_type1) sleep(1) # 点击挑战 self.my_poco.find_poco(self.poco("Btn_battle").child("icon"), find_type="obj") sleep(4) if self.poco("tiaoguo").exists(): self.poco("tiaoguo").click() sleep(1) else: sleep(20) try: for i in range(3): sleep(1) self.my_poco.find_poco("点击屏幕继续") except PocoNoSuchNodeException: pass before_level = None # todo if before_level == find_level: break
class FirstFunctionGoRun: def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") def first_function_go_run(self): """ 用来跳过一些功能初次进入的引导动画 :return: """ if self.game_name == "com.youzu.test.qa": ffgrs2 = FirstFunctionGoRunSs2() ffgrs2.first_function_go_run_ss2() else: pass
class MyPocoObject(): """ 该类存放改写poco框架的方法 需要先启动游戏,然后调用set_poco """ def __init__(self): self.info = Information() self.uw = UnexpectedWin() self.poco = None def set_poco(self, poco_input): """ :param poco_input: 用于设置和切换不同的poco对象 :return: """ self.poco = poco_input self.uw.set_poco(poco_input) def get_poco(self): return self.poco def my_swipe(self, start_poco, end_poco, timein=2): """ 传入两个poco对象或者坐标,以对象的中心点坐标进行滑动 :param start_poco: :param end_poco: :return:两个poco对象的坐标 """ self.uw.unexpected_win() if type(start_poco) == list and type(end_poco) == list: swipe(start_poco, end_poco, duration=timein) return None, None else: pos_2 = self.get_poco_pos(start_poco) pos_3 = self.get_poco_pos(end_poco) swipe(pos_2, pos_3, duration=timein) return pos_2, pos_3 def find_poco(self, find_name, find_type="text", click_name=None, ynlist="不翻", direction="竖屏", click_type=None, click_list=None): """ 只一个参数时,默认poco(text=find_name) :param find_name:需要查找的控件名 :param find_type:name/text/obj :param click_name:需要点击的控件,默认none,表示和find_name是一个控件 :param ynlist:是否翻页查找(上翻页、下翻页、不翻) :param click_type:需要点击的控件的类型,name/text,默认none,表示和find_name是一个控件 :param click_list:点击UI偏移量[0,0]-[1,1] :return: """ sleep(0.5) global find_to find_to = False for i in range(3): # 判断是否因为异常弹窗导致找不到 self.uw.unexpected_win() if "翻页" in ynlist: self.phone_size = self.info.get_phone_size() for i in range(20): i_go = i + 1 long_side = self.phone_size[0] short_side = self.phone_size[1] # 循环中找不到时可以继续下次循环 try: # 查找的和点击的不一致 if click_name is not None: # 判断需要点击的类型,后续可加入其他类型 if click_type == "name": if find_type == "name": if self.poco(name=find_name).exists(): self.poco( name=click_name).click(click_list) find_to = True break if find_type == "text": if self.poco(text=find_name).exists(): self.poco( name=click_name).click(click_list) find_to = True break else: if find_type == "obj": if find_name.exists(): find_name.click(click_list) find_to = True break # 查找和点击是一个,翻页版 if find_type == "name": if self.poco(name=find_name).exists(): self.poco( name=click_name).click(click_list) find_to = True break if find_type == "text": if self.poco(text=find_name).exists(): self.poco(text=find_name).click(click_list) find_to = True break except PocoNoSuchNodeException: print("第" + str(i_go) + "遍未找到") # 循环结束再找不到报错 if i_go == 20: snapshot(msg="翻页查找报错退出时画面") raise PocoNoSuchNodeException(self) if "下" in ynlist: if direction == "横屏": swipe([long_side / 2, short_side * 0.8], [long_side / 2, short_side * 0.2]) else: swipe([short_side / 2, long_side * 0.8], [short_side / 2, long_side * 0.2]) if "上" in ynlist: if direction == "横屏": swipe([long_side / 2, short_side * 0.2], [long_side / 2, short_side * 0.8]) else: swipe([short_side / 2, long_side * 0.2], [short_side / 2, long_side * 0.8]) sleep(3) # 不翻页 else: # 查找的和点击的不一致 if click_name is not None: # 判断需要点击的类型,后续可加入其他类型 if click_type == "name": if find_type == "name": if self.poco(name=find_name).exists(): self.poco(name=click_name).click(click_list) find_to = True break if find_type == "text": if self.poco(text=find_name).exists(): self.poco(name=click_name).click(click_list) find_to = True break else: # 查找和点击是一个 if find_type == "obj": if find_name.exists(): find_name.click(click_list) find_to = True break if find_type == "name": if self.poco(name=find_name).exists(): self.poco(name=find_name).click(click_list) find_to = True break else: if self.poco(text=find_name).exists(): self.poco(text=find_name).click(click_list) find_to = True break if find_to: break sleep(5) if i == 2: if not find_to: snapshot(msg="点击报错退出时画面") raise PocoNoSuchNodeException(self) def get_poco_pos(self, find_pos_poco): """ 识别手机分辨率,换算ui控件的坐标 :param find_pos_poco: :return: """ # [x,y] pos_list = find_pos_poco.get_position() # [宽,高] phone_list = self.poco.get_screen_size() x = int(phone_list[0] * pos_list[0]) y = int(phone_list[1] * pos_list[1]) return [x, y]
def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name") self.sever_poco = self.info.get_config("Sever_poco", self.game_name)
def __init__(self): self.info = Information()
def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.uw = UnexpectedWinSs2()
class MyRunCase: def __init__(self): self.info = Information() def make_config_list(self): # 获取新鲜的设备列表 phone_list_devices = ADB().devices() self.phone_id_list = [] # 创建手机设备列表 if self.info.is_section_exist("Phone_List"): self.info.remove_section("Phone_List") self.info.add_section("Phone_List") if self.info.is_section_exist("Case_defeated__List"): self.info.remove_section("Case_defeated__List") self.info.add_section("Case_defeated__List") if self.info.is_section_exist("Http_path_list"): self.info.remove_section("Http_path_list") self.info.add_section("Http_path_list") if self.info.is_section_exist("Html_path_name_dic"): self.info.remove_section("Html_path_name_dic") self.info.add_section("Html_path_name_dic") for phone in phone_list_devices: phone_id = phone[0] if phone[1] == 'device': self.phone_id_list.append(phone_id) # 把所有的设备放到info表里面 for phone_id in self.phone_id_list: self.info.set_config("Phone_List", phone_id, "None") def run_case(self, test_cases_name): # airtest report auto_ui/got/test_ch1.air --export ${reportDir} # 获取yaml文件的路径 obj_path = os.path.abspath( os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) yml_path = obj_path + "\case.yml" print(yml_path) with open(yml_path, 'r', encoding='utf-8') as f: cases = yaml.load(f) air_case_path_list = [] case_name_dic = {} for case_name in cases[test_cases_name]: # 拼接yaml下case的路径 air_case_path = obj_path + '\\' + case_name + ".air" case_name_dic[air_case_path] = case_name air_case_path_list.append(air_case_path) run_phone_id = "" # 根据当前手机列表,查找配置文件中空闲状态的手机 for phone_id in self.phone_id_list: phone_status = self.info.get_config("Phone_List", phone_id) if phone_status == "None": run_phone_id = phone_id break # 运行开始时设置设备状态 self.info.set_config("Phone_List", run_phone_id, "Runing") # 存放Htlm报告的目录 name = "" defeated_case_list = [] # 按顺序执行case.yml中的用例 for i in range(len(air_case_path_list)): case_run_path = air_case_path_list[i] cmd_run_case = "airtest run " + case_run_path + " --device Android://127.0.0.1:5037:" + run_phone_id + " --log" proc = subprocess.Popen(cmd_run_case, shell=True, stdout=subprocess.PIPE) print(proc.communicate()[0]) # 从线程中获取值 code = proc.returncode if code == 0: color = "blue" is_success_str = "成功" else: color = "red" # 很蛋疼,没有预留单独的case_name,只能先这样 for case_name in cases[test_cases_name]: if case_name in case_run_path: defeated_case_list.append(case_name) is_success_str = "失败" self.info.set_config("Case_defeated__List", case_name_dic[case_run_path], is_success_str) static_root = "https://ep.yoozoo.com/public/static/airtest" cmd_make_html = "airtest report " + case_run_path + " --export " + case_run_path + " --static_root " + static_root + " --lang zh" # 执行完用例之后生成报告 subprocess.Popen(cmd_make_html, shell=True, stdout=subprocess.PIPE) if case_run_path != "": info = json.loads(get_script_info(case_run_path), encoding='utf-8') name = info.get('title') if len(name) == 0: name = case_name_dic[case_run_path] html_path = case_run_path case_air_log_name = case_name_dic[ case_run_path] + ".log" # 日志文件夹的名称 # html_path_name_dic[name] = [html_path,case_air_log_name,case_name_dic[case_run_path]] self.info.set_config( "Html_path_name_dic", name, str([ html_path, case_air_log_name, case_name_dic[case_run_path] ])) my_html_file_path_new = self.info.get_config( "HtlmPath", "log_path") html_path = my_html_file_path_new + "/" + case_name_dic[ case_run_path] + ".log" + "/log.html" self.bodys = '''<div><body><a href="''' + html_path + '''">''' + name + is_success_str + '''</a></body></div>''' self.info.set_config("Http_path_list", case_name_dic[case_run_path], self.bodys) # 把失败的项写入yml中 with open(yml_path, 'w', encoding='utf-8') as f: cases["defeated_cases"] = defeated_case_list yaml.safe_dump(cases, f) self.info.set_config("Phone_List", run_phone_id, "None") # 运行结束后把设备状态改回来 # self.make_html(html_path_name_dic) # os.system(r"airtest run D:\yoozoo_gitlab\autotest\sanguohero2\teat_ss2.air --device Android://127.0.0.1:5037:e42eb94e --log") # os.system(r"airtest report D:\yoozoo_gitlab\autotest\sanguohero2\teat_ss2.air --export D:\yoozoo_gitlab\autotest\sanguohero2\teat_ss2.air --static_root https://ep.yoozoo.com/public/static/airtest --lang zh") def make_html(self): """ :param html_path_name_dic:[运行脚本的路径.air,脚本名称.air.脚本名称log,脚本名称] :return: """ html_path_name_dic = {} cof_keys = self.info.get_options("Http_path_list") for key in cof_keys: dic_value = self.info.get_config("Http_path_list", key) html_path_name_dic[key] = eval(dic_value) log_html_path = self.info.get_config("HtlmPath", "log_path") bodys = "" for key in cof_keys: body_name = html_path_name_dic[key][2] body = self.info.get_config("Http_path_list", body_name) bodys = bodys + body my_html_file_path_old = log_html_path + "\\" + html_path_name_dic[ key][1] case_run_file_path = html_path_name_dic[key][ 0] + "\\" + html_path_name_dic[key][1] case_run_file_path_log = html_path_name_dic[key][0] + "\\log" my_html_file_path_new = log_html_path # 删除之前遗留的旧文件夹 if os.path.isdir(my_html_file_path_old): # 判断该文件是否为文件夹 shutil.rmtree(my_html_file_path_old) # 若为文件夹,则直接删除 # 删除遗留的log文件 if os.path.isdir(case_run_file_path_log): # 判断该文件是否为文件夹 shutil.rmtree(case_run_file_path_log) # 若为文件夹,则直接删除 sleep(2) shutil.move(case_run_file_path, my_html_file_path_new) # if is_success: # color_name = "blue"# todo 颜色 # is_success_str = "run_success" # else: # color_name = "red" # is_success_str = "run_defeated" # html_path =my_html_file_path_new +"/"+html_path_name_dic[key][3]+".log"+ "/log.html" # bodys = bodys + '''<div><body><a href="''' + html_path + '''"class="''' + color_name + '''">''' + name + is_success_str + '''</a></body></div>''' html_txt = '''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>测试报告</title><style type="text/css"> a:link{color:red;} a:visited { color:#00FF00; text-decoration:none; } a:hover { color:#000000; text-decoration:none; } a:active { color:#FFFFFF;} </style><base target="_blank"></head> ''' + bodys + '''</html>''' my_html_path = log_html_path + "\index.html" # my_html_path = r"C:\Users\v.lidd\Desktop\测试报告.html" with open(my_html_path, 'w+', encoding='utf-8') as f: f.write(html_txt)
def __init__(self): self.info = Information() self.my_poco = MyPocoObject()
def __init__(self): self.info = Information() self.rg = ResourceGm() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name")
class MyPoco: def __init__(self): """ 初始化点击类、信息类、性能类 """ self.my_poco = MyPocoObject() self.info = Information() self.xn = YzTest2Performance() self.eg = EntryGame() self.fg = Fight() self.rg = ResourceGm() self.na = NewAccount() self.sp = Protocol() self.mrc = MyRunCase() # todo 装饰器 def first_function_go_run(self): """ 用来跳过一些功能初次进入的引导动画 :return: """ ffgr = FirstFunctionGoRun() ffgr.first_function_go_run() def open_game(self, sever_name_input="sever_name", game_account_input="old_game_account"): """ 功能向,开始游戏,启动到游戏主界面,广告和签到界面关闭 :return:返回StdPoco().poco对象,可直接用于脚本的控件点击 """ try: self.poco = self.eg.open_game(sever_name_input, game_account_input) self.set_poco(self.poco) return self.poco # 如果出现断开连接的报错,就再执行一下该步骤 except RpcTimeoutError: pristr = "poco断开" + str(self.info.game_is_running()) if not self.info.game_is_running(): game_name = self.info.get_config("App_Name", "game_name") start_app(game_name) sleep(2) snapshot(msg=pristr) snapshot(msg=pristr) self.poco = self.eg.open_game(sever_name_input, game_account_input) self.set_poco(self.poco) except PocoNoSuchNodeException: snapshot(msg="找不到控件") raise PocoNoSuchNodeException(self) except Exception: pristr = "报错,游戏" + str(self.info.game_is_running()) snapshot(msg=pristr) raise Exception def close_game(self): """ 关闭游戏,不区分功能或者性能 :return: """ self.eg.close_game() def set_poco(self, poco_input): """ :param poco_input:传入poco对象,主要用于不经过open_game()情况的控件点击 :return: """ self.my_poco.set_poco(poco_input) def my_swipe(self, start_poco, end_poco, timein=2): """ 两个对象中心点之间的滑动 :param start_poco:poco对象 :param end_poco:poco对象 :return:两个对象的坐标 """ try: pos_2, pos_3 = self.my_poco.my_swipe(start_poco, end_poco, timein) return pos_2, pos_3 # 如果出现断开连接的报错,就再执行一下该步骤 except RpcTimeoutError: pristr = "poco点击断开" + str(self.info.game_is_running()) if not self.info.game_is_running(): game_name = self.info.get_config("App_Name", "game_name") start_app(game_name) sleep(2) snapshot(msg=pristr) snapshot(msg=pristr) pos_2, pos_3 = self.my_poco.my_swipe(start_poco, end_poco, timein) return pos_2, pos_3 except PocoNoSuchNodeException: snapshot(msg="找不到控件") raise PocoNoSuchNodeException(self) except Exception: pristr = "点击方法报错,游戏" + str(self.info.game_is_running()) snapshot(msg=pristr) raise Exception def find_poco(self, find_name, find_type="text", click_name=None, ynlist="不翻", direction="竖屏", click_type=None, click_list=None): """ 查找控件并点击,默认三次内找不到报错,间隔5秒 :param find_name:查找的控件名 :param find_type:查找的控件类型 text、name.... :param click_name:点击的控件名,默认none,表示查找和点击的控件是一个点 :param click_type:点击的控件类型text、name.... :param ynlist:是否翻页查找,默认x:1/2 ,y1/5-4/5范围,建议使用my_swipe方法 :param direction:和翻页相关,横屏还是竖屏范围翻页 :param click_list:控件点击偏移点[0,0]-[1,1]范围 :return:PocoNoSuchNodeException """ try: self.my_poco.find_poco(find_name, find_type=find_type, click_name=click_name, ynlist=ynlist, direction=direction, click_type=click_type, click_list=click_list) # 如果出现断开连接的报错,就再执行一下该步骤 except RpcTimeoutError: pristr = "poco点击断开" + str(self.info.game_is_running()) if not self.info.game_is_running(): game_name = self.info.get_config("App_Name", "game_name") start_app(game_name) sleep(2) snapshot(msg=pristr) snapshot(msg=pristr) self.poco = StdPoco() # todo 需要根据游戏不同区分 self.set_poco(self.poco) self.my_poco.find_poco(find_name, find_type=find_type, click_name=click_name, ynlist=ynlist, direction=direction, click_type=click_type, click_list=click_list) except PocoNoSuchNodeException: snapshot(msg="找不到控件") raise PocoNoSuchNodeException(self) except Exception: pristr = "点击方法报错,游戏" + str(self.info.game_is_running()) snapshot(msg=pristr) raise Exception def fight(self, sections_name, find_type1="text", click_name1=None, ynlist="不翻", click_type1=None, number_of_times=1, find_level=None): """ 少三2循环战斗 :param sections_name:要进入的关卡的名称 :param find_type1:查找的控件类型 text、name.... :param click_name1:点击的控件名,默认none,表示查找和点击的控件是一个点 :param click_type1:点击的控件类型text、name.... :param ynlist1:是否翻页查找,默认x:1/2 ,y1/5-4/5范围,建议使用my_swipe方法 :param number_of_times:循环战斗几次 :param find_level:到几级之后不再打了 :return: """ self.fg.to_fight(sections_name, find_type1=find_type1, click_name1=click_name1, ynlist1=ynlist, click_type1=click_type1, number_of_times=number_of_times, find_level=find_level) def add_resource(self, dic_input): """ 添加各种资源 :param name:资源名称 :param size:资源数量 :return: """ self.rg.add_resource(dic_input) def set_play_fuben_num(self, num): self.rg.set_play_fuben_num(num) def set_play_liezhuan_num(self, num): self.rg.set_play_liezhuan_num(num) def delete_resource(self, dic_input): """ 添加各种资源 :param name:资源名称 :param size:资源数量 :return: """ self.rg.delete_resource(dic_input) def get_resource_quantity(self, list_input): """ 获取某资源数量 :return:字典,资源名称和数量 """ dic_res = self.rg.get_resource_num(list_input) return dic_res def get_sever_time(self): """ 输入包含时间戳的poco对象,获取当前服务器时间 :param input_str:需要输入的文本 :return:int [年月日,时分秒,星期] """ return self.rg.get_sever_time() def get_config(self, list_name, key): """ 获取配置文件信息 :param list_name:模块名 :param key:键 :return:value """ value = self.info.get_config(list_name, key) return value def add_section(self, section_name): ''' 在配置文件中添加项 :param section_name:项名称 :return: ''' self.info.add_section(section_name) def remove_section(self, section_name): ''' 删除配置文件中的项 :param section_name:项名称 :return: ''' self.info.remove_section(section_name) def set_config(self, list_name, key, value): """ 设置配置文件信息 :param list_name:模块名 :param key:键 :param value:值 :return: """ self.info.set_config(list_name, key, value) def get_time_str(self, str_time_input): """ 根据时间戳字符串换算日期和星期 :param poco_time_input:包含时间戳text的poco对象 :return: [int(ymd),int(hms),int(week)] """ int_list = self.info.get_time_str(str_time_input) return int_list def get_game_number_l(self, find_number_poco, subscript): """ 不同游戏不同实现,获取游戏text属性中的数字 one/two :param find_number_poco:poco对象 :param subscript:0/1 :return:int """ return self.info.get_game_number_l(find_number_poco, subscript) def get_game_number_c(self, find_number_poco): """ 不同游戏不同实现,获取游戏text属性中的数字 ]int[ :param find_number_poco:poco对象 :return:int """ return self.info.get_game_number_c(find_number_poco) def get_game_number_cc(self, find_number_poco): """ 不同游戏不同实现,获取游戏text属性中的str数字,]int) :param find_number_poco:poco对象 :return:int """ return self.info.get_game_number_cc(find_number_poco) def get_game_number(self, find_number_poco): """ 获取游戏text属性中的str数字 :param find_number_poco:poco对象 :return:int """ return self.info.get_game_number(find_number_poco) def get_game_number_instr(self, find_number_poco): """ 只获取poco对象中text属性中的数字 :param find_number_poco:poco对象 :return:int """ return self.info.get_game_number_instr(find_number_poco) def get_poco_visible(self, find_visible_poco): """ 不同游戏不同实现,获取游戏visible属性中的str值 :param find_visible_poco:poco对象 :return:str true/false """ return self.info.get_poco_visible(find_visible_poco) def get_poco_anyvalue(self, find_name_poco, value_name_str): """ 获取游戏poco对象value_name_str属性中的值,需要自行判断类型 :param find_number_poco:poco对象 :return:value """ return self.info.get_poco_anyvalue(find_name_poco, value_name_str) def get_poco_pos(self, find_pos_poco): """ 获取poco对象的坐标,经过分辨率转换 :param find_pos_poco:poco对象 :return:[,] """ return self.my_poco.get_poco_pos(find_pos_poco) def get_phone_name(self): """ 获取当前手机的名字,区分三挡机使用 :return:str """ return self.info.get_phone_name() def get_phone_size(self): """ 获取当前手机的分辨率 :return:list_int[宽,高] """ return self.info.get_phone_size() def add_log(self, first, second, msg=""): """ 对比结果值,并在报告连接中添加日志信息,比如资源变化前后的对比 :param first:对比值one :param second:对比值two :param msg:日志的描述,==/!=、正常/异常 :return: """ self.info.add_log(first, second, msg=msg) def first_open_yztest(self): """ 启动性能工具,在开始测试步骤前结束 :return: """ self.xn.first_open_yztest() def start_test_xn(self, sever_name_input="sever_name", game_account_input="new_game_account"): """ 性能,点击开始测试按钮,启动游戏并在游戏界面停止 :return:poco对象 """ self.poco = self.xn.start_test(sever_name_input, game_account_input) self.set_poco(self.poco) return self.poco def touch_tab_xn(self): """ 点击标记按钮 :return: """ self.xn.touch_tab() def end_tab_xn(self): """ 结束测试并上传报告,在开始测试界面结束 :return: """ self.xn.end_tab() def close_test_xn(self): """ 停止性能测试,关闭性能软件和游戏 :return: """ self.xn.close_test() def text(self, input_str): # 废弃 """ 输入文本,没有回车键 :param input_str:需要输入的文本 :return: """ self.info.text_str(input_str) def text_str(self, input_str): """ 输入文本,没有回车键,接受汉字 :param input_str:需要输入的文本 :return: """ self.info.text_str(input_str) def new_account(self, resource_dic_input, sever_name_input,play_dic): """ 根据输入的要求在sever_name区创建一个账号 :param dic_input: 字典,需要添加的各种资源 :param sever_name_input: 区服名 :param play_dic: 副本列表dic{"副本":80,"列传":12} :return: """ self.na.new_game_account(resource_dic_input, sever_name_input,play_dic) def send_game_protocol(self, send_protocol_dic, find_name): """ 发送后会回到当前界面,只发一条, :param add_name_input_list: dic {"message":协议id,"ages":,...} :param find_name:协议返回值中需要查询值的key,可以为none :return:value """ find_name_value = self.rg.send_game_protocol(send_protocol_dic, find_name) return find_name_value def test_game_protocol(self, add_name_input_list): """ 发送后会回到当前界面,只发一条,发完自行查看结果,用于协议测试 :param add_name_input_list: list [协议用例id,arges....] :return: """ self.rg.test_game_protocol(add_name_input_list) def is_exist_poco_log(self, poco_obj, is_exist_str): """ 判断传入的控件是否处于显示状态,在报告中体现,用来验证按钮点击后的状态 :param poco_obj: 需要验证的控件对象 :param is_exist_str:"显示"or"隐藏" :return: bool True or False """ is_exist = self.info.is_exist_poco_log(poco_obj, is_exist_str) return is_exist def is_exist_poco(self, poco_obj): """ 判断传入的控件是否处于显示状态,在报告中体现,用来验证按钮点击后的状态 :param poco_obj: 需要验证的控件对象 :return: bool True or False """ is_exist = self.info.is_exist_poco(poco_obj) return is_exist def my_run_case(self, yml_cases_name_list): ''' 传入需要执行case.yml中用例的项名的列表 :param yml_cases_name_list: ["debug","debug1"] :return: ''' self.mrc.make_config_list() self.mrc.thread_run_case(yml_cases_name_list)
class FightSx: def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") self.poco = StdPoco() self.my_poco.set_poco(self.poco) def sx_fight(self, sections_name, find_type1="text", click_name1=None, ynlist1="不翻", click_type1=None, number_of_times=1, find_level=None): # 仅适用于少西 # 循环 for i in range(number_of_times): # 开始点击战斗之前,判断体力是否足够 physical_strength_int = 100 if self.poco("Node_top_res1").offspring( "Label_res_amount").exists(): physical_strength_str = self.poco("Node_top_res1").offspring( "Label_res_amount").get_text() physical_strength_list = physical_strength_str.split("/") physical_strength = physical_strength_list[0] physical_strength_int = int(physical_strength) # 体力小于10,吃体力丹 if physical_strength_int <= 10: self.my_poco.find_poco("Image_top_bar", find_type="name") self.poco("Node_vit").child("Button_add").click() sleep(1) # self.MyPoco.find_poco(self.poco("Panel_6").child("Node_confirm").child("Text_btn_desc"), find_type="obj") self.my_poco.find_poco("购 买") sleep(1) # self.MyPoco.find_poco(self.poco("Panel_6").child("Node_cancel").child("Text_btn_desc"), find_type="obj") self.my_poco.find_poco("使 用") sleep(1) # self.MyPoco.find_poco(self.poco("Panel_info").child("Node_confirm").child("Text_btn_desc"), find_type="obj") self.my_poco.find_poco("确 认") sleep(1) self.my_poco.find_poco("Button_close", find_type="name") # 回到关卡界面 todo self.my_poco.find_poco(sections_name, find_type=find_type1, click_name=click_name1, ynlist=ynlist1, click_type=click_type1) sleep(1) self.my_poco.find_poco("挑战") sleep(3) # self.MyPoco.find_poco(self.poco("<Layer | Tag = -1>").child("<Menu | Tag = -1>")[0].child("<MenuItem | tag = -1>")[0],click_type="obj") self.poco("<Layer | Tag = -1>").child("<Menu | Tag = -1>")[ 0].child("<MenuItem | tag = -1>")[1].click() sleep(5) # 在结算界面可看到等级 number_str = self.poco("Text_level").get_text() number_list = number_str.split(":") number = number_list[1] level = int(number) try: for i in range(3): sleep(1) self.my_poco.find_poco("点击屏幕继续") except PocoNoSuchNodeException: pass # 判断等级,终止循环 if level == find_level: break
def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") self.poco = StdPoco() self.my_poco.set_poco(self.poco)
class EntryGameSs2: def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") self.sever_poco = self.info.get_config("Sever_poco", self.game_name) def entry_game_ss2(self, sever_name_input, game_account_input): """ ss2的登录游戏,游戏已经启动,到游戏主界面的操作 :param sever_name_input: 服务器名称,和ini一致 :param game_account_input: 需要登录的账号,和ini一致 :return: """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) game_account = self.info.get_config("Account_Number", game_account_input) self.my_poco.find_poco("InputName", find_type="name") text(game_account) # self.poco("InputName").set_text(game_account) self.my_poco.find_poco("确 认") self.my_poco.find_poco("公 告", click_name="AnnoCloseBtn", click_type="name") self.my_poco.find_poco("点击选服") self.my_poco.find_poco( self.poco("List_kind_server").child(text="11 - 20区"), find_type="obj", click_list=[0.95, 0.15]) # todo 不同游戏可能要改 sever_name = self.info.get_config("Sever_Name", sever_name_input) self.my_poco.find_poco( self.poco("List_server").offspring(text=sever_name), find_type="obj") self.my_poco.find_poco("Txt_guide", find_type="name") # 关闭新手引导 self.my_poco.find_poco("Btn_login", find_type="name") # 开始游戏 if self.poco("LoginLawPop").child("__view").child("btn_ok").exists(): self.poco("LoginLawPop").child("__view").child("btn_ok").click() self.my_poco.find_poco("Btn_login", find_type="name") # 开始游戏 sleep(15) if self.poco("RedPacketRainReceiveLayer").child("__view").child( "Comp_effect").exists(): # 红包雨 self.poco("RedPacketRainReceiveLayer").child("__view").child( "Comp_effect").click() sleep(2) stop_app(self.game_name) sleep(1) home() sleep(1) start_app(self.game_name) sleep(10) self.poco = StdPoco() self.my_poco.set_poco(self.poco) game_account = self.info.get_config("Account_Number", game_account_input) self.my_poco.find_poco("InputName", find_type="name") text(game_account) # self.poco("InputName").set_text(game_account) self.my_poco.find_poco("确 认") self.my_poco.find_poco("公 告", click_name="AnnoCloseBtn", click_type="name") self.my_poco.find_poco("点击选服") self.my_poco.find_poco( self.poco("List_kind_server").child(text="1 - 10区"), find_type="obj", click_list=[0.95, 0.95]) # todo 不同游戏可能要改 sever_name = self.info.get_config("Sever_Name", sever_name_input) self.my_poco.find_poco( self.poco("List_server").offspring(text=sever_name), find_type="obj") self.my_poco.find_poco("Txt_guide", find_type="name") # 关闭新手引导 self.my_poco.find_poco("Btn_login", find_type="name") # 开始游戏 sleep(15) for i in range(15): if self.poco("Btn_goto").exists(): # 广告 self.poco("Btn_close").click() if self.poco("Comp_day1").exists(): # 签到 self.poco("__view").child("n3").child("img0").click() if self.poco("RedPacketRainPop").child("__view").child( "Btn_close").exists(): # 红包雨锦鲤 self.poco("RedPacketRainPop").child("__view").child( "Btn_close").click() if self.poco("GodboxPop").exists(): # 天公赐福 self.poco("Btn_close").click() return self.poco
class YzTest2Performance: """ 性能测试类 """ def __init__(self): self.info = Information() self.my_andriod_poco = MyPocoObject() self.eg = EntryGame() self.phone_name = self.info.get_phone_name() self.use_name = self.info.get_config("Account_Number", "YzTest2") self.game_name = self.info.get_config("App_Name", "game_name") # 获取设备型号 self.high = self.info.get_config("Phone_Model", "high") self.medium = self.info.get_config("Phone_Model", "medium") self.low = self.info.get_config("Phone_Model", "low") self.test = self.info.get_config("Phone_Model", "test") self.high_touch_x = self.info.get_config("Coordinate", "high_start_x") self.high_touch_y = self.info.get_config("Coordinate", "high_start_y") self.medium_touch_x = self.info.get_config("Coordinate", "medium_start_x") self.medium_touch_y = self.info.get_config("Coordinate", "medium_start_y") self.low_touch_x = self.info.get_config("Coordinate", "low_start_x") self.low_touch_y = self.info.get_config("Coordinate", "low_start_y") self.test_touch_x = self.info.get_config("Coordinate", "test_start_x") self.test_touch_y = self.info.get_config("Coordinate", "test_start_y") self.high_end_x = self.info.get_config("Coordinate", "high_end_x") self.high_end_y = self.info.get_config("Coordinate", "high_end_y") self.medium_end_x = self.info.get_config("Coordinate", "medium_end_x") self.medium_end_y = self.info.get_config("Coordinate", "medium_end_y") self.low_end_x = self.info.get_config("Coordinate", "low_end_x") self.low_end_y = self.info.get_config("Coordinate", "low_end_y") self.test_end_x = self.info.get_config("Coordinate", "test_end_x") self.test_end_y = self.info.get_config("Coordinate", "test_end_y") self.game_name = self.info.get_config("App_Name", "game_name") def first_open_yztest(self): ''' 首次启动时使用该方法,不会因为游戏不同而改变 :return: ''' clear_app("com.youzu.yztest_nosdk") home() stop_app("com.youzu.yztest_nosdk") sleep(2) start_app("com.youzu.yztest_nosdk") sleep(10) poco_android = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) self.my_andriod_poco.set_poco(poco_android) sleep(1) self.my_andriod_poco.find_poco("请输入用户名") sleep(1) os.system("adb shell input text " + self.use_name) # 没有输入框也执行的话也不影响 self.my_andriod_poco.find_poco("登录") sleep(3) # self.my_andriod_poco.find_poco("总是允许") # todo 三挡机 sleep(3) self.my_andriod_poco.find_poco("选择应用") sleep(2) self.my_andriod_poco.find_poco(self.game_name, ynlist="下翻页") sleep(2) self.my_andriod_poco.find_poco("自动截图", click_name="com.youzu.yztest_nosdk:id/auto_screen_shot", click_type="name") # 每次打开软件是默认关闭的 # os.system("start /b adb shell sh /data/local/tmp/yztest_sh.sh") 需要平台启动该服务 sleep(2) def start_test(self, sever_name_input, game_account_input): """ 开始测试,游戏启动完毕,并返回一个poco对象,用于用例使用 :return: """ stop_app(self.game_name) sleep(1) poco_android = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) self.my_andriod_poco.set_poco(poco_android) self.my_andriod_poco.find_poco("开始测试") phone_name = self.info.get_phone_name() phone_name_low = self.info.get_config("Phone_Model", "low") if phone_name == phone_name_low: sleep(20) else: sleep(10) game_poco = self.eg.entry_game(sever_name_input, game_account_input) return game_poco # 点击标记测试按钮 def touch_tab(self): """点击开始或结束标记按钮 """ sleep(1) if self.phone_name == self.low: touch([int(self.low_touch_x), int(self.low_touch_y)]) if self.phone_name == self.medium: touch([int(self.medium_touch_x), int(self.medium_touch_y)]) if self.phone_name == self.high: touch([int(self.high_touch_x), int(self.high_touch_y)]) if self.phone_name == self.test: touch([int(self.test_touch_x), int(self.test_touch_y)]) def end_tab(self): """ 会直接结束性能测试,需要先结束标记 """ sleep(1) # 点击退出测试按钮 if self.phone_name == self.low: touch([int(self.low_end_x), int(self.low_end_y)]) if self.phone_name == self.medium: touch([int(self.medium_end_x), int(self.medium_end_y)]) if self.phone_name == self.high: touch([int(self.high_end_x), int(self.high_end_y)]) if self.phone_name == self.test: touch([int(self.test_end_x), int(self.test_end_y)]) # 点击弹出的确认框 self.my_andriod_poco.find_poco("退出") os.system( "adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0") os.system( "adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:0") self.my_andriod_poco.find_poco("上传报告") sleep(10) # 返回主界面 self.my_andriod_poco.find_poco("转到上一层级", find_type="name") os.system( "adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:1") sleep(1) def close_test(self): """测试结束关闭软件,关闭游戏""" stop_app("com.youzu.yztest_nosdk") sleep(2) stop_app(self.game_name)
def __init__(self): self.info = Information() self.uw = UnexpectedWin() self.poco = None
class ResourceGmSs2: def __init__(self): self.info = Information() self.my_poco = MyPocoObject() self.uw = UnexpectedWinSs2() def add_resource_ss2(self, add_name_input_dic): # todo """ 从开始到结束都在当前界面,添加一些资源 :return: """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) mes = MessageSs2() # 将传入的字典的key转换成列表 keys_list = list(add_name_input_dic.keys()) order_str = """{"message":10140,"awards":[""" counter_num = 0 for key in keys_list: if counter_num == 0: pass else: order_str = order_str + "," size = add_name_input_dic.get(key) value = mes.get_resource_value(key) order_str = order_str + "{" + value + ""","size":""" + str(size) + "}" counter_num += 1 order_str = order_str + "]}" order_str.replace(" ", "") self.my_poco.find_poco("Comp_res3", find_type="name") # 点击元宝进入gm self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input1", find_type="name") self.info.text_str(order_str) self.my_poco.find_poco("btn1", find_type="name") self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") # 回到主界面 def delete_resource_ss2(self, del_name_input_dic): """ 从开始到结束都在当前界面,删除一些资源 :return: """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) mes = MessageSs2() # 将传入的字典的key转换成列表 keys_list = list(del_name_input_dic.keys()) order_str = """{"message":10140,"consumes":[""" counter_num = 0 for key in keys_list: if counter_num == 0: pass else: order_str = order_str + "," size = del_name_input_dic.get(key) value = mes.get_resource_value(key) order_str = order_str + "{" + value + ""","size":""" + str(size) + "}" counter_num += 1 order_str = order_str + "]}" order_str.replace(" ", "") self.my_poco.find_poco("Comp_res3", find_type="name") # 点击元宝进入gm self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input1", find_type="name") self.info.text_str(order_str) self.my_poco.find_poco("btn1", find_type="name") self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") # 回到主界面 def get_resource_num_ss2(self, get_name_input_list): """ 从开始到结束都在当前界面,查询身上的资源数量 :return:返回字典,道具的名称和数量 """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) mes = MessageSs2() s = "[" for key_num in range(len(get_name_input_list)): s = s + "{" + mes.get_resource_value(get_name_input_list[key_num]) + "}" if key_num == len(get_name_input_list) - 1: pass else: s = s + "," s = s + "]" self.my_poco.find_poco("Comp_res3", find_type="name") self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input2", find_type="name") self.info.text_str(s) self.my_poco.find_poco("btn2", find_type="name") str_txt = self.poco("txt").get_text() number_list = str_txt.split(",") # 将获取到的字符串解析成列表 resource_dic = {} for i in range(len(number_list)): key_name = get_name_input_list[i] value_name = int(number_list[i]) resource_dic.update({key_name: value_name}) self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") return resource_dic def get_sever_time_ss2(self): """ 从开始到结束都在当前界面,服务器时间 :return: int [日期,时间,星期] """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) time.sleep(2) self.my_poco.find_poco("Comp_res3", find_type="name") self.my_poco.find_poco("自动测试") game_time_str = self.poco("time").get_text() time_list = self.info.get_time_str(game_time_str) self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") return time_list def get_resource_id_ss2(self, get_name_input_list):# todo """ 从开始到结束都在当前界面,查询身上的资源数量 :return:返回字典,道具的名称和id """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) mes = MessageSs2() s = "[" for key_num in range(len(get_name_input_list)): s = s + "{" + mes.get_resource_value(get_name_input_list[key_num]) + "}" if key_num == len(get_name_input_list) - 1: pass else: s = s + "," s = s + "]" self.my_poco.find_poco("Comp_res3", find_type="name") self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input2", find_type="name") self.info.text_str(s) self.my_poco.find_poco("btn2", find_type="name") str_txt = self.poco("txt").get_text() number_list = str_txt.split(",") # 将获取到的字符串解析成列表 resource_dic = {} for i in range(len(number_list)): key_name = get_name_input_list[i] value_name = int(number_list[i]) resource_dic.update({key_name: value_name}) self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") return resource_dic def test_protocol_ss2(self, add_name_input_list): """ 只发一条,发完查看结果,用于协议测试 :param add_name_input_list: [协议id,arges....] :return: """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) mes = ProtocolDicTestSs2() value_list = mes.get_protocol_value(add_name_input_list[0]) protocol_str = value_list[0] for i in range(1, len(add_name_input_list)): protocol_str = protocol_str + value_list[i] + str(add_name_input_list[i]) protocol_str = protocol_str + value_list[len(value_list) - 1] self.my_poco.find_poco("Comp_res3", find_type="name") # 点击元宝进入gm self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input1", find_type="name") self.info.text_str(protocol_str) self.my_poco.find_poco("btn1", find_type="name") self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") # 回到主界面 def send_game_protocol(self, send_protocol_dic,find_name):# todo """ 使用协议对游戏进行操作,例如穿戴装备,强化装备等 发送后会回到当前界面,只发一条 :param add_name_input_list: list [协议id,arges....] :param find_name:协议返回值中需要查询值的key,可以为none :return:value """ self.poco = StdPoco() self.my_poco.set_poco(self.poco) self.my_poco.find_poco("Comp_res3", find_type="name") # 点击元宝进入gm self.my_poco.find_poco("自动测试") self.my_poco.find_poco("input2", find_type="name") protocol_str = str(send_protocol_dic).replace(" ","").replace("'",'''"''') # 要发送的协议 self.info.text_str(protocol_str) s = self.poco("Comp_scroll").get_text() # 获取到的返回值 s = s[6:] s1 = re.sub('(\w+) = ([^\{ ]+)', "\"\\1\":\\2,", s) s1 = s1.replace("false", "False") s1 = s1.replace("ture", "Ture") s2 = re.sub("\s{2,}", "", s1) s3 = re.sub("(\w+) = {", "\"\\1\" : {", s2) s4 = re.sub("}", "},", s3) s = s4[0:-1] ret_dic = eval(s) # todo self.my_poco.find_poco("btn2", find_type="name") self.my_poco.find_poco("close", find_type="name") self.my_poco.find_poco("close1", find_type="name") # 回到主界面 if find_name != None: find_name_value = None #todo return find_name_value def set_play_fuben_num(self, num): print("开始一键功能") nums = str(num) poco = StdPoco() self.uw.set_poco(poco) self.my_poco.set_poco(poco) self.my_poco.find_poco("Comp_res3", find_type="name") self.my_poco.find_poco("一键功能") self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("n21"), find_type="obj") self.info.text_str(nums) self.my_poco.find_poco("btn_challenge", find_type="name")#一键主线 if num>10: num = int(num/7)*3 for i in range(num): time.sleep(6) self.uw.ss2_unexpected_win() self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("btn_challenge"), find_type="obj")#一键主线 self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("btn0"), find_type="obj") self.my_poco.find_poco("close1", find_type="name") def set_play_liezhuan_num(self, num): print("开始一键名将") nums = str(num) poco = StdPoco() self.uw.set_poco(poco) self.my_poco.set_poco(poco) self.my_poco.find_poco("Comp_res3", find_type="name") self.my_poco.find_poco("一键功能") self.my_poco.find_poco("一键名将") self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("n21"), find_type="obj") self.info.text_str(nums) for i in range(num*11): self.uw.ss2_unexpected_win() self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("btn_challenge"), find_type="obj")#一键主线 time.sleep(1.5) print("列传") # self.my_poco.find_poco("btn_challenge", find_type="name") # 一键主线 # sleep(num * 4) self.my_poco.find_poco(poco("OnekeyLayer").child("__view").child("btn0"), find_type="obj") self.my_poco.find_poco("close1", find_type="name")
def __init__(self): self.info = Information() self.game_name = self.info.get_config("App_Name", "game_name")
class ResourceGm: def __init__(self): """ 在if、elif结构中初始化对象 """ self.info = Information() self.my_poco = MyPocoObject() self.game_name = self.info.get_config("App_Name", "game_name") if self.game_name == "com.youzu.test.qa": self.rgss2 = ResourceGmSs2() else: pass def add_resource(self, add_name_input_dic): """ 添加资源,区分不同的游戏走不同的逻辑 :param add_name_input_dic: {资源名称:数量} :return: """ if self.game_name == "com.youzu.test.qa": self.rgss2.add_resource_ss2(add_name_input_dic) else: pass def delete_resource(self, del_name_input_dic): """ 添加资源,区分不同的游戏走不同的逻辑 :param add_name_input_dic: {资源名称:数量} :return: """ if self.game_name == "com.youzu.test.qa": self.rgss2.delete_resource_ss2(del_name_input_dic) else: pass def get_resource_num(self, get_name_input_list): """ 查询资源,区分不同的游戏走不同的逻辑 :param get_name_input_list: [资源名称] :return: {资源名称:数量} """ if self.game_name == "com.youzu.test.qa": dic_res = self.rgss2.get_resource_num_ss2(get_name_input_list) return dic_res else: pass def get_sever_time(self): """ 获取服务器时间,区分不同的游戏走不同的逻辑 :return: """ if self.game_name == "com.youzu.test.qa": time_list = self.rgss2.get_sever_time_ss2() return time_list else: pass def test_game_protocol(self, add_name_input_list): """ 发送协议,发送后会回到当前界面,只发一条,发完查看结果 主要用于协议测试 :param add_name_input_list: list [协议编号,arges....] 编号查询协议用例表 :return: """ if self.game_name == "com.youzu.test.qa": # ss2 self.rgss2.test_protocol_ss2(add_name_input_list) else: pass def send_game_protocol(self, send_protocol_dic, find_name): """ 发送后会回到当前界面,只发一条, :param add_name_input_list: list [协议id,arges....] :param find_name:协议返回值中需要查询值的key,可以为none :return:value """ if self.game_name == "com.youzu.test.qa": # ss2 find_name_value = self.rgss2.send_game_protocol( send_protocol_dic, find_name) return find_name_value else: pass def set_play_fuben_num(self, num): """ 添加资源,区分不同的游戏走不同的逻辑 :param add_name_input_dic: {资源名称:数量} :return: """ if self.game_name == "com.youzu.test.qa": self.rgss2.set_play_fuben_num(num) else: pass def set_play_liezhuan_num(self, num): """ 添加资源,区分不同的游戏走不同的逻辑 :param add_name_input_dic: {资源名称:数量} :return: """ if self.game_name == "com.youzu.test.qa": self.rgss2.set_play_liezhuan_num(num) else: pass