• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

selenium+pytest:Web自动化Yaml工具类封装二

武飞扬头像
Monica_ll
帮助1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


一、页面元素yaml文件封装

1.元素yaml文件字段说明

- function_name: forntRedisValueClick    --调用得方法名
  element:
    - el_types: CSS_SELECTOR  -- 元素类型
      operation_type: click --元素操作类型
      element: div[class^=redis-input-config-cls]  --元素
      index:  --通过下标操作元素
      count: 0 --定位元素个数
      attribute:  --通过属性名获取文本
      label: --通过标签名获取文本
      info: redis前置条件,点击redisValue值输入框

2.元素yaml工具类

import logging.config
import os, sys,yaml

from congfig.pub.FrontColour import FrontColour as FC
from congfig.pub.FilePath import LOG_PATH_CON, TEST_DATA, PAGE_ELEMENT_PATH
from tools.StaticFunction import StaticFunction as SF

logging.config.fileConfig(LOG_PATH_CON,disable_existing_loggers=False)

# 操作元素yaml工具类
class OperationElementYaml():
    #限制该类只允许传入列表内参数
    # __slots__ = ['__yamlName', '__funcName', 'yamlElPath']
    #通过yaml文件名称拼接yaml路径获取需要操作的yaml数据
    def __init__(self,yamlName,funcName):
        self.__yamlName = yamlName
        self.__funcName = funcName
        self.yamlElPath = os.path.join(PAGE_ELEMENT_PATH,yamlName)

    #打开yaml文件
    @property
    def openYaml(self):

        if os.path.exists(self.yamlElPath):
            with open(self.yamlElPath,'r',encoding='utf-8') as yamlFile:
                yamlData = yaml.load(yamlFile,Loader=yaml.FullLoader)
                return yamlData
        else:
            logging.error(FC.RED%"yaml路径不存在:{0},请检查后执行".format(self.yamlElPath))
            sys.exit()

    #判断func_name是否存在于yaml中,若存在则将该节点数据返回
    @property
    def checkFunName(self):
        yamlDict = self.openYaml
        for dict_i in yamlDict:
            if dict_i.get("function_name") == self.__funcName:
                return dict_i
        else:
                logging.error(FC.RED%"方法名在当前yaml文件中未找到,方法名:{0},yaml文件名:{1}".format(self.__funcName,self.__yamlName))
                sys.exit()

    #判断节点数据类型是否为dict,根据下标获取element数据
    @property
    def getElData(self):
        yamlDict = self.checkFunName
        if isinstance(yamlDict,dict):
            element_list = yamlDict["element"]
            yaml_data = element_list[0]
            return yaml_data
        else:
            logging.error(FC.RED%"yaml数据错误,数据:{0}".format(yamlDict))

    #获取操作类型
    @property
    def getOperationType(self):
        return self.getElData.get("operation_type")

    #获取types
    @property
    def getElType(self):
        return self.getElData.get("el_types")

    #获取count
    @property
    def getCount(self):
        count = self.getElData.get("count")
        if count == None:
            return 0
        else:
            return count

    #获取element
    @property
    def getElement(self):
        return self.getElData.get("element")

    #获取info信息
    @property
    def getINFO(self):
        return self.getElData.get("info")

    #获取attribute信息
    @property
    def getAttribute(self):
        return self.getElData.get('attribute')

    #获取label信息
    @property
    def getLabel(self):
        return  self.getElData.get('label')

    #获取Index信息
    @property
    def getIndex(self):
        index = self.getElData.get('Index')
        if index ==None:
            return 0
        else:
            return index

学新通

二、测试数据yaml文件封装

1.测试数据yaml文件字段说明

- function_name: project_search_input
  testdata:
   - test_001: '11,1111,2,3,4' --用例编号多个元素英文逗号分隔
     info: 输入列表存在的数据 --用例描述
   - test_002: '1111'
     info: 输入列表不存在的数据
   - test_003: '!@#$%^&'
     info: 输入特殊字符

2.测试数据yaml工具类,继承元素操作的yaml工具

class OperationTestDataYaml(OperationElementYaml):
    '''
    操作测试数据yaml工具类
    '''
    #通过yaml文件名称拼接yaml路径获取需要操作的yaml数据
    def __init__(self, yamlName,funcName):
        super().__init__(yamlName,funcName)
        self.yamlElPath = os.path.join(TEST_DATA, yamlName)

    #判断节点数据类型是否为dict,根据下标获取testdata数据
    @property
    def getTdData(self):
        yamlDict = self.checkFunName
        if isinstance(yamlDict,dict):
            data = yamlDict["testdata"]
            return data
        else:
            logging.error("执行{0}方式,错误信息:yaml数据错误,数据:{1}".format("getTdData",yamlDict))

    #获取测试用例数据,从test_data截取
    def getTestData(self,index):
        SF.checkCount(index)
        strTestData = self.getTdData[index].get("test_00"  str(index 1))

        #验证传入数据为空时,直接return 空字符串进行处理
        if strTestData == None:
            return ''
        else:
            return tuple(strTestData.split(','))
学新通

总结

1.类方法还在持续优化中,代码中存在一些冗余逻辑问题,有待优化
2.每天学习一点,能更卷一点
3.框架整体还在持续优化中,其它工具类方法后续会慢慢更新

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggbeff
系列文章
更多 icon
同类精品
更多 icon
继续加载