예제 #1
0
 def get_ele_attr(self,
                  loc,
                  Attribute_name,
                  page_name,
                  timeout=20,
                  poll_time=0.5):
     """
     description : 获取元素的属性值
     loc: 元素定位表达式
     Attribute_name:属性名
     page_name : 页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     self.wait_ele_visible(loc, page_name, timeout=20, poll_time=0.5)
     logger.info("在{} 获取{}元素的属性".format(page_name, loc))
     try:
         value = self.driver.find_element(
             *loc).get_attribute(Attribute_name)
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("获取{}元素的属性失败".format(loc))
         raise e
     else:
         logger.info("该元素的属性值为:{}".format(value))
         return value
예제 #2
0
 def get_ele_texts(self, loc, page_name, timeout=20, poll_time=0.5):
     """
     description : 获取多个元素的文本值,为列表
     loc:元素定位表达式
     page_name : 页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     # 设置等待时间
     self.wait_ele_visible(loc, page_name, timeout=20, poll_time=0.5)
     logger.info("在{} 获取{}元素们的文本".format(page_name, loc))
     try:
         eles_list = self.driver.find_elements(*loc)
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("获取多个元素{}失败".format(loc))
         raise e
     else:
         texts_list = []
         if len(eles_list) == 1:
             logger.info("获取的文本为:{}".format(eles_list[0].text))
             return eles_list[0].text
         else:
             for ele in eles_list:
                 texts_list.append(ele.text)
             logger.info("获取的文本为:{}".format(texts_list))
             return texts_list
예제 #3
0
 def switch_to_alert(self, page_name, dismiss=False, keys=None):
     """
     description :切换到警告框并进行操作
     dismiss : 取消按钮,默认为False,
     keys : 输入的文本值
     """
     logger.info("在{} 切换到alert框".format(page_name))
     try:
         alert = self.driver.switch_to.alert()
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("切换到alert框失败")
         raise e
     else:
         if keys:
             alert.send_keys(keys)
             if dismiss:
                 alert.dismiss()
             else:
                 alert.accept()
         else:
             if dismiss:
                 alert.dismiss()
             else:
                 alert.accept()
예제 #4
0
    def test_join_bee(self, init_login):
        # 1.前程贷首页——点击 第一个标的,进入项目详情页面(投资页面)
        HomePage(init_login).click_first_mark_ele()
        # 发红包前在投资页面获取用户可用余额
        investpage = InvestPage(init_login)
        before_user_amount = investpage.get_user_amount_from_InvestPage()
        # 2.投标页面——点击 蜂群/公社,进入蜂群页面
        investpage.click_bee()
        # 3.蜂群页面——鼠标移动到第一个蜂群点击【查看蜂群】
        bp = BeePage(init_login)
        bp.move_to_first_bee()
        bp.view_bee()
        # 4.蜂群详情页(为新窗口)
        bp.switch_new_win()
        bh = BeehomePage(init_login)
        # 发红包后在投资页面获取蜂群的公产规模
        before_pub_amount = bh.get_public_money()
        # 点击敲门红包,并选中“5元”,进行点击
        bh.click_red_envelope()
        bh.click_five_dollor()
        bh.click_determine()
        time.sleep(0.5)
        # 获取发送红包后的提示
        reward_success_msg = bh.get_reward_success_msg()
        # 5.蜂群详情页——进行刷新
        bh.refresh_page()
        # 发红包后在投资页面获取蜂群的公产规模
        after_pub_amount = bh.get_public_money()
        # 6.蜂群详情页——点击【申请加入】按钮
        bh.click_join_button()
        # 点击确定按钮
        bh.click_join_determine()
        time.sleep(0.5)
        # 获取加入蜂群的提示'
        join_msg = bh.get_join_msg()
        # 7.蜂群详情页——点击首页中的第一个标的,进入投资页面
        bh.click_home()
        HomePage(init_login).click_first_mark_ele()
        # 发红包后在投资页面获取用户可用余额
        after_user_amount = investpage.get_user_amount_from_InvestPage()

        # 断言
        try:
            # 1.申请的蜂群提示
            assert join_msg == bee_data.expected_join_msg
            # 2.发红包后提示
            assert reward_success_msg == bee_data.expected_reward_success_msg
            # 3.蜂群的公产规模+5
            expected_pub_amount = Decimal(after_pub_amount) - Decimal(
                before_pub_amount)
            assert int(expected_pub_amount) == bee_data.amount
            # 用户可用金额减少5元
            expected_user_amount = Decimal(before_user_amount) - Decimal(
                after_user_amount)
            assert int(expected_user_amount) == bee_data.amount
        except Exception as e:
            logger.exception("执行测试用例失败,msg:{}".format(e))
            raise e
        else:
            logger.info("执行测试用例成功")
