Python+appinum封装基本的操作

Posted dmtz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+appinum封装基本的操作相关的知识,希望对你有一定的参考价值。

import os
from appium import webdriver
from time import sleep, strftime
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC,    expected_conditions
from selenium.webdriver.common.by import By
from selenium.common.exceptions import WebDriverException
#from tdop_ui_test.lib.log import *
from lib.log import *
from lib2to3.tests.support import driver
from appium.webdriver.webdriver import WebDriver
# from public.BaseOperate import getscreen
import GetDriver


u‘‘‘
封装一些基础操作:滑动、截图、点击页面元素,输入内容等
‘‘‘





class BaseOperate(object):
    def __init__(self,driver):
        self.driver = driver


    def back(self):
        ‘‘‘
        返回键
        :return:
        ‘‘‘
        os.popen("adb shell input keyevent 4")

    def enter_key(self):
        ‘‘‘输入enter键‘‘‘
        os.popen("adb shell input keyevent 66")

    def enter_key_getscreen(self):
        ‘‘‘输入enter键并截屏‘‘‘
        os.popen("adb shell input keyevent 66")
        self.getscreen()

    def find_toast(self, message,timeout=7, poll_frequency=0.01):
        ‘‘‘判断toast信息‘‘‘
        try:
            element = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, message)))
            print element
            return True
        except:
            return False
    def getscreen(self):
        u"屏幕截图,保存截图到report\screenshot目录下"
        st=strftime("%Y-%m-%d_%H-%M-%S")
#         path=os.path.abspath(os.path.join(os.getcwd(), "../.."))
        path = os.path.abspath(os.path.join(os.getcwd(), "..")) # 获取父级路径的上一级目录路径
        filename = path + "\\report\screenshot\%s.png" % st # 修改截图文件的存放路径为相对路径
        self.driver.get_screenshot_as_file(filename)
        print filename
    
    
    def click_by_id(self,ele_id):
        u"根据ID点击"
        try: 
            ClickElement = WebDriverWait(self.driver,timeout=15).until(EC.presence_of_element_located((By.ID,ele_id)),message=u元素加载超时!)
            ClickElement.click()
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %ele_id
            self.getscreen()
            log_error(u"未找到页面元素:%s"%ele_id)
            self.driver.quit()
            
            
    def click_by_class(self,ele_class):
        u"根据class_name点击"
        try: 
            ClickElement = WebDriverWait(self.driver,timeout=15).until(EC.presence_of_element_located((By.CLASS_NAME,ele_class)),message=u元素加载超时!)
            ClickElement.click()
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %ele_class
            self.getscreen()
            log_error(u"未找到页面元素:%s"%ele_class)
            self.driver.quit() 
    
    
    def click_by_xpath(self,xp):
        u"根据class_name点击"
        try: 
            ClickElement = self.driver.find_element_by_xpath(xp)
            ClickElement.click()
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %xp
            self.getscreen()
            log_error(u"未找到页面元素:%s"%xp)
            self.driver.quit() 
            
    def touch_tap(self,x,y,duration=50):  
        u" 根据坐标点击元素"
        screen_width = self.driver.get_window_size()[width]  #获取当前屏幕的宽
        screen_height = self.driver.get_window_size()[height]   #获取当前屏幕的高
        a =(float(x)/screen_width)*screen_width
        x1 = int(a)
        b = (float(y)/screen_height)*screen_height
        y1 = int(b)
        self.driver.tap([(x1,y1),(x1,y1)],duration)
        
        
        
        
    
    def click_by_text(self,ele_text):
        self.driver.find_elements_by_android_uiautomator("new UiSelector().text(\"%s\")"%ele_text)[0].click()
