예제 #1
0
    def releaseSuccess(self):
        # 进入相应的页面
        self.click_release()

        # 1.读取参数
        ov_parameter = self.overall[self.bi.whole_parameter()]
        # 2.将str数据转成dict
        ov_parameter = self.astTodict(ov_parameter)
        # 3.根据相应的key值对数据进行操作
        para_key = ov_parameter.keys()
        for ov in para_key:
            # 4.根据key值旗下的value值
            ov_pa = ov_parameter[ov]
            # 5.根据key找到ini中存储的数据信息
            ov_key = self.financial[ov]
            # 6.将value中的数据信息进行分离
            ov_value = ov_pa['parameter']

            # 7.根据动作类型来判断动作方向
            ov_ty = ov_pa['type'].lower()
            if ov_ty == 'click':
                # 根据元素进行点击
                self.vac.css_click(self.driver, ov_key)

            elif ov_ty == 'input':
                self.vac.sleep_Rest(0.5)
                # 根据元素进行输出操作
                self.vai.css_input(self.driver, ov_key, ov_value)

            elif ov_ty == 'select':
                # 根据元素来设置相应的options值
                op_se = ScreeningDrop(self.driver, ov_key, ov_pa['ele'])
                prompt_value = op_se.setSelectorText(ov_value)
                self.log.info("What needs to be set in the popover : %s" %
                              prompt_value)
                pass

            elif ov_ty == 'checkbox':
                # 根据元素来选择相应的单选框
                checkbox = self.vac.is_visibles_css_selectop(
                    self.driver, ov_key)
                ov_value = self.financial[ov_value] - 1
                self.visibleRadioSelected(checkbox[ov_value], ov_pa['bool'])

            else:
                print('What do you type in? %s' % ov_pa['type'])
            # # 输入数据之后点击标题
            # self.vac.css_click(self.driver, self.financial[self.bi.yaml_title()])
            # # 延迟一下,不加容易出现问题
            self.vac.sleep_Rest(1)
        # 8.点击弹窗中的确认按钮 或者 取消按钮
        self.vac.css_click(self.driver,
                           self.financial[self.overall[self.bi.whole_keys()]])

        # 9.判断提交之后接口返回的弹窗标题
        self.operator_titleAlert()

        # # 10.点击提交之后接口返回弹窗中的确定按钮
        self.vac.css_click(self.driver, self.financial[self.bi.yaml_confirm()])
        pass
예제 #2
0
    def __init__(self, basename, yaml_path):
        """
        实例化对象
        :param basename: 运行文件名
        :param yaml_path: 元素配置路径关键字所在的文件
        """
        self.basename = basename
        self.log = Log(self.basename)

        self.financial = readYaml.read_expression(yaml_path)

        self.a_click = action_click()
        self.a_input = action_input()
        # 因为浏览器对象还没有创建所有先丢入一个false
        self.drop = ScreeningDrop(False)
        pass
예제 #3
0
 def create_select(self, direction: str) -> ScreeningDrop:
     '''
     创建操作select的对象
     :param direction:
     :return:
     '''
     op_se = ScreeningDrop(self.driver, direction, attr=self.attrEle)
     return op_se
예제 #4
0
 def create_select(self, direction: str) -> ScreeningDrop:
     '''
     创建操作select的对象,如果出现找达到select对象
     可能系统认为传入值为id类型,需要修改成css类型
     :param direction: 元素的路径值
     :return:
     '''
     op_se = ScreeningDrop(self.driver, direction, attr='css')
     return op_se
예제 #5
0
 def time_day_select(self, hour, value, part):
     """
     傻子操作方式:对时间下拉框进行操作
     :param hour:
     :param part:
     :return:
     """
     # 找到元素
     hourselect = self.vac.is_visibles_css_selectop(self.driver, hour)
     # 点击元素
     self.vac.element_click(hourselect[value])
     # 页面刷新之后需要重新找元素
     hourselect = self.vac.is_visibles_css_selectop(self.driver, hour)
     # 下拉对象并设置内容
     ScreeningDrop(self.driver).ele_select(
         hourselect[value]).setSelectorText(part)
