def input_element(self, loc, text, img_doc, timeout=20, poll_frequency=0.5): """ 输入框输入内容 :param loc: :param text: :param img_doc: :param timeout: :param poll_frequency: :return: """ self.wait_ele_visiball(loc, img_doc, timeout, poll_frequency) ele = self.get_element(loc, img_doc) try: ele.send_keys(text) except: self.save_page_shot(img_doc) do_log.info("{}输入失败,保存截图".format(img_doc)) raise else: do_log.info("{}输入内容成功".format(img_doc))
def test_04_pwd_error(self, login_setUp): login_setUp[1].login(error_phone_data_01["phone"], error_phone_data_01["pwd"]) login_setUp[1].clear_input_phone() login_setUp[1].clear_input_pwd() login_setUp[1].login(error_pwd_data["phone"], error_pwd_data["pwd"]) assert error_pwd_data["excepted"] == login_setUp[1].get_error_phone_text() do_log.info("{}案例通过".format(error_pwd_data["title"]))
def visit_url(self, url, img_doc): do_log.info("访问{}".format(url)) try: self.driver.get(url) except: do_log.info("访问{}失败,请检查url".format(url)) self.save_screenshot(img_doc) raise
def test_success_login(self): do_log.info("登录功能-正常场景用例-输入正确的用户名和密码登录") self.lp.login(CD.username,CD.password) # 登录后页面发生跳转建议这里等待一下 time.sleep(1) # url发生改变 self.assertEqual("http://8.129.91.152:8765/Index/index",self.driver.current_url) # 我的用户是否存在 self.assertTrue(HomePage(self.driver).user_is_exited())
def sava_page_screenshot(self, img_doc): now = time.strftime("%Y%m%d%H%M%S") screenshot_path = screenshot_dir + "{}_{}.png".format(img_doc, now) try: self.driver.save_screenshot(screenshot_path) except: do_log.exception("当前页面截图失败") else: do_log.info("页面截图成功并保存在{}".format(screenshot_path))
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 clear_input(self, loc, img_loc): ele = self.get_element(loc, img_loc) try: ele.clear() except: do_log.info("清空失败") self.save_page_shot(img_loc) raise else: do_log.info("清空成功")
def _save_page_shot(self, img_doc): # 截图存放的路径 file_name = os.path.join(PAGESHOTS_DIR, f"{img_doc}_{datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')}.png") do_log.info(f"截图保存在:{file_name}") try: self.driver.save_screenshot(file_name) except: do_log.exception("保存截图失败。") else: do_log.info("保存截图成功。")
def switch_to_new_window(self): time.sleep(2) # 记录日志 wins = self.get_window_handles() do_log.info(f"切换到最新的窗口:{wins[-1]}") try: self.driver.switch_to.window(wins[-1]) # 失败了记录日志 except: pass
def get_element(self, img_doc, locator): do_log.info("{},查找元素{}".format(img_doc, locator)) try: ele = self.driver.find_element(*locator) except: do_log.exception("查找元素失败!!!") # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.sava_page_screenshot(img_doc) raise else: return ele
def get_current_url(self): # 记录日志 do_log.info("获取当前页面的url。") try: value = self.driver.current_url # 失败了记录日志 except: value = do_log.exception(f"获取当前页面url失败。") raise else: do_log.info(f"当前页面的url为:{value}") return value
def get_window_handles(self): # 记录日志 do_log.info("获取当前打开的所有的窗口。") try: wins = self.driver.window_handles # 失败了记录日志 except: do_log.exception("获取打开的窗口列表失败。") raise else: do_log.info(f"窗口列表为:{wins}") return wins
def input_text(self, locator, value, img_doc, timeout=30, poll_fre=0.5): #等待元素可见 self.wait_ele_visiable(locator, img_doc, timeout, poll_fre) # 查找元素 ele = self.get_element(img_doc, locator) do_log.info("{},在{}中输入信息{}".format(img_doc, locator, value)) try: ele.send_keys(value) except: do_log.exception("文本信息输入失败") # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.sava_page_screenshot(img_doc) raise
def click_element(self, locator, img_doc, timeout=30, poll_fre=0.5): #等待元素可见 self.wait_ele_visiable(locator, img_doc, timeout, poll_fre) #查找元素 ele = self.get_element(img_doc, locator) do_log.info("{},点击元素{}".format(img_doc, locator)) try: ele.click() except: do_log.exception("元素点击失败") # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.sava_page_screenshot(img_doc) raise
def test_success_upload_homework(self, setup_enter_classroom): do_log.info("----------上传作业用例开始执行----------") WebClassPage(setup_enter_classroom).upload_homework_ready() # time.sleep(1) # ele = setup_enter_classroom.find_element(*WebClassPageLoc.add_button) # setup_enter_classroom.execute_script("arguments[0].click();", ele) time.sleep(3) # do_log.info("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") WebClassPage(setup_enter_classroom).upload_homework( r'D:\"bbb.txt" "aaa.txt"') msg = WebClassPage(setup_enter_classroom).get_msg() assert msg == "作业提交成功" do_log.info("----------上传作业用例执行完成----------")
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 switch_to_windows(self, img_doc): """ 切换窗口 :param img_doc: :return: """ wins = self.driver.window_handles try: self.driver.switch_to.window(wins[-1]) except: do_log.info("切换{}窗口失败".format(img_doc)) self.save_page_shot(img_doc) raise else: do_log.info("切换{}窗口成功".format(img_doc))
def wait_page_contains_element(self, loc, img_doc, timeout=20, poll_frequency=0.5): do_log.info(f"{img_doc}等待{loc}元素可见。") try: start_time = datetime.now() WebDriverWait(self.driver, timeout, poll_frequency).until(EC.presence_of_element_located(loc)) except: # 输出异常信息 do_log.exception("等待元素存在失败") # 截图,截图名称要见名知意 self._save_page_shot(img_doc) raise else: end_time = datetime.now() do_log.info(f"起始时间:{start_time},结束时间:{end_time},等待时长:{(end_time - start_time).total_seconds()}")
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 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 input_text(self, loc, text, img_doc, timeout=20, poll_frequency=0.5): # 等待元素可见 self.wait_ele_visible(loc, img_doc, timeout, poll_frequency) # 查找元素 ele = self.get_element(loc, img_doc) # 记录日志 do_log.info(f"{img_doc}在{loc}输入文本值:{text}。") # 输入文本内容 try: ele.send_keys(text) # 失败了记录日志 except: do_log.exception(f"{img_doc}在{loc}输入文本值:{text}失败。") # 失败了截图 self._save_page_shot(img_doc) raise
def check_element_visible(self,locator,img_doc,timeout=10,poll_fre=0.5): """ # 检测元素是否在页面存在且可见。 如果退出元素存在,则返回True。否则返回False :return: 布尔值 """ do_log.info("{}: 检测元素 {} 存在且可见于页面。".format(img_doc,locator)) try: WebDriverWait(self.driver,timeout,poll_fre).until(EC.visibility_of_element_located(locator)) except: do_log.exception(" {}秒内元素在当前页面不可见。".format(timeout)) self._save_page_shot(img_doc) return False else: do_log.info(" {}秒内元素可见。".format(timeout)) return True
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 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 wait_ele_visiable(self, locator, img_doc, timeout=30, poll_fre=0.5): do_log.info("{},等待{}元素可见".format(img_doc, locator)) try: start_time = datetime.datetime.now() WebDriverWait(self.driver, timeout, poll_fre).until( EC.visibility_of_element_located(locator)) except: # 异常信息写入日志 do_log.exception("元素可见失败") # exception就是error级别,只不过输出的异常信息更为详细 # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.sava_page_screenshot(img_doc) raise else: end_time = datetime.datetime.now() do_log.info("元素等待结束,开始时间为:{},结束时间为:{},等待时长为:{}".format( start_time, end_time, (start_time - end_time)))
def get_element_text(self, locator, img_doc, timeout=30, poll_fre=0.5): # 等待元素存在; self.wait_page_contains_element(locator, img_doc, timeout, poll_fre) # 查找元素 ele = self.get_element(img_doc, locator) do_log.info("{},获取{}元素的文本内容.".format(img_doc, locator)) try: text = ele.text except: do_log.exception("获取元素文本内容失败") # 截图 - 命名。 页面名称_行为名称_当前的时间.png self.sava_page_screenshot(img_doc) raise else: do_log.info("获取的文本值为:{}".format(text)) return text
def clear_text(self, loc, img_doc, timeout=20, poll_frequency=0.5): # 等待元素可见 self.wait_ele_visible(loc, img_doc, timeout, poll_frequency) # 查找元素 ele = self.get_element(loc, img_doc) # 记录日志 do_log.info(f"{img_doc}在{loc}清空文本值。") # 输入文本内容 try: ele.clear() # 失败了记录日志 except: do_log.exception(f"{img_doc}在{loc}清空文本值失败。") # 失败了截图 self._save_page_shot(img_doc) raise