博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python Appium 滑动、点击等操作
阅读量:4562 次
发布时间:2019-06-08

本文共 7931 字,大约阅读时间需要 26 分钟。

Python Appium 滑动、点击等操作

 

1、手机滑动-swipe

# FileName : Tmall_App.py# Author   : Adil# DateTime : 2018/3/25 17:22# SoftWare : PyCharmfrom appium import  webdrivercaps = {}caps['platformName'] = 'Android'caps['platformVersion'] = '6.0'caps['deviceName'] = 'N79SIV5PVCSODAQC'caps['appPackage'] = 'com.tmall.wireless'caps['appActivity'] = 'com.tmall.wireless.splash.TMSplashActivity'#隐藏键盘caps['unicodeKeyboard'] = Truecaps['resetKeyboard'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)driver.swipe()if __name__ == '__main__':    pass

 

查看源码

Ctrl + 鼠标右键点击 driver.swipe()

# convenience method added to Appium (NOT Selenium 3)    def swipe(self, start_x, start_y, end_x, end_y, duration=None):        """Swipe from one point to another point, for an optional duration.        :Args:         - start_x - x-coordinate at which to start         - start_y - y-coordinate at which to start         - end_x - x-coordinate at which to stop         - end_y - y-coordinate at which to stop         - duration - (optional) time to take the swipe, in ms.        :Usage:            driver.swipe(100, 100, 100, 400)        """        # `swipe` is something like press-wait-move_to-release, which the server        # will translate into the correct action        action = TouchAction(self)        action \            .press(x=start_x, y=start_y) \            .wait(ms=duration) \            .move_to(x=end_x, y=end_y) \            .release()        action.perform()        return self

 

查看源码语法,起点和终点四个坐标参数。 手机屏幕从左上角开始为0,向右为x轴坐标,向下为y轴坐标。 

duration是滑动屏幕持续的时间,时间越短速度越快。默认为None可不填,一般设置500-1000毫秒比较合适。

swipe(self, start_x, start_y, end_x, end_y, duration=None)     Swipe from one point to another point, for an optional duration.    从一个点滑动到另外一个点,duration是持续时间            :Args:    - start_x - 开始滑动的x坐标    - start_y - 开始滑动的y坐标    - end_x - 结束点x坐标    - end_y - 结束点y坐标    - duration - 持续时间,单位毫秒        :Usage:    driver.swipe(100, 100, 100, 400)

 

向下滑动实例

# FileName : Tmall_App.py# Author   : Adil# DateTime : 2018/3/25 17:22# SoftWare : PyCharmimport timefrom appium import  webdrivercaps = {}caps['platformName'] = 'Android'caps['platformVersion'] = '6.0'caps['deviceName'] = 'N79SIV5PVCSODAQC'caps['appPackage'] = 'com.tmall.wireless'caps['appActivity'] = 'com.tmall.wireless.splash.TMSplashActivity'#隐藏键盘caps['unicodeKeyboard'] = Truecaps['resetKeyboard'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)# 获取屏幕的sizesize = driver.get_window_size()print(size)# 获取屏幕宽度 widthwidth = size['width']print(width)# 获取屏幕高度 heightheight = size['height']print(height)# 执行滑屏操作,向下(下拉)滑动x1 = width*0.5y1 = height*0.25y2 = height*0.9time.sleep(3)print("滑动前")driver.swipe(x1,y1,x1,y2)print("滑动后")# 增加滑动次数,滑动效果不明显,增加滑动次数for i in range(5):    print("第%d次滑屏"%i)    time.sleep(3)    driver.swipe(x1,y1,x1,y2)time.sleep(3)driver.quit()if __name__ == '__main__':    pass

 

封装滑动方法,代码如下:

# FileName : Tmall_App.py# Author   : Adil# DateTime : 2018/3/25 17:22# SoftWare : PyCharmimport timefrom appium import  webdrivercaps = {}caps['platformName'] = 'Android'caps['platformVersion'] = '6.0'caps['deviceName'] = 'N79SIV5PVCSODAQC'caps['appPackage'] = 'com.tmall.wireless'caps['appActivity'] = 'com.tmall.wireless.splash.TMSplashActivity'#隐藏键盘caps['unicodeKeyboard'] = Truecaps['resetKeyboard'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)# 获取屏幕的sizesize = driver.get_window_size()print(size)# 获取屏幕宽度 widthwidth = size['width']print(width)# 获取屏幕高度 heightheight = size['height']print(height)# 执行滑屏操作,向下(下拉)滑动x1 = width*0.5y1 = height*0.25y2 = height*0.8time.sleep(3)print("滑动前")driver.swipe(x1,y1,x1,y2)print("滑动后")# 增加滑动次数,滑动效果不明显,增加滑动次数for i in range(5):    print("第%d次滑屏"%i)    time.sleep(3)    driver.swipe(x1,y1,x1,y2)time.sleep(3)# 封装滑动方法def swipeUp(driver,n = 5):    '''定义向上滑动方法'''    print("定义向上滑动方法")    x1 = width*0.5    y1 = height*0.9    y2 = height*0.25    time.sleep(3)    print("滑动前")    for i in range(n):        print("第%d次滑屏" % i)        time.sleep(3)        driver.swipe(x1, y1, x1, y2)def swipeDown(driver,n = 5):    '''定义向下滑动方法'''    print("定义向下滑动方法")    x1 = width*0.5    y1 = height*0.25    y2 = height*0.9    time.sleep(3)    print("滑动前")    for i in range(n):        print("第%d次滑屏" % i)        time.sleep(3)        driver.swipe(x1, y1, x1, y2)def swipeLeft(driver,n = 5):    '''定义向左滑动方法'''    print("定义向左滑动方法")    x1 = width*0.8    x2 = width*0.2    y1 = height*0.5    time.sleep(3)    print("滑动前")    for i in range(n):        print("第%d次滑屏" % i)        time.sleep(3)        driver.swipe(x1, y1, x2, y1)def swipeRight(driver,n = 5):    '''定义向右滑动方法'''    print("定义向右滑动方法")    x1 = width*0.2    x2 = width*0.8    y1 = height*0.5    time.sleep(3)    print("滑动前")    for i in range(n):        print("第%d次滑屏" % i)        time.sleep(3)        driver.swipe(x1, y1, x2, y1)if __name__ == '__main__':    swipeUp(driver)    swipeDown(driver)    swipeLeft(driver)    swipeRight(driver)    driver.quit()

 

