예제 #1
0
class ReadIni(object):
    def __init__(self, filename=None, node=None):
        self.file_name = filename
        self.logger = UserLog().get_log()
        if filename == None:
            self.file_name = parent_dir + "/config/Element.ini"
            print(self.file_name)

        if node == None:
            self.node = "Element"
        else:
            self.node = node
        print(self.node)
        print(self.file_name)
        self.cf = self.load_ini(self.file_name)
        print(self.cf)

    def load_ini(self, file_name):
        cf = configparser.ConfigParser()
        cf.read(file_name)
        return cf

    # 获取value得值
    def get_value(self, key):
        print(self.node)
        print(key)
        try:
            data = self.cf.get(self.node, key)
            print(data)
            return data
        except Exception as e:
            self.logger.info(e)
예제 #2
0
    def __init__(self, driver, url):
        self.driver = driver
        self.driver.get(url)
        log = UserLog()
        self.logging = log.get_log()

        self.getele = Getelement(self.driver)
        self.read = Read_inifile()
        self.getname = Getname()
 def __init__(self, driver: WebDriver, file=None, node=None):
     self.driver = driver
     self.log = UserLog()
     self.logger = self.log.get_log()
     if file == None:
         self.filename = parent_dir + '/config/Element.ini'
     else:
         self.filename = parent_dir + file
     self.rean_ini = ReadIni(filename=self.filename, node=node)
     self.logger.info(self.filename)
     self.logger.info(node)
예제 #4
0
    def __init__(self):
        self.url = "https://dnapp.bitkinetic.com/api/v5/login/mplogin"
        self.body = {
            "zoneNum": "86",
            "phone": "15088132074",
            "password": "******"
        }

        self.logger = UserLog().get_log()

        print("初始化")
예제 #5
0
    def __init__(self, filename=None, node=None):
        self.file_name = filename
        self.logger = UserLog().get_log()
        if filename == None:
            self.file_name = parent_dir + "/config/Element.ini"
            print(self.file_name)

        if node == None:
            self.node = "Element"
        else:
            self.node = node
        print(self.node)
        print(self.file_name)
        self.cf = self.load_ini(self.file_name)
        print(self.cf)
예제 #6
0
    def __init__(self,platformName=None,platformVersion=None,deviceName=None,udid=None,appPackage=None,appActivity=None):

        if platformName == None:

            platform = 'Android'

        else:

            platform = platformName

        if platformVersion == None:

            version = '10.3.10.0'

        else:
            version = platformVersion

        if deviceName == None:

            device = 'Redmi111'

        else:
            device = deviceName

        if udid == None:

            udi = '56f46ae7'

        else :

            udi = udid

        if appPackage == None:
            Package = 'com.xueqiu.android'
        else:
            Package = appPackage

        if appActivity == None:

            Activity =   'com.xueqiu.android.view.WelcomeActivityAlias'
        else :
            Activity = appActivity


        desired_caps = {}
        desired_caps['platformName'] = platform  # 设备系统
        desired_caps['platformVersion'] = version  # 设备系统版本
        desired_caps['deviceName'] = device  # 设备名称
        desired_caps['udid'] = udi  # 设备名称

        # 设置APP信息,进入启动页

        desired_caps['appPackage'] = Package
        desired_caps['appActivity'] = Activity
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

        self.driver.implicitly_wait(3)  # 初始化 webdriver 之后,因式等待3秒

        self.log = UserLog()
        self.logger = self.log.get_log()

        # 初始化读取元素定位信息类
        filename = parent_dir + '/config/AppElement.ini'

        node = 'AppElement'

        self.read_ini = ReadIni(filename=filename,node= node)
