def _swipe(self, ui1: Union[Picture,Coordinate,PocoUi],ui2:Union[Picture,Coordinate] = None, direction:tuple=None, focus:tuple=None,duration=0.5,**kw): ''' 根据指定的点或者方向进行滑动 :param ui1: 滑动起始坐标、图像 :param ui2: 滑动结束坐标、图像 :param direction: 滑动方向 :param duration: 滑动时长 :return: ''' nowUiTree = self._get_ui_tree() if self.__last_tree == nowUiTree: return True #校验参数 self.__para_check(ui1,[Picture,Coordinate,PocoUi]) self.__para_check(ui2,[Picture,Coordinate]) #同时都为图片 self.__last_tree = self._get_ui_tree() if type(ui1)==Picture and type(ui2)==Picture: swipe(ui1.getTemplate(),ui2.getTemplate(),direction,duration,**kw) #同时都为坐标 elif type(ui1)==Coordinate and type(ui2)==Coordinate: if g().isThePootUsed(): g().activePoot.swipe(ui1.x,ui1.y,ui2.x,ui2.y,int(duration)) else: g().activePoco.swipe((ui1.x,ui1.y),(ui2.x,ui2.y),direction,duration) #ui1为poco,方向不为空时 elif type(ui1)==PocoUi and direction!=None: u1=self.__poco(ui1.info) u1.swipe(direction,focus,duration) else: raise BaseException("不支持的类型组合操作")
def _drag(self,ui1:Union[PocoUi,Picture,PootUi],ui2:Union[PocoUi,Picture,PootUi],ui1focus:tuple=None,ui2focus:tuple=None,duration=2): ''' 从ui1拖动至ui2,支持图像和poco :param ui1: :param ui2: :param ui1focus: :param ui2focus: :param duration: :return: ''' #校验参数 self.__para_check(ui2, [PocoUi,Picture,PootUi]) #坐标 if type(ui1)==PocoUi and type(ui2)==PocoUi: u1=self.__poco(ui1.info) self.__set_focus(u1,ui1focus) u2 = self.__poco(ui2.info) self.__set_focus(u2, ui2focus) u1.drag_to(u2, duration) elif type(ui1)==Picture and type(ui2)==Picture: swipe(ui1.getTemplate(),ui2.getTemplate()) elif type(ui1)==PootUi and type(ui2)==PootUi: ui1x,ui1y=self.__poot(ui1.info).get_focus_x_y(ui1focus) ui2x,ui2y=self.__poot(ui2.info).get_focus_x_y(ui2focus) g().activePoot.swipe(ui1x,ui1y,ui2x,ui2y,duration) else: raise BaseException("不支持的类型组合操作")
def swipe(self, x1, y1, x2, y2, duration=2.0): if duration <= 0: raise ValueError("Operation duration cannot be less equal 0. Please provide a positive number.") direction = x2 - x1, y2 - y1 pos = self.get_target_pos(x1, y1) steps = int(duration * 40) + 1 swipe(pos, vector=direction, duration=duration, steps=steps)
def swipe(self, x1, y1, x2, y2, duration=2.0): if duration <= 0: raise ValueError("Operation duration cannot be less equal 0. Please provide a positive number.") direction = x2 - x1, y2 - y1 pw, ph = self._get_touch_resolution() p1 = [x1 * pw, y1 * ph] steps = int(duration * 40) + 1 swipe(p1, vector=direction, duration=duration, steps=steps)
def move(self): """ 移动 :param start: :param end: :return: """ swipe((550, 250), (550, 1200)) return self
def rotate_cam_zoom_to(dev, poco, node_path, log_out=False): path_event_reward = 'H_Canvas/USER_Main_UI/EVENT_REVARD' pos_from = pos_scr2abs(dev, [0.5, 0.1]) f_exit = False i = 0 while not f_exit: pos_scr = [0, 0.2] # pos_abs = pos_scr2abs(dev, pos_scr) if wait_for_node_visible(poco, path_event_reward, 1).exists(): out('event_reward') return True node_case_lod = wait_for_node_visible(poco, node_path) if node_case_lod.exists(): if log_out: out(node_path + ' exists...') pos_scr = pos_center(dev, node_case_lod, False) # pos_abs = pos_scr2abs(dev, pos_scr) step = 0.1 if pos_scr[0] > 0.48 and pos_scr[0] < 0.52: step = 0.0 f_exit = True if pos_scr[0] < 0.48 or pos_scr[0] > 0.52: step = 0.01 if pos_scr[0] < 0.40 or pos_scr[0] > 0.60: step = 0.02 if pos_scr[0] < 0.30 or pos_scr[0] > 0.70: step = 0.05 print('position:' + str(pos_scr)) if pos_scr[0] > 0.5: swipe(pos_from, vector=[step, 0], duration=1) if log_out: out('swipe to left on ' + str(step)) if pos_scr[0] < 0.5: swipe(pos_from, vector=[-step, 0], duration=1) if log_out: out('swipe to right on ' + str(step)) i += 1 if i > 30: if log_out: out('долгое ожидание поворота к обьекту', node_path) return False out('it: ' + str(i)) return True
def rotate_cam_to(dev, poco, node_path, log_out=False): #node_path = 'Rank2(Clone)/MARKER_NEW(Clone)/10-MobileRelationsMark' pos_from = pos_scr2abs(dev, [0.5, 0.1]) f_exit = False i = 0 while not f_exit: pos_scr = [0,0.2] #pos_abs = pos_scr2abs(dev, pos_scr) node_case_lod = wait_for_node_visible(poco, node_path) if node_case_lod.exists(): if log_out: out(node_path+' exists...') pos_scr = pos_center(dev, node_case_lod, False) #pos_abs = pos_scr2abs(dev, pos_scr) step = 0.1 if pos_scr[0]>0.48 and pos_scr[0]<0.52: step = 0.0 f_exit = True if pos_scr[0]<0.48 or pos_scr[0]>0.52: step = 0.03 if pos_scr[0]<0.40 or pos_scr[0]>0.60: step = 0.05 if pos_scr[0]<0.30 or pos_scr[0]>0.70: step = 0.1 print('position:'+str(pos_scr)) if pos_scr[0] > 0.5: swipe(pos_from, vector=[step,0], duration=1) if log_out: out('swipe to left on '+str(step)) if pos_scr[0] < 0.5: swipe(pos_from, vector=[-step,0], duration=1) if log_out: out('swipe to right on '+str(step)) i += 1 if i>30: if log_out: out('долгое ожидание поворота к обьекту', node_path) return False out('it: '+str(i)) return True
def my_swipe(dev, poco, path_root, subpath_from, subpath_to): node_root = wait_for_node_visible(poco, path_root) if not node_root.exists(): out('not ready to swipe, can\'t find node', path_root) return False node_from = get_node_child(node_root, subpath_from) if not node_from.exists(): out('not ready to swipe, can\'t find node', path_root + '/' + node_from) return False pos_from = pos_center(dev, node_from) node_to = get_node_child(node_root, subpath_to) if not node_to.exists(): out('not ready to swipe, can\'t find node', path_root + '/' + node_to) return False pos_to = pos_center(dev, node_to) swipe(pos_from, pos_to, duration=2) return True
def rotate_l_let_to(dev, poco, node_path, log_out=False): path_rot_right = 'H_Canvas/USER_Main_UI/CONTROLL_PANEL/ROT_RIGHT' pos_abs_right = pos_center(dev, wait_for_node_visible(poco, path_rot_right)) f_exit = False i = 0 while not f_exit: swipe(pos_abs_right, pos_abs_right, duration=2) if wait_for_node_visible(poco, node_path, 1).exists(): out('precision exists') f_exit = True return True i += 1 if i > 30: if log_out: out('долгое ожидание поворота к обьекту', node_path) return False out('it: ' + str(i)) return True
def SwipeLevel(up: bool = True): """滑动当前关卡总览""" if up: swipe(P[PM.swipe][1], P[PM.swipe][0], duration=1, steps=1000) else: swipe(P[PM.swipe][0], P[PM.swipe][1], duration=1, steps=1000)
def down_swip(self, count): # 定义下滑方法 for i in range(0, count): swipe((0.5 * self.x, 0.3 * self.y), (0.5 * self.x, 0.8 * self.y), duration=self.run_time)
def up_swip(self, count): # 定义上滑方法 for i in range(0, count): swipe((0.5 * self.x, 0.8 * self.y), (0.5 * self.x, 0.1 * self.y), duration=self.run_time)
def right_swip(self, count): # 定义右滑方法 for i in range(0, count): swipe((0.04 * self.x, 0.45 * self.y), (0.95 * self.x, 0.45 * self.y), duration=self.run_time)
def run_test(dev, poco, big_test=False): btn_back = 'H_Canvas/USER_Main_UI/BACK_BUTTON_MOBILE' btn_map = 'H_Canvas/USER_Main_UI/SWITCH_TO_MAP/Button_exit' # btn_map = 'H_Canvas/USER_Main_UI/MAP_ADDON/SWITCH_TO_WORLD' btn_quests_menu = 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_qwest' # wnd_quests_menu_lst = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg' btn_quest_5 = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg/A1 (4)' btn_quest_6 = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg/A1 (5)' btn_accept_qst = 'H_Canvas/USER_Main_UI/EVENT_REVARD/Avr_paper/Avr_Accept' btn_cancel_qst = 'H_Canvas/USER_Main_UI/EVENT_REVARD/Avr_paper/Avr_Decline' wnd_event_reward = 'H_Canvas/USER_Main_UI/EVENT_REVARD' ### --------------------------------------- if not go_to_academia(dev, poco): return False time.sleep(1) ### --------------------------------------- # идем в меню выбора квеста # out('нажимаем кнопку квестов') if not wait_and_click_button(dev, poco, btn_quests_menu): return False # тыкаем первый квест if not wait_and_click_button(dev, poco, btn_quest_5): return False # тыкаем принять if not wait_and_click_button(dev, poco, btn_accept_qst): return False # тыкаем 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_equip' btn_path = 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_equip' if not wait_and_click_button(dev, poco, btn_path): return False time.sleep(2) # подготавливаемся к свайпу sn_item_list = 'H_Canvas/USER_Main_UI/CONFIG_EQUIP_MAIN/'\ +'ItemsBG/ScrollItems/Viewport/ItemList' sn_slot_canon = 'H_Canvas/USER_Main_UI/CONFIG_EQUIP_MAIN/Slots/Canon_1' sn_slot_canon_sub = 'H_Canvas/USER_Main_UI/CONFIG_EQUIP_MAIN/Slots/Canon_1/sub_1' node_slot = wait_for_node_visible(poco, sn_slot_canon, 5) node_slot_sub = wait_for_node_visible(poco, sn_slot_canon_sub, 5) # перетаскиваем пушку в слот node_item_list = wait_for_node_visible(poco, sn_item_list, 5) node_from = node_item_list.child()[0] pos_abs_from = pos_center(dev, node_from) pos_from = pos_center(dev, node_from, False) pos_to = pos_center(dev, node_slot, False) vec = [pos_to[0] - pos_from[0], pos_to[1] - pos_from[1]] print('vector ', pos_abs_from, vec) swipe(pos_abs_from, vector=vec, duration=3) time.sleep(1) # перетаскиваем улучшение в слот node_item_list = wait_for_node_visible(poco, sn_item_list, 5) node_from = node_item_list.child()[0] pos_abs_from = pos_center(dev, node_from) pos_from = pos_center(dev, node_from, False) pos_to = pos_center(dev, node_slot_sub, False) vec = [pos_to[0] - pos_from[0], pos_to[1] - pos_from[1]] print('vector ', pos_abs_from, vec) swipe(pos_abs_from, vector=vec, duration=3) time.sleep(1) # выходим из окна улучшений if not wait_and_click_button(dev, poco, btn_back): return False time.sleep(2) # сообщение "вот ваша награда" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', '"вот ваша награда"') return False if not wait_and_click_button(dev, poco, btn_back): return False if big_test: # идем в меню выбора квеста if not wait_and_click_button(dev, poco, btn_quests_menu): return False # тыкаем третий квест if not wait_and_click_button(dev, poco, btn_quest_6): return False # тыкаем отменить if not wait_and_click_button(dev, poco, btn_cancel_qst): return False # тыкаем назад из меню квестов if not wait_and_click_button(dev, poco, btn_back): return False ### --------------------------------------- out('нажимаем кнопку выхода из города на карту') node = wait_for_node_visible(poco, btn_map, 5) if not node.exists(): out('Button not showed', btn_map) return False touch_center(dev, node) time.sleep(1) return True
def run_test_tutorial_2(dev, poco, big_test=False): btn_back = 'H_Canvas/USER_Main_UI/BACK_BUTTON_MOBILE' btn_map = 'H_Canvas/USER_Main_UI/SWITCH_TO_MAP/Button_exit' # btn_map = 'H_Canvas/USER_Main_UI/MAP_ADDON/SWITCH_TO_WORLD' btn_quests_menu = 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_qwest' # wnd_quests_menu_lst = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg' btn_quest_2 = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg/A1 (1)' btn_quest_3 = 'H_Canvas/USER_Main_UI/CONFIG_QWESTS/AVR_bg_paper/AVR_bg/A1 (2)' btn_accept_qst = 'H_Canvas/USER_Main_UI/EVENT_REVARD/Avr_paper/Avr_Accept' btn_cancel_qst = 'H_Canvas/USER_Main_UI/EVENT_REVARD/Avr_paper/Avr_Decline' wnd_event_reward = 'H_Canvas/USER_Main_UI/EVENT_REVARD' ### --------------------------------------- if not go_to_academia(dev, poco): return False time.sleep(1) ### --------------------------------------- # идем в меню выбора квеста # out('нажимаем кнопку квестов') if not wait_and_click_button(dev, poco, btn_quests_menu): return False # тыкаем первый квест if not wait_and_click_button(dev, poco, btn_quest_2): return False # тыкаем принять if not wait_and_click_button(dev, poco, btn_accept_qst): return False # тыкаем 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_team' btn_team = 'H_Canvas/USER_Main_UI/CONFIG/AllButtons/Button_team' if not wait_and_click_button(dev, poco, btn_team): return False # сообщение "Сначала наймем команду" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'нет сообщения "Сначала наймем команду"') return False if not wait_and_click_button(dev, poco, btn_back): return False # тыкаем 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/TeamManageShipMobile/ScrollingPanel/TavernButton' btn_tavern = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/ScrollingPanel/TavernButton' if not wait_and_click_button(dev, poco, btn_tavern): return False # сообщение "Найми 7 салаг." node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'нет сообщения "Найми 7 салаг."') return False if not wait_and_click_button(dev, poco, btn_back): return False # тыкаем 7 раз на салагу "+" # 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/TeamManageShipMobile/ScrollingPanel/TavernButton' btn_crewman_hire_0 = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageTavernMobile/TavernBgImage/Crewman_Hire_0/ActionButton' i = 7 while i > 0: if not wait_and_click_button(dev, poco, btn_crewman_hire_0): return False i -= 1 # тыкаем кнопку назад if not wait_and_click_button(dev, poco, btn_back): return False # сообщение "перетащите 2х матросов на паруса" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'перетащите 2х матросов на паруса') return False if not wait_and_click_button(dev, poco, btn_back): return False # подготавливаемся к свайпам sn_tmp = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/ScrollingPanel/ShipDecks' sn_parus = 'ParuDeck/CrewmanDeck_Paru_3' sn_aboard = 'AboardDeck/CrewmanDeck_Aboard_3' sn_cannon = 'CanonDeck/CrewmanDeck_Canon_3' sn_from = 'AboardDeck/CrewmanDeck_Aboard_0' node_tmp = wait_for_node_visible(poco, sn_tmp, 5) pos_parus = get_node_child(node_tmp, sn_parus).attr('pos') pos_aboard = get_node_child(node_tmp, sn_aboard).attr('pos') pos_cannon = get_node_child(node_tmp, sn_cannon).attr('pos') pos_abs_from = pos_center(dev, get_node_child(node_tmp, sn_from)) # перетаскиваем 2х матросов на паруса vec = [0, pos_parus[1] - pos_aboard[1]] print('vector ', pos_abs_from, vec) swipe(pos_abs_from, vector=vec, duration=3) sleep(1) swipe(pos_abs_from, vector=vec, duration=3) sleep(1) # сообщение "перетащите 2х матросов на паруса" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'перетащите 2х матросов на пушки') return False if not wait_and_click_button(dev, poco, btn_back): return False # перетаскиваем 2х матросов на пушки vec = [0, pos_cannon[1] - pos_aboard[1]] print('vector ', pos_abs_from, vec) swipe(pos_abs_from, vector=vec, duration=3) sleep(1) swipe(pos_abs_from, vector=vec, duration=3) sleep(1) # сообщение "больше матросов на палубе, больше эффективность" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'больше матросов на палубе, больше эффективность') return False if not wait_and_click_button(dev, poco, btn_back): return False # тыкаем на кнопку "Раненые" btn_med = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/ScrollingPanel/MedbayButton' if not wait_and_click_button(dev, poco, btn_med): return False # тыкаем на кнопку "лечить матроса" btn_med = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/ScrollingPanel/ShipDecks/'\ +'Medbay/Crewman_Wounded_1/ActionButton' if not wait_and_click_button(dev, poco, btn_med): return False # сообщение "про офицеров, выбрать" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', 'про офицеров, выбрать') return False if not wait_and_click_button(dev, poco, btn_back): return False # тыкаем на кнопку "слот офицера 1" btn_med = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/ScrollingPanel/RightPanel/'\ +'DeckStats_Paru/BorderImage/OfficerSlotsPanel/OfficerSlot1' if not wait_and_click_button(dev, poco, btn_med): return False # тыкаем на кнопку "боцман" btn_med = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/OfficersWindow/BgImage/'\ +'BorderImage/SlotsPanel/OfficerSlot1' if not wait_and_click_button(dev, poco, btn_med): return False # тыкаем на кнопку "назначить" btn_med = 'H_Canvas/USER_Main_UI/CONFIG_TEAM_MOBILE/'\ +'TeamManageShipMobile/OfficersWindow/BgImage/'\ +'BorderImage/ActionButton(Clone)' if not wait_and_click_button(dev, poco, btn_med): return False time.sleep(2); # сообщение "вот ваша награда" node = wait_for_node_visible(poco, wnd_event_reward, 5) if not node.exists(): out('долгое ожидание сообщения', '"вот ваша награда"') return False if not wait_and_click_button(dev, poco, btn_back): return False if big_test: # идем в меню выбора квеста if not wait_and_click_button(dev, poco, btn_quests_menu): return False # тыкаем третий квест if not wait_and_click_button(dev, poco, btn_quest_3): return False # тыкаем отменить if not wait_and_click_button(dev, poco, btn_cancel_qst): return False # тыкаем назад из меню квестов if not wait_and_click_button(dev, poco, btn_back): return False ### --------------------------------------- out('нажимаем кнопку выхода из города на карту') node = wait_for_node_visible(poco, btn_map, 5) if not node.exists(): out('Button not showed', btn_map) return False touch_center(dev, node) time.sleep(1) return True