예제 #5
0
 def test_login_success(self):
     logger.info("************登录成功用例****************")
     lp = LoginPage(self.driver)
     lp.login(*LoginData.success_data)
     # 进行断言
     try:
         self.assertTrue(HomePage(self.driver).get_quit_ele_exists())
         logger.info("断言成功")
     except AssertionError as e:
         logger.exception("断言失败")
         raise e
예제 #6
0
 def test_login_failed_layui(self, data_info):
     logger.info("*************登录失败场景2用例***************")
     lp = LoginPage(self.driver)
     lp.login(data_info["phone"], data_info["pwd"])
     msg_text = lp.get_msg_from_login_layui()
     # 进行断言
     try:
         self.assertEquals(msg_text, data_info["check"])
         logger.info("断言成功")
     except AssertionError as e:
         logger.exception("断言失败")
         raise e
예제 #7
0
 def test_login_failed_form(self, data_info):
     logger.info("*************登录失败场景1用例*************")
     # 进行登录操作
     lp = LoginPage(self.driver)
     # 输入空的账号/密码/错误的手机号
     lp.login(data_info["phone"], data_info["pwd"])
     # 进行断言
     try:
         self.assertEqual(lp.get_msg_from_login_form(), data_info["check"])
         logger.info("断言成功")
     except AssertionError as e:
         logger.exception("断言失败")
         raise e
예제 #8
0
 def switch_to_window(self, subscript, page_name):
     """
     description : 切换到新的窗口
     Subscript : 窗口下标
     page_name : 页面名称
     """
     wins = self.driver.window_handles
     logger.info("在{} 进行切换窗口".format(page_name))
     try:
         self.driver.switch_to.window(wins[subscript])
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("切换窗口失败")
         raise e
     else:
         logger.info("切换窗口成功")
예제 #9
0
 def get_element(self, loc, page_name):
     """
     description : 查找元素,不需要设置等待
     loc: 元素定位表达式
     page_name : 页面名称
     """
     logger.info("在{} 查找{}元素".format(page_name, loc))
     try:
         ele = self.driver.find_element(*loc)
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("查找{}元素失败".format(loc))
         raise e
     else:
         logger.info("{}元素找到,返回值为:{}".format(loc, ele))
         return ele
예제 #10
0
 def get_elements(self, loc, page_name):
     """
     description : 根据一个定位表达式查找多个元素,返回值为列表,不设置显性等待
     loc:元素定位表达式
     page_name:页面名称
     """
     logger.info("在{} 获取{}的多个元素")
     try:
         eles = self.driver.find_elements(*loc)
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("查找{}元素们失败".format(loc))
         raise e
     else:
         logger.info("{}元素们找到,返回值为:{}".format(loc, eles))
         return eles
예제 #11
0
    def test_invest_success(self):
        # 1.前程贷首页 --
        home = HomePage(self.driver)
        # 投资前,在个人页面/投资页面,获取用户投资前的金额
        # 进入个人页面
        home.click_personal_center()
        # 获取投资前的用户金额
        Pc = PersonalcenterPage(self.driver)
        before_user_amount = Pc.get_user_amount_from_PersonalCenter()
        # 回到上一次浏览的页面
        Pc.back_to_previous_page()
        # 点击首页的第一个标的,进入投资页面
        home.click_first_mark_ele()
        # 初始化投资页面操作
        investpage = InvestPage(self.driver)
        # 在投资页面获取用户余额
        # before_user_amount = investpage.get_user_amount_from_InvestPage()
        # 投资前,在投资页面获取标的投资前的剩余投资金额
        before_subject_amount = investpage.get_subject_amount_from_InvestPage()
        # 2.投资界面 --- 输入2000元金额,进行投标处理
        investpage.Input_amount(amount)
        # 点击投资按钮
        investpage.click_tender_button()
        # 3.投资页面 -- 点击弹框中的“查看并激活按钮”进入个人中心页面
        investpage.click_view_and_activate()
        # 投资完成后,在个人页面获取用户投资后的金额
        after_user_amount = Pc.get_user_amount_from_PersonalCenter()
        # 用户投资后,从个人中心返回到投资页面,刷新,
        Pc.back_to_previous_page()
        # 获取标的投资后剩余投资金额
        after_subject_amount = investpage.get_subject_amount_from_InvestPage()

        # 断言
        try:
            # 1.用户投资前的金额 - 投资后的金额=2000
            user_expect = Decimal(before_user_amount) - Decimal(
                after_user_amount)
            self.assertEqual(int(user_expect), 2000)
            # 2.(标的投资前的金额 - 投资后的金额)*10000 = 2000
            subject_expect = (Decimal(before_subject_amount) -
                              Decimal(after_subject_amount)) * 10000
            self.assertEqual(int(subject_expect), 2000)
            logger.info("pass")
        except AssertionError as e:
            logger.exception("断言失败")
            raise e
