Ejemplo n.º 1
0
 def wait_element_to_be_click(self,
                              loc,
                              img_doc,
                              timeout=20,
                              frequency=0.5):
     '''
     等待元素可点击
     :param loc: 元素定位的XPATH元组表达式
     :param img_doc: 截图说明
     :param timeout: 等待的超时时间
     :param frequency: 轮询频率
     :return:
     '''
     try:
         MyLog.info("开始等待页面元素<{}>是否可点击!".format(loc))
         start_time = time.time()
         WebDriverWait(self.driver, timeout,
                       frequency).until(EC.element_to_be_clickable(loc))
     except Exception as e:
         MyLog.error("页面元素<{}>等待可点击失败!".format(loc))
         self.save_screenshot(img_doc)
         raise e
     else:
         end_time = time.time()
         MyLog.info("页面元素<{}>等待可点击,等待时间:{}秒".format(
             loc, round(end_time - start_time, 2)))
Ejemplo n.º 2
0
 def dismiss_alert(self, times=30, poll_frequency=0.5, doc=''):
     try:
         WebDriverWait(self.driver, times, poll_frequency).until(EC.alert_is_present())
         alert = self.driver.switch_to_alert()
         alert.dismiss()
     except:
         MyLog.info('弹窗不存在!!!!!!!!!!!!!')
         self.save_screenshot(doc)
         raise
Ejemplo n.º 3
0
 def get_toastMsg(self, str):
     # 1、xpath表达式,文本匹配
     loc = (MobileBy.XPATH, '//*[contains(@text,"{}")]'.format(str))
     # 等待室等待元素存在,不能用等待元素可见
     try:
         WebDriverWait(self.driver, 10, 0.01).until(EC.visibility_of_element_located(loc))
         return self.driver.find_element(*loc).text
     except:
         MyLog.info('没有找到匹配的toast!!!')
         raise
Ejemplo n.º 4
0
 def get_ele_attribute(self, locator, attr, doc=""):
     # 先找到元素
     ele = self.get_element(locator, doc)
     MyLog().info('获取元素{}的属性'.format(locator))
     try:
         return ele.get_attribute(attr)
     except:
         MyLog.info('获取元素属性失败!!!!!!!!!!!!!')
         self.save_screenshot(doc)
         raise
Ejemplo n.º 5
0
 def switch_to_native_app(self, img_doc):
     '''
     切换到app原生页面
     :param img_doc: 截图说明
     :return:
     '''
     try:
         MyLog.info("切换到app原生页面")
         self.driver.switch_to.context('NATIVE_APP')
     except Exception as e:
         MyLog.error("切换到app原生页面失败!")
         self.save_screenshot(img_doc)
         raise e
Ejemplo n.º 6
0
 def application_switching(self, package_name, activity_name, img_doc):
     '''
     应用切换
     :param package_name: 包名
     :param activity_name: 欢迎页面名
     :param img_doc: 截图说明
     :return:
     '''
     try:
         MyLog.info("切换应用到{}".format(package_name))
         self.driver.start_activity(app_package=package_name, app_activity=activity_name)
     except Exception as e:
         MyLog.error("切换应用到{}失败!".format(package_name))
         self.save_screenshot(img_doc)
         raise e
Ejemplo n.º 7
0
 def get_alert_text(self, times=30, poll_frequency=0.5, doc=''):
     # 等待弹窗存在
     try:
         WebDriverWait(self.driver, times, poll_frequency).until(EC.alert_is_present())
         alert = self.driver.switch_to_alert()
         MyLog().info('弹窗存在,获取弹框的文本内容')
         try:
             return alert.text
         except:
             MyLog.info('获取弹框的文本内容失败!!!!!!!!!!!!!')
             self.save_screenshot(doc)
             raise
     except:
         MyLog.info('弹窗不存在!!!!!!!!!!!!!')
         self.save_screenshot(doc)
         raise
