def get_window_url(self, img_doc): do_log.info("获取当前窗口url") try: url = self.driver.current_url except: do_log.error("获取当前窗口url失败!!!".format(img_doc)) self.save_screenshot(img_doc) raise else: return url
def save_page_shot(self, img_doc): """ 保存截图封装 :param img_doc: :return: """ shot_name = os.path.join(SHOT_PATH, img_doc) + "_" + \ datetime.strftime(datetime.now(), '%Y%m%d%H%M%S') + ".png" try: self.driver.save_screenshot(shot_name) except AssertionError as e: do_log.error("保存截图失败{}".format(e)) else: do_log.info("保存截图成功")
def input_text(self, loc, text, img_doc, timeout=10, poll_frequency=0.5): self.wait_element_visible(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) ele = self.get_element(loc, img_doc) do_log.info("在{}元素{}中输入文本{}!".format(img_doc, loc, text)) try: ele.send_keys(text) except: # 异常截图 - 通过截图名称,知道是哪个页面或者哪个模块出错了 # 异常日志捕获 do_log.error("在{}中,元素{}输入文本{}失败!!!".format(img_doc, loc, text)) self.save_screenshot(img_doc) raise
def test_enter_classroom(self, setup): do_log.info("----------进入班级用例开始执行----------") ClassroomPage(setup).enter_classroom() time.sleep(5) file_name = os.path.join( PAGESHOTS_DIR, f"加入课程_{datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')}.png") try: assert WebClassPage(setup).check_ele() assert setup.current_url == "https://www.ketangpai.com/Interact/index/courseid/MDAwMDAwMDAwMLR2vd6Gz8mw.html" except: setup.save_screenshot(file_name) do_log.error(f"用例执行失败,截图为:{file_name}") else: do_log.info("----------进入班级用例执行成功----------")
def test_03_exit_class_success(self, init_driver): do_log.info("-------------退课用例开始执行----------------") classroom_page.ClassroomPage(init_driver).exit_web_class(password) show_tip_text = classroom_page.ClassroomPage( init_driver).get_show_tip_text() file_name = os.path.join( PAGESHOTS_DIR, f"加入课程_{datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')}.png") try: assert show_tip_text == "课程退课成功" except: init_driver.save_screenshot(file_name) do_log.error(f"退课用例执行失败,截图:{file_name}") else: do_log.info("-------------退课用例执行完成----------------")
def wait_element_invisible(self, loc, img_doc, timeout=10, poll_frequency=0.5): do_log.info("判断元素是否消失!!!") try: wait = WebDriverWait(self.driver, timeout=timeout, poll_frequency=poll_frequency) wait.until(EC.invisibility_of_element_located(loc)) except: do_log.error("元素{}仍存在!!!".format(loc)) self.save_screenshot(img_doc) return True return False
def get_element_text(self, loc, img_doc, timeout=10, poll_frequency=0.5): self.wait_page_contains_element(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) ele = self.get_element(loc, img_doc) do_log.info("在{}中获取元素{}的文本内容".format(img_doc, loc)) try: text = ele.text except: do_log.error("在{}中获取元素{}的文本内容失败!!!".format(img_doc, loc)) self.save_screenshot(img_doc) raise else: do_log.info("在{}中获取元素{}的文本内容为:{}".format(img_doc, loc, text)) return text
def click_element(self, loc, img_doc, timeout=10, poll_frequency=0.5): # 元素可见、找到元素 self.wait_element_visible(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) ele = self.get_element(loc, img_doc) do_log.info("在{}点击元素{}!".format(img_doc, loc)) try: ele.click() except: # 异常截图 - 通过截图名称,知道是哪个页面或者哪个模块出错了 # 异常日志捕获 do_log.error("元素点击{}失败!!!".format(loc)) self.save_screenshot(img_doc) raise
def get_element(self, loc, img_doc): """ 查找元素 :param loc: :param img_doc: :return: """ do_log.info("查找{}可见".format(img_doc)) try: ele = self.driver.find_element(*loc) except: self.save_page_shot(img_doc) do_log.error("查找{}失败,保存截图".format(img_doc)) raise else: return ele
def test_01_success_join_classroom(self, init_driver): do_log.info("-------------成功加入课程用例开始执行----------------") # 加入课程 classroom_page.ClassroomPage(init_driver).join_classroom( success_data[0]["join_class_code"]) # 获取提示信息 show_tip_text = classroom_page.ClassroomPage( init_driver).get_show_tip_text() file_name = os.path.join( PAGESHOTS_DIR, f"加入课程_{datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')}.png") try: assert show_tip_text == success_data[0]["check_msg"] except: init_driver.save_screenshot(file_name) do_log.error(f"加入课程用例执行失败,截图:{file_name}") else: do_log.info("-------------成功加入课程用例执行完毕----------------")
def get_elements(self, loc, img_doc, timeout=10, poll_frequency=0.5): self.wait_element_visible(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) do_log.info("在{}查找多个元素{}!".format(img_doc, loc)) start_time = time.time() try: eles = self.driver.find_elements(*loc) except: # 异常截图 - 通过截图名称,知道是哪个页面或者哪个模块出错了 # 异常日志捕获 do_log.error("查找多个元素{}失败!!!".format(loc)) self.save_screenshot(img_doc) raise else: end_time = time.time() do_log.info('查找多个元素时长为:{:.5f}'.format(end_time - start_time)) return eles
def wait_page_contains_element(self, loc, img_doc, timeout=10, poll_frequency=0.5): do_log.info("在{}等待元素{}存在!".format(img_doc, loc)) start_time = time.time() try: WebDriverWait(self.driver, timeout, poll_frequency).until( EC.presence_of_element_located(loc)) except: # 异常截图 - 通过截图名称,知道是哪个页面或者哪个模块出错了 # 异常日志捕获 do_log.error("等待元素{}存在失败!!!".format(loc)) self.save_screenshot(img_doc) raise else: end_time = time.time() do_log.info('等待元素存在时长为:{:.5f}'.format(end_time - start_time))
def test_02_fail_join_classroom(self, init_driver, data): do_log.info("-------------异常场景:加入课程用例开始执行----------------") # 加入课程 classroom_page.ClassroomPage(init_driver).join_classroom( data["join_class_code"]) # 获取提示信息 error_tip_text = classroom_page.ClassroomPage( init_driver).get_error_tip_text() time.sleep(5) file_name = os.path.join( PAGESHOTS_DIR, f"加入课程_{datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')}.png") try: assert error_tip_text == data["check_msg"] except: init_driver.save_screenshot(file_name) do_log.error(f"加入课程用例执行失败,截图:{file_name}") else: do_log.info("-------------异常场景:加入课程用例执行完毕----------------") classroom_page.ClassroomPage(init_driver).click_quxiao_button()
def get_element_attr(self, loc, name, img_doc, timeout=10, poll_frequency=0.5): self.wait_page_contains_element(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) ele = self.get_element(loc, img_doc) do_log.info("在{}中获取元素{}的{}属性".format(img_doc, loc, name)) try: attr = ele.get_attribute(name) except: do_log.error("在{}中获取元素{}的属性{}失败!!!".format(img_doc, loc, name)) self.save_screenshot(img_doc) raise else: do_log.info("在{}中获取元素{}的{}属性的值为:{}".format(img_doc, loc, name, attr)) return attr
def wait_ele_visiball(self, loc, img_doc, timeout=20, poll_frequency=0.5): """ 等待元素封装 :param loc: :param img_doc: :param timeout: :param poll_frequency: :return: """ do_log.info("等待{}可见".format(img_doc)) star_time = datetime.now() try: WebDriverWait(self.driver, timeout, poll_frequency).until( EC.visibility_of_element_located(loc)) except: self.save_page_shot(img_doc) do_log.error("等待{}失败,保存截图".format(img_doc)) raise else: end_time = datetime.now() do_log.info("等待{}可见成功,共等待{}".format(img_doc, (end_time - star_time)))
def get_elements_text(self, loc, img_doc, timeout=10, poll_frequency=0.5): # 等待元素存在 self.wait_page_contains_element(loc, img_doc, timeout=timeout, poll_frequency=poll_frequency) # 查找多个元素,返回元素为WebElement的列表 eles = self.get_elements(loc, img_doc) do_log.info("在{}中获取多个元素{}的文本内容".format(img_doc, loc)) try: # 创建空列表存储元素的文本值 ele_text = [] # 利用for循环将元素的文本值存入列表 for ele in eles: text = ele.text ele_text.append(text) except: do_log.error("在{}中获取多个元素{}的文本内容失败!!!".format(img_doc, loc)) self.save_screenshot(img_doc) raise else: do_log.info("在{}中获取多个元素{}的文本内容列表为:{}".format( img_doc, loc, ele_text)) return ele_text