Esempio n. 1
0
    def wait_for_exist(self, timeout=10, interval=0.5):
        '''等待窗口出现
                处理窗口名和进程名会变的问题
        '''
        time0 = time.time()
        current_activity = ''
        pattern = re.compile(self.__class__.Activity2)
        while time.time() - time0 < timeout:
            current_activity = self.device.get_current_activity()
            if current_activity == self.__class__.Activity:
                return True
            if current_activity:
                ret = pattern.match(current_activity)
                if ret:
                    if ret.group(1):
                        process = self.Process2 % ret.group(1)
                    else:
                        process = self.Process2 % 0
                    self._driver = self._app.get_driver(process)
                    for key in self._locators:
                        # 替换掉_driver实例
                        self._locators[key]['activity'] = current_activity
                        self._locators[key]['driver'] = self._driver

                    return True
            time.sleep(interval)
        raise ControlNotFoundError('窗口:%s 未找到,当前窗口为:%s' % (
            self.__class__.Activity, current_activity))
Esempio n. 2
0
 def _init_proxy(self):
     t0 = time.time()
     while time.time() - t0 < self.timeout:
         if self.NAME is None:
             raise ValueError("NAME of class \"%s\" is not set" %
                              type(self))
         control_id = self._driver.get_window_by_name(self.NAME)
         if control_id:
             return ControlProxy(self._driver, control_id)
         time.sleep(self.interval)
     raise ControlNotFoundError("window with name \"%s\" not found" %
                                self.NAME)
Esempio n. 3
0
 def wait_for_activity(self, activity, timeout=15, interval=0.5):
     '''等待Activity打开
     
     :param activity: Activtiy名称
     :type activity:  string
     :param timeout:  超时时间,单位:S
     :type timeout:   int/float
     :param interval: 检查间隔时间,单位:S
     :type interval:  int/float
     '''
     time0 = time.time()
     while time.time() - time0 < timeout:
         if self.crashed:
             raise RuntimeError('%s Crashed' % self.__class__.__name__)
         current_activity = self.device.get_current_activity()
         if current_activity == activity: return True
         time.sleep(interval)
     raise ControlNotFoundError('Wait for Activity %s timeout, current Activity: %s' % (activity, current_activity))
Esempio n. 4
0
 def _init_proxy(self):
     if isinstance(self._locator, basestring):
         control_ids = self._driver.find_controls_by_name(
             self._root.id, self._locator)
     elif isinstance(self._locator, int):
         control_ids = [self._locator]
     elif isinstance(self._locator, QPath):
         control_ids = self._driver.find_controls(self._root.id,
                                                  self._locator.dumps()[0])
     else:
         raise TypeError()
     if control_ids:
         if len(control_ids) == 1:
             return ControlProxy(self._driver, control_ids[0])
         else:
             raise ControlAmbiguousError()
     else:
         raise ControlNotFoundError()
Esempio n. 5
0
 def post_init(self):
     '''真正等待Activity的逻辑
     '''
     timeout = 20
     time0 = time.time()
     current_activity = None
     while time.time() - time0 < timeout:
         current_activity = self.device.current_activity
         if current_activity == self.__class__.Activity or current_activity == self.__class__.Activity2:
             if current_activity != self.__class__.Activity:
                 # 修正为当前Activity
                 for key in self._locators.keys():
                     self._locators[key]['activity'] = current_activity
             break
         time.sleep(0.5)
     else:
         raise ControlNotFoundError(
             'Current window: %s not in (%s, %s)' %
             (current_activity, self.__class__.Activity,
              self.__class__.Activity2))
Esempio n. 6
0
 def __getitem__(self, index):
     '''主要用于解决WebView会变问题
     '''
     if index == 'webview':
         timeout = 60
         time0 = time.time()
         while time.time() - time0 < timeout:
             if self.Controls["系统WebView1"].exist():
                 return self.Controls["系统WebView1"]
             elif self.Controls["系统WebView2"].exist():
                 return self.Controls["系统WebView2"]
             elif self.Controls["X5WebView"].exist():
                 return self.Controls["X5WebView"]
             elif self.Controls["XWalkWebView"].exist():
                 return self.Controls["XWalkWebView"]
             time.sleep(0.5)
         else:
             raise ControlNotFoundError(index)
     else:
         return super(WXBrowserPanel, self).__getitem__(index)