Ejemplo n.º 8
0
 def get_element_text(self, loc, img_doc, timeout=20, poll_frequency=0.5):
     '''
     获取WebElement对象的文本值
     :param loc: 元素定位的XPATH元组表达式
     :param img_doc: 截图说明
     :param timeout: 等待的超时时间
     :param frequency: 轮询频率
     :return: WebElement对象的文本值
     '''
     try:
         MyLog.info("在{}中获取元素<{}>的文本值".format(img_doc, loc))
         self.wait_ele_visible(loc, img_doc, timeout, poll_frequency)
         text = self.get_element(loc, img_doc).text
     except Exception as e:
         MyLog.error("在{}中获取元素<{}>的文本值失败!".format(img_doc, loc))
         self.save_screenshot(img_doc)
         raise e
     else:
         MyLog.info("获取到的元素文本值为:{}".format(text))
         return text
Ejemplo n.º 9
0
 def sliding_screen(self, direction, img_doc):
     '''
     滑屏操作
     :param direction: 滑屏方向:上-up;下-down;左-left;右-right
     :param img_doc: 截图说明
     :return:
     '''
     size = self.driver.get_window_size()
     try:
         MyLog.info("开始向{}方向滑动".format(direction))
         if direction.lower() == 'up':
             self.driver.swipe(start_x=size['width'] * 0.5,
                               start_y=size['height'] * 0.9,
                               end_x=size['width'] * 0.5,
                               end_y=size['height'] * 0.1,
                               duration=200)
         elif direction.lower() == 'down':
             self.driver.swipe(start_x=size['width'] * 0.5,
                               start_y=size['height'] * 0.1,
                               end_x=size['width'] * 0.5,
                               end_y=size['height'] * 0.9,
                               duration=200)
         elif direction.lower() == 'left':
             self.driver.swipe(start_x=size['width'] * 0.9,
                               start_y=size['height'] * 0.5,
                               end_x=size['width'] * 0.1,
                               end_y=size['height'] * 0.5,
                               duration=200)
         elif direction.lower() == 'right':
             self.driver.swipe(start_x=size['width'] * 0.1,
                               start_y=size['height'] * 0.5,
                               end_x=size['width'] * 0.9,
                               end_y=size['height'] * 0.5,
                               duration=200)
         else:
             MyLog.error("方向选择错误!")
     except Exception as e:
         MyLog.error("向{}方向滑动屏幕失败!".format(direction))
         self.save_screenshot(img_doc)
         raise e
Ejemplo n.º 10
0
 def switch_to_webview(self, loc, img_doc, timeout=20, frequency=0.5):
     '''
     切换到webview页面
     :param loc: webview页面的元素
     :param img_doc: 截图说明
     :param timeout: 等待的超时时间
     :param frequency: 轮询频率
     :return:
     '''
     try:
         MyLog.info("等待元素{}可见,并进行webview切换".format(loc))
         start_time = time.time()
         WebDriverWait(self.driver, timeout, frequency).until(
             EC.visibility_of_element_located(loc))
         cons = self.driver.contexts
         MyLog.info("开始切换到webview:{}".format(cons[-1]))
         self.driver.switch_to.context(cons[-1])
     except Exception as e:
         MyLog.error("切换webview失败!")
         self.save_screenshot(img_doc)
         raise e
     else:
         end_time = time.time()
         MyLog.info("切换到webview:{}成功,等待时间:{}秒".format(
             cons[-1], round(end_time - start_time, 2)))
Ejemplo n.º 11
0
 def get_elements_text(self, loc, doc="", timeout=20, poll_frequency=0.5):
     '''
     获取WebElement对象的所有文本值
     :param loc: 元素定位的XPATH元组表达式
     :param img_doc: 截图说明
     :param timeout: 等待的超时时间
     :param frequency: 轮询频率
     :return: WebElement对象的文本值的列表
     '''
     try:
         MyLog.info("在{}中获取元素<{}>的所有文本值".format(doc, loc))
         self.wait_ele_visible(loc, doc, timeout, poll_frequency)
         all_text = self.get_elements(loc, doc)
         text_list = []
         for one_text in all_text:
             text_list.append(one_text.text)
     except Exception as e:
         MyLog.error("在{}中获取元素<{}>的所有文本值失败!".format(doc, loc))
         self.save_screenshot(doc)
         raise e
     else:
         MyLog.info("获取到的元素文本值列表为:{}".format(text_list))
         return text_list