def right_and_Left(self, loc, img_doc, timeout=30, poll_fre=0.5): logger.info("由右向左滑动:") self.slide(loc, img_doc, timeout, poll_fre) self.driver.swipe(self.Maximum["width"] * 0.80, self.Maximum["height"] * 0.40, self.Maximum["width"] * 0.10, self.Maximum["height"] * 0.40, 200)
def down_and_up(self, loc, img_doc, timeout=30, poll_fre=0.5): logger.info("由下向上滑动:") self.slide(loc, img_doc, timeout, poll_fre) self.driver.swipe(self.Maximum["width"] * 0.3, self.Maximum["height"] * 0.15, self.Maximum["width"] * 0.3, self.Maximum["height"] * 0.85, 200)
def get_ele(self, loc, img_doc): logger.info("{} : 查找 {} 元素.".format(img_doc, loc)) try: ele = self.driver.find_element(*loc) except AssertionError as e: logger.exception("查找元素失败:") raise e else: return ele
def switch_to_new_window(self): # 等待新窗口出现 time.sleep(2) # 获取窗口的句柄,切换进新的窗口 wins = self.driver.window_handles logger.info("xxxxx") try: self.driver.switch_to.window(wins[-1]) except: pass
def click_ele(self, loc, img_doc, timeout=30, poll_fre=0.5): # 等待元素可见 self.wait_ele(loc, img_doc, timeout, poll_fre) ele = self.get_ele(loc, img_doc) logger.info("{}: 点击 {} 元素 ".format(img_doc, loc)) try: ele.click() except AssertionError as e: logger.info("{}点击 {} 元素失败".format(img_doc, loc)) raise e
def get_element(self,locator,img_doc): logger.info("{} : 查找 {} 元素.".format(img_doc,locator)) try: ele = self.driver.find_element(*locator) except: # 异常信息写入日志 logger.exception("查找元素失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: return ele
def get_attr(self, locator, name, img_doc, timeout=30, poll_fre=0.5): self.wait_ele(locator, img_doc, timeout, poll_fre) ele = self.get_ele(locator, img_doc) logger.info("{}: 获取 {} 元素的文本内容.".format(img_doc, locator)) try: tel = ele.get_attribute(name) except: logger.exception(("获取元素文本值失败{}").format(locator)) self.save_page_screenshot(img_doc) raise else: logger.info("获取的文本值为: {}".format(tel)) return tel
def send_text(self, locator, value, img_doc, timeout=30, poll_fre=0.5): # 1)等待元素可见;2)查找元素;3)输入动作 self.wait_ele(locator, img_doc, timeout, poll_fre) ele = self.get_ele(locator, img_doc) logger.info("{}: 对 {} 元素输入文本 {}".format(img_doc, locator, value)) try: ele.send_keys(value) except: # 异常信息写入日志 logger.exception("输入文本失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise
def click_element(self,locator,img_doc,timeout=30,poll_fre=0.5): # 1)等待元素可见;2)查找元素;3)点击 self.wait_ele_visible(locator, img_doc, timeout, poll_fre) ele = self.get_element(locator, img_doc) logger.info("{}: 点击 {} 元素 ".format(img_doc,locator)) try: ele.click() except: # 异常信息写入日志 logger.exception("点击操作失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise
def get_current_url(self,locator,img_doc,timeout=30,poll_fre=0.5): self.wait_page_contains_element(locator, img_doc, timeout, poll_fre) logger.info("{}: 获取 {} 元素的属性.".format(img_doc, locator)) try: value = self.driver.current_url except: # 异常信息写入日志 logger.exception("获取url失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: logger.info("获取的url为: {}".format(value)) return value
def Multipoint(self, loc, img_doc, timeout=30, poll_fre=0.5): self.wait_ele(loc, img_doc, timeout, poll_fre) time.sleep(20) # 从中间划到左下 logger.info(" 从中间划到左下:") t1 = TouchAction(self.driver).press(x=self.Maximum["width"]*0.5,y=self.Maximum["height"]*0.5).wait(200)\ .move_to(x=self.Maximum["width"]*0.1,y=self.Maximum["height"]*0.9).release() # 从中间划到右上 logger.info(" 从中间划到右上:") t2 = TouchAction(self.driver).press(x=self.Maximum["width"] * 0.5, y=self.Maximum["height"] * 0.5).wait(200) \ .move_to(x=self.Maximum["width"] * 0.9, y=self.Maximum["height"] * 0.1).release() mm = MultiAction(self.driver) mm.add(t1, t2) mm.perform()
def get_toast(self, locator, img_doc, timeout=30, poll_fre=0.5): WebDriverWait(self.driver, timeout, poll_fre).until(EC.presence_of_element_located(locator)) ele = self.get_ele(locator, img_doc) logger.info("{}: 获取 {} 元素的文本内容.".format(img_doc, locator)) try: te = ele.text except: logger.exception(("获取元素文本值失败{}").format(locator)) self.save_page_screenshot(img_doc) raise else: logger.info("获取的文本值为: {}".format(te)) return te
def get_element_text(self,locator,img_doc,timeout=30,poll_fre=0.5): # 1)等待元素存在;2)查找元素;3)获取动作 self.wait_ele_visible(locator,img_doc,timeout,poll_fre) ele = self.get_element(locator,img_doc) logger.info("{}: 获取 {} 元素的文本内容.".format(img_doc,locator)) try: text = ele.text except: # 异常信息写入日志 logger.exception("获取元素文本值失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: logger.info("获取的文本值为: {}".format(text)) return text
def check_element_visible(self,locator,img_doc,timeout=10,poll_fre=0.5): """ # 检测元素是否在页面存在且可见。 如果退出元素存在,则返回True。否则返回False :return: 布尔值 """ logger.info("{}: 检测元素 {} 存在且可见于页面。".format(img_doc,locator)) try: WebDriverWait(self.driver,timeout,poll_fre).until(EC.visibility_of_element_located(locator)) except: logger.exception(" {}秒内元素在当前页面不可见。".format(timeout)) self.save_page_screenshot(img_doc) return False else: logger.info(" {}秒内元素可见。".format(timeout)) return True
def wait_ele(self, loc, img_doc, timeout=30, poll_fre=0.5): logger.info("{} : 等待 {} 元素可见".format(img_doc, loc)) try: # 起始等待的时间 datetime start = datetime.datetime.now() WebDriverWait(self.driver, timeout, poll_fre).until( EC.visibility_of_element_located(loc)) except AssertionError as e: logger.exception("等待元素可见失败:") self.save_page_screenshot(img_doc) raise e else: # 结束等待的时间 end = datetime.datetime.now() logger.info("等待结束.开始时间为{},结束时间为:{},一共等待耗时为:{}".format( start, end, end - start))
def save_page_screenshot(self, img_doc): """ :param img_doc: :return: """ # 路径配置文件中引入图片保存路径 + 年月日-时分秒 # # 截图 - 命名。 页面名称_行为名称_当前的时间.png # 页面_功能_时间.png now = time.strftime("%Y-%m-%d %H_%M_%S") screenshot_path = picture_path + "/{}_{}.png".format(img_doc, now) try: self.driver.save_screenshot(screenshot_path) except: logger.exception("当前网页截图失败") else: logger.info("截取当前网页成功并存储在: {}".format(screenshot_path))
def get_element_attribute(self,locator,attr,img_doc,timeout=30,poll_fre=0.5): # 1)等待元素存在;2)查找元素;3)获取动作 self.wait_page_contains_element(locator, img_doc, timeout, poll_fre) ele = self.get_element(locator, img_doc) logger.info("{}: 获取 {} 元素的属性 {}.".format(img_doc,locator,attr)) try: value = ele.get_attribute(attr) except: # 异常信息写入日志 logger.exception("获取元素属性失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: logger.info("获取的属性值为: {}".format(value)) return value
def wait_page_contains_element(self,locator,img_doc,timeout=30,poll_fre=0.5): logger.info("{} : 等待 {} 元素存在".format(img_doc,locator)) try: # 起始等待的时间 datetime start = datetime.datetime.now() WebDriverWait(self.driver, timeout, poll_fre).until(EC.presence_of_element_located(locator)) except: # 异常信息写入日志 logger.exception("等待元素存在失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: # 结束等待的时间 end = datetime.datetime.now() logger.info("等待结束.开始时间为{},结束时间为:{},一共等待耗时为:{}".format(start,end,end-start))
def get_lb_slide(self, lo, loc, img_doc, timeout=30, poll_fre=0.5): logger.info(" 列表滑动:") self.wait_ele(lo, img_doc, timeout, poll_fre) # 新的页面与old页面进行循环,不相等就行循环 old = None new = self.driver.page_source while old != new: try: self.slide(lo, img_doc) ele = self.get_ele(loc, "查找元素") ele.click() except: self.Up_and_down(lo, img_doc) old = new new = self.driver.page_source else: break
def wait_ele_visible(self,locator,img_doc,timeout=30,poll_fre=0.5): """ :param locator: 元组类型。(元素定位策略,元素定位表达式) :param img_doc: 截图文件的命名部分。${页面名称_行为名称}_当前的时间.png :param timeout: :param poll_fre: :return: None """ logger.info("{} : 等待 {} 元素可见".format(img_doc,locator)) try: # 起始等待的时间 datetime start = datetime.datetime.now() WebDriverWait(self.driver,timeout,poll_fre).until(EC.visibility_of_element_located(locator)) except: # 异常信息写入日志 logger.exception("等待元素可见失败:") # 级别:Error tracebak的信息完整的写入日志。 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.save_page_screenshot(img_doc) raise else: # 结束等待的时间 end = datetime.datetime.now() logger.info("等待结束.开始时间为{},结束时间为:{},一共等待耗时为:{}".format(start,end,end-start))