예제 #7
0
class AppiumBase:

    def __init__(self,platformName=None,platformVersion=None,deviceName=None,udid=None,appPackage=None,appActivity=None):

        if platformName == None:

            platform = 'Android'

        else:

            platform = platformName

        if platformVersion == None:

            version = '10.3.10.0'

        else:
            version = platformVersion

        if deviceName == None:

            device = 'Redmi111'

        else:
            device = deviceName

        if udid == None:

            udi = '56f46ae7'

        else :

            udi = udid

        if appPackage == None:
            Package = 'com.xueqiu.android'
        else:
            Package = appPackage

        if appActivity == None:

            Activity =   'com.xueqiu.android.view.WelcomeActivityAlias'
        else :
            Activity = appActivity


        desired_caps = {}
        desired_caps['platformName'] = platform  # 设备系统
        desired_caps['platformVersion'] = version  # 设备系统版本
        desired_caps['deviceName'] = device  # 设备名称
        desired_caps['udid'] = udi  # 设备名称

        # 设置APP信息,进入启动页

        desired_caps['appPackage'] = Package
        desired_caps['appActivity'] = Activity
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

        self.driver.implicitly_wait(3)  # 初始化 webdriver 之后,因式等待3秒

        self.log = UserLog()
        self.logger = self.log.get_log()

        # 初始化读取元素定位信息类
        filename = parent_dir + '/config/AppElement.ini'

        node = 'AppElement'

        self.read_ini = ReadIni(filename=filename,node= node)




    def get_element(self,key):

        # read_ini = ReadIni(filename,node)
        '''封装查找元素'''

        local = self.read_ini.get_value(key)
        try:

            if local != None:
                by = local.split('>')[0]
                local_by = local.split('>')[1]

                if by == 'id':

                    return self.driver.find_element_by_id(local_by)

                elif by == 'classname':

                    return self.driver.find_element_by_class_name(local_by)

                elif by == 'name':

                    return self.driver.find_element_by_name(local_by)

                elif by == 'xpath':

                    return self.driver.find_element_by_xpath(local_by)

                elif by == 'ids':

                    return self.driver.find_elements_by_id(local_by)

                elif by == 'accessibility_id':

                    return self.driver.find_element_by_accessibility_id(local_by)


                elif by == 'xpaths':

                    return self.driver.find_elements_by_xpath(local_by)

                elif by == 'mobile_id':

                    return self.driver.find_element(MobileBy.ID,local_by)

                elif by == 'mobile_ids':

                    return self.driver.find_elements(MobileBy.ID,local_by)

                elif by == 'mobile_xpath':

                    return self.driver.find_element(MobileBy.XPATH,local_by)

                elif by == 'android_uiautomator':

                    # local_by = 'new UiSelector().resourceId("com.xueqiu.android:id/login_account")'
                    # local_by = 'new UiSelector().textContains("账号密码")'
                    # local_by = 'new UiSelector().text("我的")'

                    return self.driver.find_element_by_android_uiautomator(local_by)

                elif by == 'android_uiautomators':

                    return self.driver.find_elements_by_android_uiautomator(local_by)

                else :
                    self.logger.info('没有该定位方式')


        except Exception as e:
            self.logger.info('查找元素出现异常,异常信息为:' + {e})


    def get_clildelement(self,eles:WebDriver,key):

        '''封装从父元素获取子元素'''

        data = self.read_ini.get_value(key)

        by = data.split('>')[0]

        value = data.split('>')[1]

        try:

            if by == 'id':

                ele = eles.find_element_by_id(value)

                return ele

            elif by == 'xpath':

                ele = eles.find_element_by_xpath(value)

                return ele

        except Exception as e:

            self.logger.info('查找元素出现异常,异常信息为:' + {e})


    def get_windown_rect(self):

        windown_rect = self.driver.get_window_rect()

        width = windown_rect['windth']
        height = windown_rect['height']

        return {'width':width,'height':height}



    def action_press_moveto(self):

        '''列表:屏幕操作,按住某位置后,手指移动到另外一个位置,释放手指'''

        action = TouchAction(self.driver)

        x1 = int(self.get_windown_rect()['width']/2)

        y_start = int(self.get_windown_rect()['height'] * 1/5)

        y_end = int(self.get_windown_rect()['height'] * 4/5)

        action.press(x = x1,y = y_start).wait(200).move_to(x = x1,y = y_end).release().perform()


    def action_list_find(self):

        '''列表:滑动列表数据并找到某个元素'''

        self.driver.find_elements_by_android_uiautomator(
            'new UiScrollable(new UiSelector().scrollable(true).instance(0).scrollIntoView(new Uiselector().text("查找的文案")))'
        )
예제 #8
0
    def run_main(self,
                 method,
                 url,
                 data,
                 cookie=None,
                 get_cookie=None,
                 header=None,
                 app=None):
        '''
        执行方法,传递method、url、data参数
        '''
        #return get_value(url)
        # base_url = HandleInit.get_value("server","host")
        hi = HandleInit()
        log = UserLog().get_log()

        if 'http' not in url:

            if app == "jy":
                '''
                兼容简盈APP
                '''
                base_url = hi.get_value("server", "jyhost")

                url = base_url + str(url)

                jyheader = {
                    "Content-Type": "application/json",
                    "app": "jy",
                    "version": "1.0.0"
                }

                if method == 'get':

                    res = self.send_get(url, data, cookie, get_cookie, header)

                    log.info("http --》url---->")
                    log.info(url)
                    log.info("http--->data---->")
                    log.info(data)
                    log.info("http--->header--->")
                    log.info(header)
                    log.info("http--->res--->")
                    log.info(res)
                else:

                    res = self.send_post(url, data, cookie, get_cookie, header)
                try:
                    res = json.loads(res)
                except:
                    print("这个结果是一个text")
                # print("--->",res)
                return res
            else:
                base_url = hi.get_value("server", "host")

                url = base_url + str(url)

                if method == 'get':
                    res = self.send_get(url, data, cookie, get_cookie, header)
                else:
                    res = self.send_post(url, data, cookie, get_cookie, header)
                try:
                    res = json.loads(res)
                except:
                    print(" 这个结果是一个text")
                    print(res)
                return res
        else:

            if method == "get":
                res = self.send_get(url, data, cookie, get_cookie, header)

            else:
                res = self.send_post(url, data, cookie, get_cookie, header)
            return res
