Example #1
0
 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)
Example #2
0
    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)
Example #3
0
 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()
Example #4
0
 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'))
Example #5
0
 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'))
Example #6
0
# 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()