2、点击手机屏幕坐标-tap

 使用场景:有时候定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)

那就拿出绝招:点元素所在位置的坐标

import timefrom appium import  webdrivercaps = {}caps['platformName'] = 'Android'caps['platformVersion'] = '6.0'caps['deviceName'] = 'N79SIV5PVCSODAQC'caps['appPackage'] = 'com.tmall.wireless'caps['appActivity'] = 'com.tmall.wireless.splash.TMSplashActivity'#隐藏键盘caps['unicodeKeyboard'] = Truecaps['resetKeyboard'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)driver.tap()

查看源码

Ctrl + 鼠标右键点击 driver.tap()

# convenience method added to Appium (NOT Selenium 3)    def tap(self, positions, duration=None):        """Taps on an particular place with up to five fingers, holding for a        certain time        :Args:         - positions - an array of tuples representing the x/y coordinates of         the fingers to tap. Length can be up to five.         - duration - (optional) length of time to tap, in ms        :Usage:            driver.tap([(100, 20), (100, 60), (100, 100)], 500)        """        if len(positions) == 1:            action = TouchAction(self)            x = positions[0][0]            y = positions[0][1]            if duration:                action.long_press(x=x, y=y, duration=duration).release()            else:                action.tap(x=x, y=y)            action.perform()        else:            ma = MultiAction(self)            for position in positions:                x = position[0]                y = position[1]                action = TouchAction(self)                if duration:                    action.long_press(x=x, y=y, duration=duration).release()                else:                    action.press(x=x, y=y).release()                ma.add(action)            ma.perform()        return self

tap是模拟手指点击,一般页面上元素

的语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒

tap(self, positions, duration=None):    Taps on an particular place with up to five fingers, holding for a certain time        模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)        :Args:        - positions - list类型,里面对象是元组,最多五个。如:[(100, 20), (100, 60)]        - duration - 持续时间,单位毫秒,如:500        :Usage:        driver.tap([(100, 20), (100, 60), (100, 100)], 500)

 

实际应用:坐标定位

如图:查看元素坐标,可以看到右侧bonds属性

 

代码实例如下:

 

# FileName : Tamll_App_TapDemo.py# Author   : Adil# DateTime : 2018/3/26 17:44# SoftWare : PyCharmimport timefrom appium import  webdrivercaps = {}caps['platformName'] = 'Android'caps['platformVersion'] = '6.0'caps['deviceName'] = 'N79SIV5PVCSODAQC'caps['appPackage'] = 'com.tmall.wireless'caps['appActivity'] = 'com.tmall.wireless.splash.TMSplashActivity'#隐藏键盘caps['unicodeKeyboard'] = Truecaps['resetKeyboard'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)# 操作元素坐标点击# 天猫-天猫超市 坐标def tapHit(driver):    time.sleep(3)    driver.tap([(234,324),(438,561)],500)    time.sleep(2)if __name__ == '__main__':    tapHit(driver)    time.sleep(15)    driver.quit()

 

操作效果如下:

 

 

说明:

 通过坐标定位是元素定位的下下下策,实在没办法才用这个,另外如果换了手机分辨率,这个坐标就不能写死了,得算出所在屏幕的比例。

 

转载于:https://www.cnblogs.com/BlueSkyyj/p/8651365.html

你可能感兴趣的文章
近期计划
查看>>
解决DFS Locations从Eclipse的Navigator中消失的问题
查看>>
Vue搭建项目
查看>>
java学习笔记《一》网络编程基础
查看>>
设计模式
查看>>
mysqld_safe A mysqld process already exists
查看>>
六年测试之精华分享:产品质量应从哪些方面提高
查看>>
文件处理
查看>>
for循环
查看>>
【转】Android手机客户端关于二维码扫描的源码--不错
查看>>
【转】Java 多线程(四) 多线程访问成员变量与局部变量
查看>>
【转】gcc warning: braces around scalar initializer (标量初始化的括号)
查看>>
C/C++内存泄漏及检测(vs2005平台)【转】
查看>>
SpringBoot中遇到的问题---【Whitelabel Error Page 404 spring boot解决方法】
查看>>
python之路--模块--景丽洋
查看>>
postfix队列管理
查看>>
编译安装nginx
查看>>
操作系统的硬件环境
查看>>
js三种定义类的方法
查看>>
LeetCode——Unique Binary Search Trees
查看>>