class FindElement:
    def __init__(self, driver: WebDriver, file=None, node=None):
        self.driver = driver
        self.log = UserLog()
        self.logger = self.log.get_log()
        if file == None:
            self.filename = parent_dir + '/config/Element.ini'
        else:
            self.filename = parent_dir + file
        self.rean_ini = ReadIni(filename=self.filename, node=node)
        self.logger.info(self.filename)
        self.logger.info(node)

    def get_element(self, key):
        '''
        获取元素,返回Selenium Element元素
        '''

        data = self.rean_ini.get_value(key)
        self.logger.info(key)
        self.logger.info(data)
        by = data.split('>')[0]
        values = data.split('>')[1:]

        if len(values) == 1:

            value = data.split('>')[1]

        elif len(values) > 1:

            value = values[0]

            for i in range(1, len(values) - 1):

                value = value + '>' + values[i]

        self.logger.info('定位方式' + by + '定位值' + value)
        # self.logger.info(type(value))
        try:
            if by == 'id':

                element = WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_id(value))
                is_disappeared = WebDriverWait(
                    self.driver, 30, 1,
                    (ElementNotVisibleException)).until_not(
                        lambda x: x.find_element_by_id(value).is_displayed())

                # locator = (By.ID,"value")
                # WebDriverWait(self.driver,20,0.5).until(EC.presence_of_all_elements_located(locator))
                # ele = self.driver.find_element_by_id(value)
                return element

            elif by == 'xpath':

                ele = WebDriverWait(
                    self.driver,
                    10).until(lambda x: x.find_element_by_xpath(value))
                # ele = self.driver.find_element_by_xpath(value)
                self.logger.info("获取到的元素为--->")
                self.logger.info(ele)
                return ele

            elif by == 'css':
                # locator = (By.CSS_SELECTOR,"value")
                # WebDriverWait(self.driver,20,0.5).until(EC.presence_of_all_elements_located(locator))
                ele = self.driver.find_element_by_css_selector(value)
                self.logger.info("获取到的元素为--->")
                self.logger.info(ele)
                return ele

            elif by == 'link_text':
                WebDriverWait(self.driver, 10).until(
                    expected_conditions.invisibility_of_element(
                        self.driver.find_element_by_link_text(value)))
                ele = self.driver.find_element_by_link_text(value)
                return ele

            elif by == 'name':
                WebDriverWait(self.driver, 10).until(
                    expected_conditions.invisibility_of_element(
                        self.driver.find_element_by_name(value)))
                ele = self.driver.find_element_by_name(value)
                return ele

            elif by == 'classname':

                locator = (By.CLASS_NAME, value)
                WebDriverWait(self.driver, 20, 0.5).until(
                    EC.presence_of_all_elements_located(locator))
                ele = self.driver.find_element_by_class_name(value)
                return ele

            elif by == 'xpaths':
                # locator = (By.XPATH,value)
                # WebDriverWait(self.driver,10,0.5).until(
                #     expected_conditions.presence_of_all_elements_located(locator)
                # )
                # ele = self.driver.find_elements(locator)
                sleep(4)
                ele = self.driver.find_elements_by_xpath(value)
                self.logger.info("获取到的元素为--->")
                self.logger.info(ele)
                return ele

            elif by == 'classnames':
                locator = (By.CLASS_NAME, value)
                WebDriverWait(self.driver, 20, 0.5).until(
                    EC.presence_of_all_elements_located(locator))

                eles = self.driver.find_elements_by_class_name(value)
                self.logger.info("获取到的元素为--->")
                self.logger.info(eles)
                return eles
            elif by == 'linktexts':
                WebDriverWait(self.driver, 20, 0.5).until(
                    expected_conditions.invisibility_of_element(
                        self.driver.find_elements_by_link_text(value)))
                ele = self.driver.find_elements_by_link_text(value)
                return ele

        except:
            print("11112222")
            self.logger.info(self.log.iferrorinfo())

    def get_childelement(self, elements, key):
        '''
        获取元素
            '''
        data = self.rean_ini.get_value(key)
        by = data.split('>')[0]
        value = data.split('>')[1]
        try:
            if by == 'id':
                ele = elements.find_element_by_id(value)
                return ele
            elif by == 'xpath':
                ele = elements.find_element_by_xpath(value)
                return ele
        except:
            self.logger.info(self.log.iferrorinfo())
