def on_screenshot_single_click(self, event): self.timer.Stop() click_action = 'click' if not self._mouse_up: click_action = 'long_click' if not self._element_tree: Log.e('on_screenshot_single_click', 'failed to get element tree') return self._focused_element = None self._get_focused_element(self._single_click_position, self._element_tree) print 'focus_element:', self._focused_element ['rect'] rect = (self._focused_element ['rect']['origin']['x'], self._focused_element ['rect']['origin']['y'], \ self._focused_element ['rect']['size']['width'], self._focused_element ['rect']['size']['height']) #红色标记截图中鼠标位置的控件 if self._orientation == 3: rect = (self.image_shown_width/self._scale_rate[0]-rect[1] - rect[3], rect[0], rect[3], rect[2]) self.mask_panel.highlight_element(rect, self._scale_rate) #展开控件树 self._expand_uitree(self._focused_element['item_id']) #选中对应的控件 self.tc_uitree.SelectItem(self._focused_element['item_id']) self.tc_uitree.SetFocus() #推荐控件的QPath self._recommend_qpath(self._focused_element) #判断是否进行远程控制 if self.remote_operator_menu.IsChecked() and self._device_driver: driver_method = getattr(self._device_driver, click_action) driver_method(self.x, self.y) time.sleep(1.5) self._run_in_work_thread(self.on_get_uitree,event)
def _start_app(self): bundle_id = self.tc_bundle_id.GetValue() while(True): if self._process_dlg_running: break dlg = self._dialog try: xcode_version = self._device_driver.get_xcode_version() ios_version = self._device_driver.get_ios_version() Log.i('xcode_version:%s ios_version:%s' % (xcode_version, ios_version)) # 增加版本检测 self._run_in_main_thread(dlg.on_update) self._app_started = self._device_driver.start_app(bundle_id) if self._app_started: self._run_in_main_thread(self.statusbar.SetStatusText, u"App启动成功", 0) self._run_in_main_thread(dlg.on_update_title_msg, '抓取App屏幕中......') img_data = self._device_driver.take_screenshot() self._orientation = self._device_driver.get_screen_orientation() self._run_in_main_thread(self._update_screenshot, img_data) self._run_in_main_thread(dlg.on_update_title_msg, '抓取App控件树中......') self._element_tree = self._device_driver.get_element_tree() self._run_in_main_thread(self._update_uitree) else: self._run_in_main_thread(self.statusbar.SetStatusText, u"App启动失败:", 0) except: error = traceback.format_exc() Log.e('start_app', error) self._run_in_main_thread(self.create_tip_dialog, error.decode('utf-8')) self._process_dlg_running = False self._run_in_main_thread(dlg.on_destory)
def _update_device_list(self): self._run_in_main_thread(self.statusbar.SetStatusText, u"正在获取设备列表......", 0) time.sleep(2) try: start_time = time.time() devices = self._host_driver.list_devices() end_time = time.time() print 'cost time:',(end_time - start_time) except: error = traceback.format_exc() Log.e('update_device_list', error) self._run_in_main_thread(self.statusbar.SetStatusText, u"更新设备列表失败", 0) self._run_in_main_thread(self.create_tip_dialog, error.decode('utf-8')) return self.cb_devicelist.Clear() for dev in devices: self.cb_devicelist.Append(dev['name'].decode('utf-8'), dev) self._device = devices[0] self._run_in_main_thread(self.btn_refresh.Enable) self._run_in_main_thread(self.btn_refresh_applist.Enable) self._run_in_main_thread(self.cb_devicelist.Select, 0) self._run_in_main_thread(self.statusbar.SetStatusText, u"更新设备列表完毕", 0) self._update_bundle_id_list()
def add_item(self, root, path): self.directory_tree[root]['expanded'] = True try: file_list = self._device_driver.get_sandbox_path_files( self._bundle_id, path) for i in file_list: # 获得绝对路径 tmpdir = os.path.join(path, i['path']) tmpdict = {} # 如果是路径的话 还需对该路径进行一次操作 if i['is_dir']: child = self.treectrl.AppendItem( root, os.path.basename(i['path'])) tmpdict['path'] = tmpdir tmpdict['is_dir'] = i['is_dir'] tmpdict['expanded'] = False self.directory_tree[child] = tmpdict self.treectrl.SetItemImage(child, 0, which=wx.TreeItemIcon_Normal) tmpdict = {} # 如果是目录的话 else: child = self.treectrl.AppendItem( root, os.path.basename(i['path'])) tmpdict['path'] = tmpdir tmpdict['is_dir'] = i['is_dir'] tmpdict['expanded'] = False self.directory_tree[child] = tmpdict self.treectrl.SetItemImage(child, 1, which=wx.TreeItemIcon_Normal) tmpdict = {} except: error = traceback.format_exc() Log.e('add_item', error) self._main_frame.create_tip_dialog(error.decode('utf-8'))
def on_install(self, pkg_path): self._run_in_main_thread(self.show_dialog, 'APP正在安装中......') while(True): if self._process_dlg_running: break dlg = self._dialog self._run_in_main_thread(dlg.on_update) if not self._device_driver: self._device_driver = DeviceDriver(self._host_driver.host_url, self._device['udid']) try: result = self._device_driver.install_app(pkg_path) self._process_dlg_running = False self._run_in_main_thread(dlg.on_destory) if result: self._run_in_main_thread(wx.MessageBox, '安装成功', '信息提示', wx.OK|wx.ICON_INFORMATION) self._update_bundle_id_list() else: self._run_in_main_thread(wx.MessageBox, '安装失败', '信息提示', wx.OK|wx.ICON_INFORMATION) except: error = traceback.format_exc() Log.e('start_app', error) self.create_tip_dialog(error.decode('utf-8'))
# governing permissions and limitations under the License. # '''UISpy App启动入口 ''' import wx from mainframe import MainFrame from util.logger import Log class UISpyApp(wx.App): def OnInit(self): self.main = MainFrame() self.main.Center() self.main.Show() self.SetTopWindow(self.main) return True if __name__ == '__main__': try: Log.i('main', 'UISpy started...') app = UISpyApp() app.MainLoop() except: import traceback message = traceback.format_exc() Log.e('main', message) dialog = wx.MessageDialog(None, message, u"错误", wx.OK | wx.ICON_ERROR) dialog.ShowModal()