Python Appium 滑动点击等操作
Posted moying-wq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Appium 滑动点击等操作相关的知识,希望对你有一定的参考价值。
1、手机滑动-swip
# FileName : Tmall_App.py
# Author : Adil
# DateTime : 2018/3/25 17:22
# SoftWare : PyCharm
from appium import webdriver
caps = {}
caps[‘platformName‘] = ‘Android‘
caps[‘platformVersion‘] = ‘6.0‘
caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘
caps[‘appPackage‘] = ‘com.tmall.wireless‘
caps[‘appActivity‘] = ‘com.tmall.wireless.splash.TMSplashActivity‘
#隐藏键盘
caps[‘unicodeKeyboard‘] = True
caps[‘resetKeyboard‘] = True
driver = 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 : PyCharm
import time
from appium import webdriver
caps = {}
caps[‘platformName‘] = ‘Android‘
caps[‘platformVersion‘] = ‘6.0‘
caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘
caps[‘appPackage‘] = ‘com.tmall.wireless‘
caps[‘appActivity‘] = ‘com.tmall.wireless.splash.TMSplashActivity‘
#隐藏键盘
caps[‘unicodeKeyboard‘] = True
caps[‘resetKeyboard‘] = True
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, caps)
# 获取屏幕的size
size = driver.get_window_size()
print(size)
# 获取屏幕宽度 width
width = size[‘width‘]
print(width)
# 获取屏幕高度 height
height = size[‘height‘]
print(height)
# 执行滑屏操作,向下(下拉)滑动
x1 = width*0.5
y1 = height*0.25
y2 = height*0.9
time.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 : PyCharm
import time
from appium import webdriver
caps = {}
caps[‘platformName‘] = ‘Android‘
caps[‘platformVersion‘] = ‘6.0‘
caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘
caps[‘appPackage‘] = ‘com.tmall.wireless‘
caps[‘appActivity‘] = ‘com.tmall.wireless.splash.TMSplashActivity‘
#隐藏键盘
caps[‘unicodeKeyboard‘] = True
caps[‘resetKeyboard‘] = True
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, caps)
# 获取屏幕的size
size = driver.get_window_size()
print(size)
# 获取屏幕宽度 width
width = size[‘width‘]
print(width)
# 获取屏幕高度 height
height = size[‘height‘]
print(height)
# 执行滑屏操作,向下(下拉)滑动
x1 = width*0.5
y1 = height*0.25
y2 = height*0.8
time.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 time
from appium import webdriver
caps = {}
caps[‘platformName‘] = ‘Android‘
caps[‘platformVersion‘] = ‘6.0‘
caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘
caps[‘appPackage‘] = ‘com.tmall.wireless‘
caps[‘appActivity‘] = ‘com.tmall.wireless.splash.TMSplashActivity‘
#隐藏键盘
caps[‘unicodeKeyboard‘] = True
caps[‘resetKeyboard‘] = True
driver = 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 : PyCharm
import time
from appium import webdriver
caps = {}
caps[‘platformName‘] = ‘Android‘
caps[‘platformVersion‘] = ‘6.0‘
caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘
caps[‘appPackage‘] = ‘com.tmall.wireless‘
caps[‘appActivity‘] = ‘com.tmall.wireless.splash.TMSplashActivity‘
#隐藏键盘
caps[‘unicodeKeyboard‘] = True
caps[‘resetKeyboard‘] = True
driver = 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()
操作效果如下:
以上是关于Python Appium 滑动点击等操作的主要内容,如果未能解决你的问题,请参考以下文章
〖Python APP 自动化测试实战篇⑧〗- 实战 - appium 模拟手机滑动操控的操作
[Python3网络爬虫开发实战] 1.7.3-Appium的安装