예제 #10
0
class Teamkitlogintoken(object):
    def __init__(self):
        self.url = "https://dnapp.bitkinetic.com/api/v5/login/mplogin"
        self.body = {
            "zoneNum": "86",
            "phone": "15088132074",
            "password": "******"
        }

        self.logger = UserLog().get_log()

        print("初始化")

    # 获取指定长度的随机字符串
    def __getRandomStr__(self, len):

        # 获取len位的随机字符串
        seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        sa = []
        for i in range(len):
            sa.append(random.choice(seed))

        randomStr = ''.join(sa)

        return randomStr

    def __calcSign__(self, salt, hash, time):
        for i in salt:
            hash = ((hash << 5) & 0x7fffffff) + int(ord(i)) + hash
        return (hash & int(time))

    # 获取请求头
    # 登录接口需传入的参数
    def __getHttpHeader__(self):

        # 获取当前时间,为秒单位
        t = str(int(time.time()))

        # 获取随机字符串
        r = self.__getRandomStr__(32)

        # 定义当前版本号
        version = 2019

        sign = str(self.__calcSign__(r, version, t))

        header = {'r': r, 't': t, 'sign': sign, 'd-version': str(version)}

        return header

        # 执行登录接口调用
    def login(self):

        url = self.url

        body = self.body

        header = self.__getHttpHeader__()

        response = requests.post(url, data=body, headers=header).json()
        print(response)
        if response["ret"] == 0:
            self.logger.info("登录账号信息:" + str(body) + "登录成功")
            return response
        else:
            print(response["msg"])
            self.logger.info("login--->")
            self.logger.info("登录账号信息:" + str(body))
            self.logger.info(response)

    def getMerloginHeader(self):

        res = self.login()
        dtToken = res['data']['d-tk']  #获取token
        iTeams = res['data']['user_info']['team']  #获取iTeam 内的字段

        t = str(int(time.time()))

        # 获取随机字符串
        r = self.__getRandomStr__(32)

        # 定义当前版本号
        version = 2019

        sign = str(self.__calcSign__(r, version, t))

        app = "3001"  #3001为Teamkit

        dnapp = "100001"

        if len(iTeams) > 1:
            for iTeam in iTeams:
                # print(iTeam)
                if iTeam["iRole"] == 4 or iTeam["iRole"] == 1 or iTeam[
                        "iRole"] == 2:
                    iManagerTeamId = iTeam["iTeamId"]
                    iManageName = iTeam["sTeamName"]
                    iManegeTeamrole = iTeam["iRole"]
                    header = {
                        'app': app,
                        "dnapp": dnapp,
                        'r': r,
                        't': t,
                        'sign': sign,
                        'd-version': str(version),
                        'd-tk': dtToken,
                        'teamrole': str(iManegeTeamrole),
                        'iTeamId': str(iManagerTeamId)
                    }  # 成员身份的请求头

                elif iTeam["iRole"] == 3:
                    iMermeTeamId = iTeam["iTeamId"]
                    iMerTeamName = iTeam["sTeamName"]
                    iMerTeamrole = iTeam["iRole"]
                    Managerheader = {
                        'app': app,
                        "dnapp": dnapp,
                        'r': r,
                        't': t,
                        'sign': sign,
                        'd-version': str(version),
                        'd-tk': dtToken,
                        'teamrole': str(iMerTeamrole),
                        'iTeamId': str(iMermeTeamId)
                    }  # 管理员参数的请求头

        else:
            print("未加入团队")

        # header = {'app': app,"dnapp":dnapp,'r': r, 't': t, 'sign': sign, 'd-version': str(version),'d-tk':dtToken,'teamrole':str(teamrole),'iTeamId':iTeamId}

        return header, Managerheader
예제 #11
0
    def setUp(self):
        log = UserLog()
        self.logging = log.get_log()

        self.driver = webdriver.Chrome()
        self.url = "http://192.168.0.134:9000/ECShop_V2.7.2_UTF8_Release0604/upload66/user.php"
예제 #12
0
 def setUpClass(cls):
     cls.user_log = UserLog()
     cls.user_log.get_logger().info("类前置")