#     def click_by_text(self,ele_text):
#         u"根据text点击"
#         try:
#             ClickElement = WebDriverWait(self.driver,timeout=15).until(EC.presence_of_element_located((By.NAME,ele_text)),message=u‘元素加载超时!‘)
#             ClickElement.click()
#         except Exception as e:
#             print u"页面元素:%s没有找到,程序错误或请求超时" %ele_text
#             self.getscreen()
#             log_error(u"未找到页面元素:%s"%ele_text)
#             self.driver.quit()

    
    def input_by_id(self,input_id,text):
        u"Input,根据ID,input输入内容"
        try:
            InputElement = WebDriverWait(self.driver,timeout=20).until(EC.presence_of_element_located((By.ID,input_id)),message=u元素加载超时!)
            InputElement.click()
            InputElement.clear()
            InputElement.send_keys(str(text))
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %input_id
            self.getscreen()
            log_error(u"未找到页面元素:%s"%input_id)
            self.driver.quit()


    def input_by_id_unclear(self,input_id,text):
        u"Input,根据ID,input输入内容"
        try:
            InputElement = WebDriverWait(self.driver,timeout=20).until(EC.presence_of_element_located((By.ID,input_id)),message=u元素加载超时!)
            InputElement.send_keys(str(text))
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %input_id
            self.getscreen()
            log_error(u"未找到页面元素:%s"%input_id)
            self.driver.quit()
            
 
    
    def get_text(self,ele):
        u"根据元素ID,获取text"
        sleep(3)
        source = self.driver.page_source
        if ele in source:
            text_1=WebDriverWait(self.driver,timeout=15).until(EC.presence_of_element_located((By.ID,ele)),message=u元素加载超时!).get_attribute(text)
        else:
            print u"页面元素:%s没有找到,程序错误或请求超时" %ele
            self.getscreen()
            log_error(ele)
            self.driver.quit() 
        return text_1
    
    def get_text1(self,xp):
        u"根据元素xpth,获取text"
        sleep(3)
        source = self.driver.page_source
        try:
            text_1=WebDriverWait(self.driver,timeout=15).until(EC.presence_of_element_located((By.XPATH,xp)),message=u元素加载超时!).get_attribute(text)  
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %xp
            self.getscreen()
            log_error(xp)
            self.driver.quit() 
        return text_1

    def find_item(self, ele,timeout = 3):
        ‘‘‘用于检查页面是否存在某元素‘‘‘
        count = 0
        try:
            while count < timeout:
                source = self.driver.page_source
                if ele in source:
                    return True
                else:
                    count += 1
                    sleep(1)
            return False
        except Exception as e:
            print u"页面内容获取失败,程序错误或请求超时"
            self.getscreen()
            log_error(u"页面内容获取失败")


    def find_source(self):  # 方法已修改,待验证
        ‘‘‘获取页面的所有页面元素‘‘‘
        try:
            source = self.driver.page_source
        except Exception as e:
            print u"页面内容获取失败,程序错误或请求超时"
            self.getscreen()
            log_error(u"页面内容获取失败")
        return  source

    def find_by_scroll(self, ele_text):
        ‘‘‘滑屏查找指定元素的方法‘‘‘
        try:
            self.driver.find_element_by_android_uiautomator(
            new UiScrollable(new UiSelector().scrollable(true).instance(0)).getChildByText(new UiSelector().className("android.widget.TextView"), "+ ele_text + "))
            print u"滑屏查找的页面元素:%s已找到" % ele_text
        except Exception as e:
            print u"滑屏查找的页面元素:%s没有找到,程序错误或请求超时" %ele_text
            log_error(u"滑屏未找到页面元素:%s" % ele_text)
            #self.getscreen()

    def getSize(self):
        u"获取屏幕大小"
        x = self.driver.get_window_size()[width]
        y = self.driver.get_window_size()[height]
        return (x, y)
    

    #屏幕向上滑动
    def swipeUp(self,t = 600):
        l = self.getSize()
        x1 = int(l[0] * 0.5)    #x坐标
        y1 = int(l[1] * 0.75)   #起始y坐标
        y2 = int(l[1] * 0.25)   #终点y坐标
        self.driver.swipe(x1, y1, x1, y2,t) # t 表示滑屏的时间,5代巴枪默认为600ms,7代巴枪需要根据实测调整参数

    #屏幕向右滑动
    def swipRight(self,t = 600):
        ‘‘‘屏幕向右滑动‘‘‘
        l = self.getSize()
        x1=int(l[0]*0.05)
        y1=int(l[1]*0.5)
        x2=int(l[0]*0.75)
        self.driver.swipe(x1,y1,x2,y1,t)    
        
    def swipeDown(self,t = 600):
        ‘‘‘屏幕向下滑动‘‘‘
        l = self.getSize()
        x1 = int(l[0] * 0.5)  #x坐标
        y1 = int(l[1] * 0.25)   #起始y坐标
        y2 = int(l[1] * 0.75)   #终点y坐标
        self.driver.swipe(x1, y1, x1, y2,t)

    # 屏幕向左滑动
    def swipLeft(self,t = 600):
        ‘‘‘屏幕向左滑动‘‘‘
        l = self.getSize()
        x1 = int(l[0] * 0.75)
        y1 = int(l[1] * 0.5)
        x2 = int(l[0] * 0.05)
        self.driver.swipe(x1, y1, x2, y1, t)

    # 点屏幕左侧向上滑动
    def swipeUp_left(self, t=1200):
        l = self.getSize()
        x1 = int(l[0] * 0.15)  # x坐标
        y1 = int(l[1] * 0.75)  # 起始y坐标
        y2 = int(l[1] * 0.50)  # 终点y坐标
        self.driver.swipe(x1, y1, x1, y2, t)  # t 表示滑屏的时间,5代巴枪默认为600ms,7代巴枪需要根据实测调整参数

    # 向下滑屏,滑屏区间的坐标位可调
    def swipeDown_Adjustable(self,X1 = 0.5 ,Y1 = 0.5 ,Y2 = 0.8 ,t = 600): # X为横坐标的系数,Y为纵坐标的系数,t为滑屏时间,单位为ms
        ‘‘‘屏幕向下滑动‘‘‘
        l = self.getSize()
        x1 = int(l[0] * X1)  #x坐标
        y1 = int(l[1] * Y1)   #起始y坐标
        y2 = int(l[1] * Y2)   #终点y坐标
        self.driver.swipe(x1, y1, x1, y2,t)


    # 向上滑屏,滑屏区间设置为坐标位可调
    def swipeUp_Adjustable(self, X1 = 0.5, Y1 = 0.5, Y2 = 0.25, t = 600):  # X为横坐标的系数,Y为纵坐标的系数,t为滑屏时间,单位为ms
        ‘‘‘屏幕向上滑动‘‘‘
        l = self.getSize()
        x1 = int(l[0] * X1)  # x坐标
        y1 = int(l[1] * Y1)  # 起始y坐标
        y2 = int(l[1] * Y2)  # 终点y坐标
        self.driver.swipe(x1, y1, x1, y2, t)  # t 表示滑屏的时间,5代巴枪默认为600ms

    def plog(self,text):

        print text
        log_info(text)


    def pwlog(self,text):

        print text
        log_warn(text)


    def long_press_text(self,ele_text,duration = 2500):
        ‘‘‘根据text元素定位来长按操作‘‘‘
        try:
            ClickElement = WebDriverWait(self.driver,timeout=10).until(EC.presence_of_element_located((By.NAME,ele_text)),message=u元素加载超时!)
            elx = ClickElement.location.get(x)
            ely = ClickElement.location.get(y)
            self.driver.swipe(elx, ely, elx, ely, duration)
        except Exception as e:
            print u"页面元素:%s没有找到,程序错误或请求超时" %ele_text
            self.getscreen()
            log_error(u"未找到页面元素:%s"%ele_text)


    def find_toast1(self,message):
        try:
            element = WebDriverWait(self.driver,timeout=3).until(expected_conditions.presence_of_element_located((By.PARTIAL_LINK_TEXT, message)))
            return True
        except:
            return False
    



if __name__ == __main__:
    st=strftime("%Y-%m-%d_%H-%M-%S")
    path=os.path.abspath(os.path.dirname(os.getcwd())) #获取当前文件父级路径
    f=path+"\\report\screenshot\%s.png"%st
    filename=r"\\".join(f.split("\\"))
    driver = GetDriver.appdriver()   # 用于测试图片截图输出
    test_pic_shot = BaseOperate(driver)

    #test_pic_shot.getscreen()
    # print filename
    # x=int(test_pic_shot.getSize()[0]*0.5)
    # y= int(test_pic_shot.getSize()[1]*0.75)
    # print x,y
    #print f
    a = test_pic_shot.find_toast(u"查无此件")
    print a
    driver.quit()

 

以上是关于Python+appinum封装基本的操作的主要内容,如果未能解决你的问题,请参考以下文章

Appinum 自动化测试利器入门

Appinum 自动化测试利器入门

对于开发恒生交易API的Python封装有啥建议?

python目录

孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1

孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4