Python+Appium自动化测试(8)-swipe()滑动页面
app自动化测试过程中,经常会遇到滑动屏幕操作,appium框架的话我们可以使用webdriver提供的swipe()方法来对屏幕页面进行上滑、下滑、左滑、右滑操作。
一,swipe方法介绍
-
swipe()方法源码如下:
swipe()方法的参数说明:
start_x:起始横坐标
start_y:起始纵坐标
end_x:结束时横坐标
end_y:结束时纵坐标
duration:滑动持续时间,单位毫秒,默认None(一般设置500-1000毫秒比较合适)
-
duration参数需要注意的是,在移动设备上滑动时间的快慢所形成的效果是不一样的。以今日头条APP首页上滑为例,同样的滑动距离,滑动较快则出现类似翻页的效果,而滑动较慢则是同一则新闻从起始位置滑动到结束位置。
-
手机屏幕的坐标:以手机屏幕左上角为坐标中心(0, 0),向右话滑动则纵坐标不变,横坐标变大;向下滑动则横坐标不变,纵坐标变大。在uiautomatorviewer中可以元素左上角坐标与右下角的坐标,如下图中"视频"按钮
-
因为不同测试机屏幕的尺寸很可能有差异,所以一般不使用固定的的坐标来滑动屏幕,而是先获取测试机屏幕尺寸,再通过获取的手机屏幕尺寸来确定滑动的起始、结束坐标,这样在我们更换了测试手机后不需要更改方法。使用webdriver提供的get_window_size()方法可以获取屏幕尺寸(即屏幕右下角的坐标),方法如下:
# 屏幕宽
width = driver.get_window_size()['width']
# 屏幕高
height = driver.get_window_size()['heigth']
- 滑动屏幕操作代码如下:
# 屏幕从下向上滑动
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
# 屏幕从上向下滑动
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
# 屏幕从左向右滑动
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
# 屏幕从右向左滑动
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
二,重新封装
我们还可以将滑动屏幕的操作封装成方法,方便后续调用
# project/common/baseOpera.py
class BaseOpera(object):
'''
基础操作
'''
def __init__(self, driver):
self.driver = driver
self.duration = 1000
@property
def width(self):
'''获取屏幕宽度'''
return self.driver.get_window_size()['width']
@property
def height(self):
'''获取屏幕高度'''
return self.driver.get_window_size()['height']
def swipe_to_left(self, base=0.1):
'''从右向左滑动'''
return self.driver.swipe(self.width*(1-base),
self.height*0.5,
self.width*base,
self.height*0.5,
self.duration
)
def swipe_to_right(self, base=0.1):
'''从左向右滑动'''
return self.driver.swipe(self.width*base,
self.height*0.5,
self.width*(1-base),
self.height*0.5,
self.duration
)
def swipe_to_top(self, base=0.9):
'''从下向上滑动'''
return self.driver.swipe(self.width*0.5,
self.height*base,
self.width*0.5,
self.height*(1-base),
self.duration
)
def swipe_to_bottom(self, base=0.9):
'''从上向下滑动'''
return self.driver.swipe(self.width*0.5,
self.height*(1-base),
self.width*0.5,
self.height*base,
self.duration
)
三,示例
调用baseOpera.py模块中的滑动方法,向上滑动查看今日头条首页新闻,简单示意如下:
from appium import webdriver
from common.baseOpera import BaseOpera
def android_driver():
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"automationName": "uiautomator2",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
# 启动app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
return driver
def watch_news():
# 向上滑动今日头条首页
driver = android_driver()
bo = BaseOpera(driver)
bo.swipe_to_top()
if __name__ == '__main__':
watch_new()