def get_element(self, locator, page_action, timeout=20, poll_frequency=0.5, wait=None): # 先等待元素可见或者存在 if wait: self.wait_page_contains_element(locator, page_action, timeout, poll_frequency) else: self.wait_ele_visible(locator, page_action, timeout, poll_frequency) logger.info("在 {} 行为,查找元素:{}".format(page_action, locator)) try: ele = self.driver.find_element(*locator) except: # 输出到日志 logger.exception("查找元素失败!") # 失败截取当前页面 self.get_page_img(page_action) raise else: return ele
def get_text(self, locator, page_action, timeout=20, poll_frequency=0.5, wait_exist=False): """ :param locator: :param page_action: :param timeout: :param poll_frequency: :return: """ # 等待元素存在 - 查找 ele = self.get_element(locator, page_action, timeout, poll_frequency, wait_exist=wait_exist) logger.info("在 {} 行为,获取元素 {} 的文本值。".format(page_action, locator)) try: txt = ele.text except: logger.exception("获取元素文本失败!") self.get_page_img(page_action) raise else: logger.info("文本值为:{}".format(txt)) return txt
def wait_page_contains_element(self, locator, page_action, timeout=20, poll_frequency=0.5): """ :param locator: :param page_action: :param timeout: :param poll_frequency: :return: """ logger.info("在 {} 行为,等待元素:{} 存在。".format(page_action, locator)) try: start = time.time() WebDriverWait(self.driver, timeout, poll_frequency).until( EC.presence_of_element_located(locator)) except: # 输出到日志 logger.exception("等待元素存在失败!") # 失败截取当前页面 self.get_page_img(page_action) raise else: end = time.time() logger.info("等待耗时为:{}".format(end - start))
def test_register_ok(self, case): # print("本条测试数据:",case) logger.info("********* 执行用例{}:{} *********".format( case["id"], case["title"])) # 替换 - 动态 - # 请求数据 #phone# 替换 new_phone # check_sql里的 #phone# 替换 new_phone if case["request_data"].find("#phone#") != -1: new_phone = get_new_phone() case = replace_mark_with_data(case, "#phone#", new_phone) # 步骤 测试数据 - 发起请求 response = send_requests(case["method"], case["url"], case["request_data"]) # 期望结果,从字符串转换成字典对象。 expected = eval(case["expected"]) # 断言 - code == 0 msg == ok logger.info("用例的期望结果为:{}".format(case["expected"])) try: self.assertEqual(response.json()["code"], expected["code"]) self.assertEqual(response.json()["msg"], expected["msg"]) # 如果check_sql有值,说明要做数据库校验。 if case["check_sql"]: # logger.info() result = db.select_one_data(case["check_sql"]) self.assertIsNotNone(result) except AssertionError: logger.exception("断言失败!") raise
def test_register_ok(self, case): logger.info("********* 执行用例{}:{} *********".format( case["id"], case["title"])) expected = eval(case["expected"]) # 步骤 测试数据 - 发起请求 response = send_requests(case["method"], case["url"], case["request_data"]) # 断言 - code == 0 msg == ok logger.info("用例的期望结果为:{}".format(case["expected"])) try: self.assertEqual(response.json()["code"], expected["code"]) self.assertEqual(response.json()["msg"], expected["msg"]) except AssertionError: logger.exception("断言失败!")
def click_element(self, locator, page_action, timeout=20, poll_frequency=0.5): # 等待 - 查找 ele = self.get_element(locator, page_action, timeout, poll_frequency) # 点击 logger.info("在 {} 行为,点击元素:{}".format(page_action, locator)) try: ele.click() except: logger.exception("点击元素失败!") self.get_page_img(page_action) raise
def input_text(self, locator, page_action, value, timeout=20, poll_frequency=0.5): # 等待 - 查找 ele = self.get_element(locator, page_action, timeout, poll_frequency) logger.info("在 {} 行为,给元素:{} 输入文本值:{}".format(page_action, locator, value)) try: ele.clear() ele.send_keys(value) except: logger.exception("元素输入文本失败!") self.get_page_img(page_action) raise
class TestRecharge(unittest.TestCase): @classmethod def setUpClass(cls) -> None: # 得到登陆的用户名和密码 clear_EnvData_attrs() user, passwd = get_old_phone() # 登陆接口调用。 resp = send_requests("POST", "member/login", {"mobile_phone": user, "pwd": passwd}) # cls.member_id = jsonpath(resp.json(),"$..id")[0] # cls.token = jsonpath(resp.json(),"$..token")[0] # setattr(EnvData, "member_id", jsonpath(resp.json(), "$..id")[0]) setattr(EnvData, "member_id", str(jsonpath(resp.json(), "$..id")[0])) setattr(EnvData, "token", jsonpath(resp.json(), "$..token")[0]) def tearDown(self) -> None: if hasattr(EnvData,"money"): delattr(EnvData,"money") @data(*cases) def test_recharge(self, case): # 替换的数据 if case["request_data"].find("#member_id#") != -1: case = replace_case_by_regular(case) # 数据库 - 查询当前用户的余额 - 在提现之前 if case["check_sql"]: user_money_before_recharge = db.select_one_data(case["check_sql"])["leave_amount"] logger.info("提现前的用户余额:{}".format(user_money_before_recharge)) # 期望的用户余额。 提现之前的余额 - 提现的钱 recharge_money = json.loads(case["request_data"])["amount"] logger.info("提现的金额为:{}".format(recharge_money)) expected_user_leave_amount = round(float(user_money_before_recharge) - recharge_money, 2) logger.info("提现后的金额为:{}".format(expected_user_leave_amount)) # 更新期望的结果 - 将期望的用户余额更新到期望结果当中。 # case = replace_mark_with_data(case, "#money#", str(expected_user_leave_amount)) setattr(EnvData,"money",str(expected_user_leave_amount)) case =replace_case_by_regular(case) # 发起请求 - 给用户提现 response = send_requests(case["method"], case["url"], case["request_data"], token=EnvData.token) # 将期望的结果转成字典对象,再去比对 expected = json.loads(case["expected"]) # 断言 try: self.assertEqual(response.json()["code"], expected["code"]) self.assertEqual(response.json()["msg"], expected["msg"]) if case["check_sql"]: self.assertEqual(response.json()["data"]["id"], expected["data"]["id"]) self.assertEqual(response.json()["data"]["leave_amount"], expected["data"]["leave_amount"]) # 数据库 - 查询当前用户的余额 user_money_after_recharge = db.select_one_data(case["check_sql"])["leave_amount"] logger.info("提现之后的用户余额:{}".format(expected_user_leave_amount)) self.assertEqual("{:.2f}".format(expected["data"]["leave_amount"]), "{:.2f}".format(float(user_money_after_recharge))) except: logger.exception("断言失败!") raise
def test_register_ok(self, case): # print("本条测试数据:",case) logger.info("********* 执行用例{}:{} *********".format( case["id"], case["title"])) expected = eval(case["expected"]) # 步骤 测试数据 - 发起请求 response = send_requests(case["method"], case["url"], case["request_data"]) # 断言 - code == 0 msg == ok logger.info("用例的期望结果为:{}".format(case["expected"])) try: # self.assertEqual(response.json()["code"],expected["code"]) # self.assertEqual(response.json()["msg"], expected["msg"]) # 如果check_sql有值,说明要做数据库校验。 if case["check_sql"]: # logger.info() result = db.select_one_data(case["check_sql"]) self.assertIsNotNone(result) except AssertionError: logger.exception("断言失败!") raise
def get_attribute(self, locator, page_action, attr, timeout=20, poll_frequency=0.5, wait_exist=False): # 等待元素存在 - 查找 ele = self.get_element(locator, page_action, timeout, poll_frequency, wait_exist=wait_exist) logger.info("在 {} 行为,获取元素 {} 的 {} 属性值。".format(page_action, locator, attr)) try: value = ele.get_attribute(attr) except: logger.exception("获取元素文本失败!") self.get_page_img(page_action) raise else: logger.info("属性值为:{}".format(value)) return value