【大爆炸】base_case_lib

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     base_case_lib
   Description :   用例基库类
   Author :       jiaoyaxiong
   date:          2019/7/22
-------------------------------------------------
   Change Activity:
                   2019/7/22:
-------------------------------------------------
"""

__author__ = 'jiaoyaxiong'

import hcslog
import conf
import traceback
import sys
import AddSharesToExpressSyncRequest

from xml.etree import ElementTree
from aliyunsdkcore import client


class common_lib(object,):
    def __init__(self,casemae):
        log_obj=hcslog.hcs_logger(casemae)
        self.logger=log_obj()
        self.txt_path=log_obj.txt_log_path
        self.cfg=conf.get_conf()

    cfg=conf.get_conf()
    clt_default = client.AcsClient(cfg["global"]["oss_ak_encrypt"],
                                   cfg["global"]["oss_sk_encrypt"],
                                   cfg["global"]["RegionId_Hangzhou"])




    def do_AddSharesToExpressSyncRequest(self,ExpressSyncId=None,
                                         GatewayShares=None,
                                         req_client=clt_default):
        request = AddSharesToExpressSyncRequest.AddSharesToExpressSyncRequest()

        #当前函数的名称,通过sys 获取,其实logging 也可以
        # %(funcName)s        Function name
        # https://blog.csdn.net/haoxun07/article/details/104467589

        function_name = sys._getframe().f_code.co_name
        if ExpressSyncId is not None:
            request.set_ExpressSyncId(ExpressSyncId)
        if GatewayShares is not None:
            request.set_GatewayShares(GatewayShares)

        result_dict = {}
        result_dict["Success"] = False
        result_dict["ReuqestId"] = ""
        result_dict["ErrorMassage"] = ""
        result_dict["Response"] = ""
        try:
            result = req_client.do_action(request)
            result_dict["Response"] = str(result)
            self.logger.info(result)
            root = ElementTree.fromstring(result)
            ele = root.findall("Success")
            result_dict["ReuqestId"] = root.find("RequestId").text

            if ele:
                self.logger.info("%s  success" % str(function_name))
                result_dict["Success"] = True
                # api 特有的
                # result_dict["GatewayId"] = root.find("GatewayId").text
                result_dict["TaskId"] = root.find("TaskId").text

            else:
                self.logger.error("%s failed !" % str(function_name) )
                result_dict["Success"] = False
        except Exception as e:
            self.logger.error("%s error. " %  str(function_name))
            self.logger.error(traceback.format_exc())
            result_dict["Success"] = False
            result_dict["ErrorMassage"] = str(e)
            return result_dict
        return result_dict

# 复习处理xml 和 json 类型数据
# json 简单
# xml 需要理解sax 和 dom 两种概念
# SAX (Simple API for XML) 和 DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序对xml解析器是透明。
# 始终记住DOM是一个树形结构。操作一个DOM节点实际上就是这么几个操作
# 更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
#
# 遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
#
# 添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
#
# 删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。

# selenium find_element_by_xpath ...
# id name class linktext
# 1. CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XPath 解析器(Parser))
# //表示当前页面某个目录下,input表示定位元素的标签名,[@ id=’ kw’]表示这个元素的id属性值等于kw。
# 如果一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来査找元素。
# find_element_by_xpath(" //input[@id = ‘kw’ and @class = ‘su’]/span/input”)
# con=sel.xpath('//div[text()="hello"]/p[posision()=2]/text()')

# 首先讲一下XPath的基本语法知识:
# 四种标签的使用方法
# 1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
# 2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
# 3) /text() 获取当前路径下的文本内容
# 4) /@xxxx 提取当前路径下标签的属性值
# 5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
# 6) . 点 用来选取当前节点
# 7) .. 双点 选取当前节点的父节点
# 另外还有starts-with(@属性名称,属性字符相同部分),string(.)两种重要的特殊方法后面将重点讲。

# 同胞(Sibling)  先辈(Ancestor)   后代(Descendant)
# /bookstore/book[last()-1]	选取属于 bookstore 子元素的倒数第二个 book 元素
# /bookstore/book[position()<3]	选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
# 如果同一父级下,有多个相同的子元素,下标从1开始:.//*[@id='u1']/a[2]    特别注意下标签是从1开始!!!!!!!!!!!
# 1.contains模糊匹配text:contains
# 如,通过模糊匹配text属性,找到百度首页的“糯米”网站超链接
# driver.find_element_by_xpath("//a[contains(text(),'糯')]").click()
#
# driver.find_element_by_xpath("//input[contains(@class,'s_ip')]").send_keys("hao")
#
# 3.模糊匹配以xx开头:starts-with
# xpath("//input[starts-with(@id,‘xx') ]")
# driver.find_element_by_xpath("//input[starts-with(@class,'s_ip')]").send_keys("hao")

#  2.Chrome调试:Console下输入$x(xpath定位),回车  重要(cnblogs.com/zhongyehai/p/10646194.html)


# http://www.caneman.cn/?p=540
# case1.获取a标签下所有子标签(不包括a)的内容:
# xpath("//a/child::*/text()")
# 1
# xpath("//a/child::*/text()")
# 输出结果:>>['contentB',  'contentE']
#
# case2.获取a标签下所有子孙标签(不包括a)的内容:
# xpath("//a/descendant::*/text()")
# 1
# xpath("//a/descendant::*/text()")
# 输出结果:>>['contentB',  'contentC',  'contentD', ' contentcE']
#
# case3.获取a标签下所有子孙标签(包括a)的内容:
# xpath("//a/descendant-or-self::*/text()")
# 1
# xpath("//a/descendant-or-self::*/text()")
# 输出结果:>>['contentA',  'contentB',  'contentC',  'contentD', ' contentcE']
#
# case4.获取a标签下所有子孙标签(包括a,但不包括含有属性type的标签)的内容:
# xpath("//a/descendant-or-self::*[not(@type)]/text()")
# 1
# xpath("//a/descendant-or-self::*[not(@type)]/text()")
# 输出结果:>>['contentA',  'contentB',  'contentC',  'contentcE']
#
# case5.获取a标签下所有子孙标签(包括a,但不包括c类型的标签)的内容:
# xpath("//a/descendant-or-self::*[not(name(.)='c')]/text()")
# 1
# xpath("//a/descendant-or-self::*[not(name(.)='c')]/text()")
# 输出结果:>>['contentA',  'contentB',  'contentD',  'contentcE']



# find_element_by_css_selector()方法用于CSS语言定位元素,点号( .)表示通过class属性来定位元素。
#  find_element_by_css_selector( “ # su ”) 井号(#)表示通过id属性来定位元素。

  

posted @ 2021-03-05 16:25  峡谷恶霸  阅读(45)  评论(0编辑  收藏  举报