def get_frame_element(self, loc, img_doc, timeout=20, frequency=0.5): # need update """ 跳转到iframe :param frequency: :param timeout: :param img_doc: :param loc: :return: """ case_log.info("在 {},跳转到iframe{}。".format(img_doc, loc)) start_time = time.time() try: ele = WebDriverWait(self.driver, timeout, frequency).until( EC.frame_to_be_available_and_switch_to_it(loc)) except TimeoutError: # 异常截图 - 通过截图名称,知道是哪个页面或者那个模块出错了 # 异常日志捕获 case_log.exception("跳转iframe失败") self.save_screen_shoot(img_doc) else: end_time = time.time() case_log.info("跳转到iframe{},等待时间长为:{}s 。".format( loc, round(end_time - start_time, 3))) return ele
def wait_element_visible(self, loc, img_doc, timeout=20, frequency=0.5): """ 等待元素可见 :param frequency: :param loc: :param img_doc:截图图片 :param timeout: :param frequeny: :return: """ case_log.info("在 {} ,等待元素 {} 可见。".format(img_doc, loc)) start_time = time.time() try: ele = WebDriverWait(self.driver, timeout, frequency).until( EC.visibility_of_element_located(loc)) except Exception as e: # 异常截图 - 通过截图名称,知道是哪个页面或者那个模块出错了 # 异常日志捕获 case_log.exception("页面{}等待元素可见失败".format(loc)) self.save_screen_shoot(img_doc) raise e else: end_time = time.time() case_log.info("页面元素{}等待存在,等待时间长为:{}s 。".format( loc, round(end_time - start_time, 3))) return ele
def wait_page_contain_element(self, loc, img_doc, timeout=20, frequency=0.5): """ 等待元素存在 :param loc: :param img_doc:截图图片 :param timeout: :param frequeny: :return: """ case_log.info("在 {},等待元素{}存在。".format(img_doc, loc)) start_time = time.time() try: ele = WebDriverWait(self.driver, timeout, frequency).until( EC.presence_of_element_located(loc)) except TimeoutError: # 异常截图 - 通过截图名称,知道是哪个页面或者那个模块出错了 # 异常日志捕获 case_log.exception("页面元素{}等待元素存在失败".format(loc)) self.save_screen_shoot(img_doc) else: end_time = time.time() case_log.info("页面元素{}等待存在,等待时间长为:{}s 。".format( loc, round(end_time - start_time, 3))) return ele
def get_mouse_element_click(self, img_doc, timeout=20, frequency=0.5): """鼠标悬浮""" self.wait_element_visible(img_doc, timeout, frequency) ele = self.get_element(img_doc) case_log.info("在 {},对元素{}进行鼠标操作 。".format(img_doc)) try: ac = ActionChains(self.driver) return ac.move_to_element(ele).click(ele).perform() except Exception as e: case_log.exception("鼠标操作元素失败") self.save_screen_shoot(img_doc) raise e
def get_element_click(self, loc, img_doc, timeout=20, frequency=0.5): """等待元素可点击""" self.wait_element_visible(loc, img_doc, timeout, frequency) ele = self.get_element(loc, img_doc) case_log.info("在 {},点击元素{}。".format(img_doc, loc)) try: WebDriverWait(self.driver, timeout, frequency).until( EC.visibility_of_element_located(loc)) return ele.click() except Exception as e: case_log.exception("在{}中点击元素,点击元素失败".format(img_doc, loc)) self.save_screen_shoot(img_doc) raise e
def switch_to_default_content(self, img_doc): """ 切换iframe到main页面 :param img_doc: 截图说明,截图图片 :return: """ try: case_log.info("切换iframe到main页面") self.driver.switch_to.default_content() except Exception as e: case_log.error("切换iframe到main页面失败!") self.save_screen_shoot(img_doc) raise e
def save_screen_shoot(self, img_doc): """ img_doc: 执行的操作描述 存储到指定目录下 - 加上路径配置 :param img_doc:截图图片 :return: """ t = datetime.strftime(datetime.now(), "%Y%m%d%H%M") # t的格式是 年月日 filename = contants.screenshots_dir + '/' + "{}_{}.png".format( t, img_doc) self.driver.save_screenshot(filename) with open(filename, mode='rb') as f: file = f.read() allure.attach(file, img_doc, allure.attachment_type.PNG) case_log.info("页面截图成功文件保存在:{}".format(filename))
def get_element_input_txt(self, loc, img_doc, content, timeout=20, frequency=0.5): """对输入框输入文本内容""" self.wait_element_visible(loc, img_doc, timeout, frequency) ele = self.get_element(loc, img_doc) case_log.info("在 {},对元素{}输入内容:{}。".format(img_doc, loc, content)) try: return ele.send_keys(content) except Exception as e: case_log.exception("在元素{}中输入内容{}元素输入文本失败".format(loc, content)) self.save_screen_shoot(img_doc) raise e
def get_element(self, loc, img_doc): """获取页面中的所有元素""" case_log.info("在 {}, 查找元素{}可见。".format(img_doc, loc)) start_time = time.time() try: ele = self.driver.find_element(*loc) except Exception as e: # 异常截图 - 通过截图名称,知道是哪个页面或者那个模块出错了 # 异常日志捕获 case_log.exception("在{}中查找元素{}查找失败!".format(img_doc, loc)) self.save_screen_shoot(img_doc) raise e else: end_time = time.time() case_log.info("页面元素{}查找存在,等待时间长为:{}s 。".format( loc, round(end_time - start_time, 3))) return ele
def clear_text(self, loc, img_doc, timeout=20, frequency=0.5): """ 清除文本框的内容 :param loc: :param img_doc: 截图说明,截图图片 :param timeout: 等待的超时时间 :param frequency: 轮询频率 :return: """ try: case_log.info("在 {}中清除元素{}的文本内容".format(img_doc, loc)) self.get_element_click(loc, img_doc, timeout, frequency) self.get_element(loc, img_doc).clear() except Exception as e: case_log.error("在 {}中清除元素{}的文本内容失败!".format(img_doc, loc)) self.save_screen_shoot(img_doc) raise e
def upload_file(self, filename, img_doc, browser_type="chrome"): """ 非input标签的文件上传 :param filename: 文件名(绝对路径) :param img_doc: 截图说明,截图图片 :param browser_type: 浏览器类型 :return: """ try: case_log.info("上传文件({})".format(filename)) time.sleep(2) self.get_upload_file(filePath=filename, browser_type=browser_type) except Exception as e: case_log.error("上传文件({})失败!".format(filename)) self.save_screen_shoot(img_doc) raise e else: time.sleep(2)
def get_element_select(self, loc, img_doc, timeout=20, frequency=0.5): """ 等待元素可以被选择 :param loc: :param fqc: :return: """ case_log.info("在 {},等待元素{}可以选择。".format(img_doc, loc)) start_time = time.time() try: ele = WebDriverWait(self.driver, timeout, frequency).until( EC.element_located_to_be_selected(loc)) except Exception as e: case_log.exception("等待元素{}选择失败".format(loc)) self.save_screen_shoot(img_doc) else: end_time = time.time() case_log.info("页面等待元素{}可以选择,等待时间长为:{}s 。".format( loc, round(end_time - start_time, 3))) return ele
def get_element_txt(self, loc, img_doc, timeout=20, frequency=0.5): """ 获取元素文本只要存在就行,不需要可见 :param loc: :param img_doc:截图图片 :param timeout: :return: """ self.wait_page_contain_element(loc, img_doc, timeout, frequency) ele = self.get_element(loc, img_doc) case_log.info("在 {} ,获取元素文本内容: {} 。".format(img_doc, loc)) try: text = ele.text except Exception as e: case_log.exception("在{}中获取元素{}元素文本内容失败".format(loc, img_doc)) self.save_screen_shoot(img_doc) raise e else: case_log.info("获取元素文本内容为:{} ".format(text)) return text
def get_element_attribute(self, loc, img_doc, attribute_name, timeout=20, frequency=0.5): """获取WebElement对象的属性值""" self.wait_element_visible(loc, img_doc, timeout, frequency) ele = self.get_element(loc, img_doc) case_log.info("在 {},获取元素{}属性{}。".format(img_doc, attribute_name, loc)) try: value = ele.get_attribute(attribute_name) except Exception as e: case_log.exception("在 {}中获取元素{}的属性{}获取元素属性失败".format( img_doc, loc, attribute_name)) self.save_screen_shoot(img_doc) raise e else: case_log.info("获取元素属性内容为: {} ".format(value)) return value