예제 #6
0
 def get_option_text(self, label_path):
     screen = ScreeningDrop(self.op_br.driver, label_path, attr='css')
     option_text = screen.getSelectedOptions()
     del screen
     return option_text
     pass
예제 #7
0
class HandleActionDdt(object):
    """
    打开浏览器
    定义日志信息
    配置元素路径对象
    """
    def __init__(self, basename, yaml_path):
        """
        实例化对象
        :param basename: 运行文件名
        :param yaml_path: 元素配置路径关键字所在的文件
        """
        self.basename = basename
        self.log = Log(self.basename)

        self.financial = readYaml.read_expression(yaml_path)

        self.a_click = action_click()
        self.a_input = action_input()
        # 因为浏览器对象还没有创建所有先丢入一个false
        self.drop = ScreeningDrop(False)
        pass

    def open_browser(self, option, liulanqi='chrome', options=None):
        # 打开浏览器
        bc = browser_confirm.__new__(browser_confirm)
        conf = readModel.establish_con(model="model")
        url = conf.get("wap", option)
        self.driver = bc.url_opens(url, liulanqi, options)
        self.drop.drivers = self.driver
        pass

    def sigin_user_login(self, account, password):
        # 找到账号密码
        conf = readModel.establish_con(model="model")
        account = conf.get("username", account)
        password = conf.get("username", password)
        # 输入账号密码点击登录
        self.a_input.name_input(self.driver, 'username', account)
        self.a_input.name_input(self.driver, 'password', password)
        self.a_click.id_confirm_prompt(self.driver, "loginBtn")
        pass

    # -------------------------定义主菜单的所在位置------------------------
    def set_sidebar_number(self, number: int) -> None:
        '''通过number定义主菜单的所在位置'''
        self.sidebar = ".sidebar-menu>li:nth-child(%s)>.dropdown-toggle" % number

    def sidebar_number_get(self) -> "获取子菜单的所在位置":
        return self.sidebar

    # -------------------------定义子菜单的所在位置------------------------
    def set_treeview_number(self, number: int) -> "通过number定义子菜单的所在位置":
        '''通过number定义子菜单的所在位置'''
        self.treew = ".treeview-menu.menu-open>li:nth-child(%s)" % number

    def treeview_number_get(self) -> "获取子菜单的所在位置":
        return self.treew

    # -------------------通过第三方参数来设置或者读取主菜单的位置-------------
    father_tags = property(sidebar_number_get,
                           set_sidebar_number,
                           doc="Setting an error or getting the main menu.")

    # -------------------通过第三方参数来设置或者读取子菜单的位置
    child_tags = property(treeview_number_get,
                          set_treeview_number,
                          doc="Error setting or getting subtags.")

    def _rou_background(self):
        """
        father_tags: 定义菜单的所在位置
        child_tags : 定义模块的所在位置
        :return:  暂时没有返回值
        """
        argument = GoodsManagement.get_argument_data()
        self.father_tags = argument['father']
        self.a_click.css_click(self.driver, self.father_tags)

        self.child_tags = argument[
            GoodsManagement.INVENTORY['module']]['child']
        self.a_click.css_click(self.driver, self.child_tags)

        pass

    def screen_set_up(self, url, account, password):
        """
        select用例中,需要执行的前置条件统一定义并进行调用
        :param basename: 文件名和类名的拼接对象
        :return:
        """
        # 获取运行文件的类名
        self.log.info("%s ---setup: 每个用例开始前后执行" % self.basename)
        # 打开浏览器,定义log日志。读取excle文档数据
        self.open_browser(url)
        self.sigin_user_login(account, password)
        self._rou_background()
        pass

    def screen_tear_down(self, perform_obj):
        """
        select用例中,需要执行的后置条件统一定义并进行调用
        :param perform_obj: 当前case运行的对象
        :return:
        """
        self.get_screenshot_image(method_obj=perform_obj)
        self.driver.quit()
        self.log.info("%s ---teardown: 每个用例结束后执行" % perform_obj.basename)
        pass

    def get_screenshot_image(self, method_obj):
        """
        执行保存截图功能
        :param method_obj: 当前运行文件主体
        :return:
        """
        try:
            raise Exception("我要跳转截图")
            # 判断执行是否出错
            bl_image_error = True
            for fun_name, error in method_obj._outcome.errors:
                if error:
                    method_status = 'error'
                    bl_image_error = False

            if bl_image_error:
                method_status = 'correct'

            method_obj.method_path = os.path.join(method_obj.method_path,
                                                  method_status)

            method_name = "%s-%s.png" % (method_obj.basename.split("-")[-1],
                                         method_obj._testMethodName)

            # 获取年月日
            current_time = time.strftime('%Y-%m-%d', time.localtime())

            # 路径这块先这样写
            report_path = os.path.join(
                os.path.join(os.getcwd(), 'screenshots/imgs'), current_time)
            report_path = os.path.join(report_path, method_obj.method_path)

            # 文件保存路径不存在就创建
            if not os.path.exists(report_path): os.makedirs(report_path)

            file_path = os.path.join(report_path, method_name)
            print("截图" + file_path)

            # 截图保存
            self.driver.save_screenshot(file_path)
        except Exception as ex:
            pass

    def element_click_jump(self, ele_path, is_fixed=False):
        # 点击一个元素
        self.a_click.css_click(self.driver, self.financial[ele_path])
        pass

    def element_input_data(self, ele_path, text):
        # 根据元素路径输入指定的数据信息
        self.a_input.css_input(self.driver, self.financial[ele_path], text)
        pass

    def element_option_select(self, ele_path, option):
        # 设置select下拉中的option
        self.drop.setSelectData(self.financial[ele_path], 'css')
        self.drop.setSelectorText(text=option)
        pass

    def element_get_text(self, ele_path, text):
        # 获取指定元素的text,判断与用例设置的预期结果是否相同
        ele_text = self.a_input.is_visible_css_selectop(
            self.driver, self.financial[ele_path])
        # 判断是否找到指定元素
        assert ele_text, "提示语判断时,提示语对象不存在"
        # 判断元素信息跟预定的是否一致
        assert ele_text.text == text, "弹窗提示语和用例设置的提示语不一致:(%s--%s)" % (
            text, ele_text.text)

    def source_entity(self, ele_path, place):
        """
        # 点击店铺/配送中心选择框,然后选择内容
        放弃的方式
        1. 判断空桶还是库存
        if 'repertory' == ele_path:
            2. 点击选择输入框
            self.a_click.css_click(self.driver, self.financial['repertory_strong'])
            3. 找到输入下拉框对象,并拼接需要获取的对象位置
            place = self.financial['repertory_shop'] % place
        elif 'empty' == ele_path:
            self.a_click.css_click(self.driver, self.financial['empty_strong'])
            place = self.financial['empty_shop'] % place
        else:
            place = False
            self.log.info("元素没有找到")
        self.a_click.css_click(self.driver, place)
        """
        # 根据传入的类型拼接名字,并点击选择输入框
        strong_path = '%s_strong' % ele_path
        self.a_click.css_click(self.driver, self.financial[strong_path])
        # 根据传的类型拼接下拉对象的名字,并获取对象位置
        shop_path = '%s_shop' % ele_path
        place = self.financial[shop_path] % place
        self.a_click.css_click(self.driver, place)

    def element_text(self, ele_path, text_title):
        ele_path = self.financial[ele_path]
        ele_text = self.a_input.is_visible_css_selectop(self.driver,
                                                        ele_path).text
        assert ele_text == text_title, '跳转之后标题不对'
        pass