예제 #12
0
 def wait_ele_visible(self, loc, page_name, timeout=20, poll_time=0.5):
     """
     description : 等待元素可见
     loc: 元素定位表达式
     page_name : 页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     logger.info("在{} 等待元素{}可见".format(page_name, loc))
     try:
         WebDriverWait(self.driver, timeout, poll_time).until(
             EC.visibility_of_element_located(loc))
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("等待{}元素可见失败".format(loc))
         raise e
     else:
         logger.info("{}元素可见".format(loc))
예제 #13
0
 def switch_to_iframe(self, loc, page_name, time_out=20, poll_time=0.5):
     """
     description : 切换到内联框架iframe中
     loc:元素定位表达式,也可以是下标,name,ele对象
     page_name:页面名称
     time_out: 超时时间
     polling_time:轮询时间
     """
     logger.info("在{} 切换到{}iframe框架中".format(page_name, loc))
     try:
         WebDriverWait(self.driver, time_out, poll_time).until(
             EC.frame_to_be_available_and_switch_to_it(loc))
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("切换到{}iframe框架失败".format(loc))
         raise e
     else:
         logger.info("切换到{}iframe框架成功".format(loc))
예제 #14
0
 def get_ele_text(self, loc, page_name, timeout=20, poll_time=0.5):
     """
     description : 获取元素的文本值
     loc:元素定位表达式
     page_name : 页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     self.wait_ele_visible(loc, page_name, timeout, poll_time)
     logger.info("在{} 获取{}元素的文本值".format(page_name, loc))
     try:
         text = self.driver.find_element(*loc).text
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("获取元素{}的文本失败".format(loc))
         raise e
     else:
         logger.info("该元素的文本值为:{}".format(text))
         return text
예제 #15
0
 def wait_ele_clickale(self, loc, page_name, timeout=20, poll_time=0.5):
     """
     description : 等待元素可见并且可以被点击,然后进行点击
     loc:元素定位表达式
     page_name:页面名称
     time_out: 超时时间
     polling_time:轮询时间
     """
     logger.info("在{} 等待{}元素可见并且可以被点击".format(page_name, loc))
     try:
         WebDriverWait(self.driver, timeout,
                       poll_time).until(EC.element_to_be_clickable(loc))
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("等待元素{}可见可点击失败".format(loc))
     else:
         logger.info("对{}进行点击".format(loc))
         self.driver.find_element(*loc).click()
         logger.info("点击操作成功")
예제 #16
0
 def input_keys(self, loc, keys, page_name, timeout=20, poll_time=0.5):
     """
     description : 输入框中输入文本
     loc: 元素定位表达式
     keys: 文本值
     page_name : 页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     self.wait_ele_visible(loc, page_name, timeout=20, poll_time=0.5)
     logger.info("在{} 的文本框{}进行输入".format(page_name, loc))
     try:
         self.driver.find_element(*loc).send_keys(keys)
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("在输入框{}输入文本失败".format(e))
         raise e
     else:
         logger.info("输入的内容为:{}".format(keys))
예제 #17
0
 def click_ele(self, loc, page_name, timeout=20, poll_time=0.5):
     """
     description : 对元素进行点击操作
     loc : 元素定位表达式
     page_name:页面名称
     timeout:超时时间
     poll_time:轮询时间
     """
     # 等待该元素可见
     self.wait_ele_visible(loc, page_name, timeout, poll_time)
     logger.info("在{} 点击{}元素".format(page_name, loc))
     try:
         self.driver.find_element(*loc).click()
     except Exception as e:
         self.save_page_Screenshot(page_name)
         logger.exception("点击元素{}失败".format(loc))
         raise e
     else:
         logger.info("点击{}元素成功".format(loc))
예제 #18
0
import os
from middleware.logger_handler import logger
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
from config.config_path import Configuration

testloader = unittest.TestLoader()
suite = testloader.discover(Configuration.testcase_path)

if not os.path.exists(Configuration.report_folder_path):
    os.mkdir(Configuration.report_folder_path)

now = time.strftime("%y-%m-%d %H_%M_%S")
report_name = r"\testreport {}.html".format(now)
report_path = Configuration.report_folder_path + report_name
print(report_path)

with open(report_path, "wb") as f:
    runner = HTMLTestRunner(stream=f,
                            verbosity=2,
                            title="自动化测试报告",
                            description="前程贷项目",
                            tester="byh")
    try:
        runner.run(suite)
    except Exception as e:

        logger.exception("生成测试报告失败:{}".format(e))
        raise e