예제 #8
0
    def release_success(self):
        """
        订单页面条件筛选动作的执行。
        第二步有个坑:如果设置的city不存在那么就默认页面执行操作
        :return:
        """
        # 1.读取用例设置的参数位置
        ov_para = self.overall[self.bi.whole_parameter()]
        # 1.1 根据文件名和key来解析相应的数据
        ov_para = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                               ov_para)
        case_value = self.read_yaml_case(file_name=ov_para,
                                         case_key=self.FUNCTION_NAME)

        # 2. 点击城市
        self.ct = CustomTabs(self.driver, self.financial[self.bi.yaml_tabs()])
        self.ct.into_the_city(self.vac, case_value[self.bi.yaml_city()])

        # 3.根据相应的key值对数据进行操作,遍历执行元素的动作(判断此参数的key是否出现)
        if self.bi.yaml_condition() in case_value:
            case_con = case_value[self.bi.yaml_condition()]
            para_key = case_con.keys()

            for ov in para_key:
                # 4.根据key值旗下的value值
                ov_pa = case_con[ov]
                pa_key = ov_pa.keys()
                # 5. 找到元素的keys值,该值为可在路径yaml表中找到元素的路径
                for pa in pa_key:
                    # ov_key = 依次元素的路径,ov_value = 设置的参数,ov_ty = 以及该元素的类型
                    ov_key = self.financial[pa]
                    case_pa = ov_pa[pa]
                    ov_value = case_pa[_parameter]
                    ov_ty = case_pa[_type].lower()

                    if ov_ty == _click:
                        # 根据元素进行点击
                        self.vac.css_click(self.driver, ov_key)
                        continue

                    elif ov_ty == _input:  # 根据元素进行输出操作

                        if pa == _timeinput:  # 如果为时间输入框就要的单独处理
                            start_time, end_time = self.ti.day_time_date(
                                ov_value)
                            # 点击输入框
                            self.vac.id_click(self.driver, ov_key)

                            # 输入日期:开始和结束
                            mimi = self.vac.is_visibles_css_selectop(
                                self.driver, ".input-mini")
                            self.vai.ele_clear_keys(mimi[0],
                                                    start_time["year"])
                            self.vai.ele_clear_keys(mimi[1], end_time["year"])

                            # 小时下拉框:开始和结束
                            self.time_day_select(".hourselect", 0,
                                                 start_time["time"])
                            self.time_day_select(".hourselect", 1,
                                                 end_time["time"])

                            # 下拉分:开始和结束
                            self.time_day_select(".minuteselect", 0,
                                                 start_time["seconds"])
                            self.time_day_select(".minuteselect", 1,
                                                 end_time["seconds"])

                            # 弹窗的确定按钮
                            self.vac.css_click(
                                self.driver,
                                self.financial[self.bi.yaml_timesuccess()])
                            pass
                        else:
                            self.vai.css_input(self.driver, ov_key, ov_value)
                            pass
                        continue

                    elif ov_ty == _select:  # 根据元素来设置相应的options值
                        ScreeningDrop(self.driver, ov_key,
                                      case_pa['ele']).setSelectorText(ov_value)
                        continue

                    elif ov_ty == 'checkbox':
                        # 根据元素来选择相应的单选框
                        checkbox = self.vac.is_visible_css_selectop(
                            self.driver, ov_key)
                        self.visibleRadioSelected(checkbox, ov_value)
                        continue

                    else:
                        self.log.info(_print % ov_ty)
                        continue
        else:
            self.log.info(
                "This use case has no condition parameter key value...")

        # 最后一步,点击查询还是点击导出
        ele_formSub = self.vai.is_visibles_css_selectop(
            self.driver, self.financial['formSub'])
        formSub = case_value['formSub']

        # 确定为搜索和导出就执行动作
        if formSub[_parameter]:
            action = formSub['action']
            if action == 'search':
                # 点击搜索按钮
                self.vac.element_click(ele_formSub[self.financial[action] - 1])
            else:
                # 点击搜索按钮之后在点击导出按钮
                x = [e.text for e in ele_formSub]
                self.vac.element_click(ele_formSub[self.financial['search'] -
                                                   1])
                # 点击搜索之后记得重新获取页面元素,不然会出现StaleElementReferenceException
                ele_formSub = self.vai.is_visibles_css_selectop(
                    self.driver, self.financial['formSub'])
                self.vac.element_click(ele_formSub[self.financial[action] - 1])
                # 弹窗中的全选按钮
                checkbox = self.vac.is_visible_css_selectop(
                    self.driver, self.financial[self.bi.yaml_headersort()])
                self.visibleRadioSelected(checkbox, True)
                # 没延迟会报错
                self.vai.sleep_Rest(1)
                # 弹窗中的确定按钮
                self.vac.css_click(self.driver,
                                   self.financial[self.bi.yaml_exportsort()])
            pass
        else:  # 确定不为搜索和导出就刷新页面
            self.driver.refresh()
        pass