python模拟手机屏幕滑动,appium可以模拟手机哪些动作
Appium是一款开源、跨平台的自动化测试工具,用于测试原生和轻量级移动应用,支持iOS、Android和FirefoxOS平台。本文将使用appium来模拟手机滑动控件的操作。有兴趣的可以看看。
00-1010滑动操纵如何获取设备屏幕的坐标系来模拟并实现简单的滑动操纵。将“滑动操纵”改为public的方法,其实是在前两章的元素定位场景中。对于app中的自动操作,我们已经略知一二。这里我们发现appium其实复用了很多很多selenium的操作方式,所以像“点击进入”这样的常规操作方式和WEB自动化中的基本相同,这里就不赘述了。
和WEB端唯一的区别就是关于“滑动控制”,所以“页面的滑动”也是手机实际操作中最常用的。你只需要控制一个点,把它拖到屏幕上的另一个点。这个“滑动”过程就是一个滑动动作。
在“appium”中,对“滑动”的操作做了一些简单的封装,为它提供了一种方法,这就是“滑动”。
目录
好了,我们来看一些滑动操纵的脚本。
模拟“滑动操纵”时,使用的方法是swipe()。该方法的参数如下:
Start_x:开始横坐标start_y:开始纵坐标end_x:结束横坐标end_y:结束纵坐标持续时间:滑动持续时间,单位毫秒,默认无(一般500-1000毫秒为宜)ps:如果没有设置持续时间,则为0秒,所以看不到滑动效果。
应该注意持续时间参数,滑动时间对移动设备的影响是不同的。以今日头条APP首页为例。在相同的滑动距离下,较快的滑动会产生翻页效果,而较慢的滑动会导致同一条新闻从起始位置滑动到结束位置。
手机屏幕坐标:以手机屏幕左上角的坐标点为坐标中心(0,0)。向右滑动,纵坐标不变,横坐标变大;向下滑动保持横坐标不变,纵坐标增加。
滑动操控
在实际工作场景中,不同测试机的屏幕尺寸差异较大。所以一般情况下,我们不会选择使用固定坐标来滑动屏幕。
一般是先获得测试者的屏幕尺寸,然后由获得的手机屏幕尺寸确定滑动的起始和结束坐标。这样,即使换了测试手机,我们也不需要再次改变坐标。使用webdriver提供的get_window_size()方法获取屏幕大小(即屏幕右下角的坐标)。该方法如下:
#获取屏幕宽度
width=driver . get _ window _ size()[ width ]
#获取屏幕高度
height=driver . get _ window _ size()[ heigth ]
滑屏操作代码如下: ()
#屏幕从底部向顶部滑动
driver.swipe(宽*0.5,高*0.9,宽*0.5,高*0.1,1000)
睡眠(1)
#屏幕从上到下滑动
driver.swipe(宽*0.5,高*0.1,宽*0.5,高*0.9,1000)
睡眠(1)
#屏幕从左向右滑动
driver.swipe(宽*0.1,高*0.5,宽*0.9,高*0.5,1000)
睡眠(1)
#屏幕从右向左滑动
driver.swipe(宽*0.9,高*0.5,宽*0.1,高*0.5,1000)
睡眠(1)
如何获取设备屏幕坐标系
代码示例如下:
#编码=utf-8
从时间进入睡眠
来自appiu
m import webdriver # appium 的特色就是将安卓、IOS的底层封装成了 webdriver 类型的语句
from appium.webdriver.common.appiumby import By
# 启动参数
desired_caps = {} # 定义 desired_caps 变量,用以赋值很多的启动信息
desired_caps[platformName] = Android # 设备名称、系统为 "Android"
desired_caps[platformVersion] = 7.1.2 # 这里是在夜神模拟器的设置中心查看安卓版本是 "7.1.2" ,后续会告诉大家如何切换版本
desired_caps[deviceName] = 127.0.0.1:62001 # 这里如果是真机的话填写的是设备名称;因为我们用的是模拟器,填写的是IP端口号
# desired_caps[appPackage] = com.baidu.searchbox # APP 的包名;这里我们使用的是通讯录
# desired_caps[appActivity] = com.baidu.searchbox.SplashActivity # 启动的界面的名字(也或者叫启动名,默认是 "." 开头的)
# desired_caps[automationName]=UiAutomator1
# 声明手机驱动
driver = webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) # 注册到这个节点上,传入 "desired_caps"。这个节点就是 "appium" 开启的端口节点
sleep(1)
# 获取屏幕宽度
width = driver.get_window_size()[width]
# 获取屏幕高度
height = driver.get_window_size()[height]
# 利用 "swipe" 实现滑动, 屏幕从下向上滑动
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
sleep(1)
# 利用 "swipe" 实现滑动, 屏幕从上向下滑动
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
sleep(1)
# 利用 "swipe" 实现滑动, 屏幕从左向右滑动
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
sleep(1)
# 利用 "swipe" 实现滑动, 屏幕从右向左滑动
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
sleep(1)
driver.terminate_app(com.baidu.searchbox)
# driver.quit()
将 滑动操控 改为公共的方法
上文中的脚本虽然也能够实现我们针对 App 的 滑动操控 的操作,但是代码的整洁度上来看不是那么的美观。既然如此,我们是否能够将其封装起来,变成一个公共的方法,当然是可以的了,继续往下看。
代码示例如下:
# coding=utf-8from time import sleep
from appium import webdriver # appium 的特色就是将安卓、IOS的底层封装成了 webdriver 类型的语句
def getSize(driver):
"""获取页面大小"""
x = driver.get_window_size()[width]
y = driver.get_window_size()[height]
return(x, y)
def swipeRight(driver):
"""向右滑动 - [x轴变动,y轴不变]"""
l = getSize(driver)
x1 = int(l[0]*0.8)
x2 = int(l[0]*0.2)
y = int(l[1]*0.5)
driver.swipe(x1, y, x2, y, 1000)
def swipeLeft(driver):
"""向左滑动 - [x轴变动,y轴不变]"""
l = getSize(driver)
x1 = int(l[0]*0.9)
x2 = int(l[0]*0.1)
y = int(l[1]*0.5)
driver.swipe(x2, y, x1, y, 1000)
def swipeDown(driver):
"""向下滑动 - [x轴不变,y轴变动]"""
l = getSize(driver)
y1 = int(l[1]*0.9)
y2 = int(l[1]*0.1)
x = int(l[0]*0.5)
driver.swipe(x, y1, x, y2, 1000)
def swipeUp(driver):
"""向上滑动 - [x轴不变,y轴变动]"""
l = getSize(driver)
y1 = int(l[1]*0.8)
y2 = int(l[1]*0.2)
x = int(l[0]*0.5)
driver.swipe(x, y2, x, y1, 1000)
def swipeDemo():
# 启动参数
desired_caps = {} # 定义 desired_caps 变量,用以赋值很多的启动信息
desired_caps[platformName] = Android # 设备名称、系统为 "Android"
desired_caps[platformVersion] = 7.1.2 # 这里是在夜神模拟器的设置中心查看安卓版本是 "7.1.2" ,后续会告诉大家如何切换版本
desired_caps[deviceName] = 127.0.0.1:62001 # 这里如果是真机的话填写的是设备名称;因为我们用的是模拟器,填写的是IP端口号
# desired_caps[appPackage] = com.baidu.searchbox # APP 的包名;这里我们使用的是通讯录
# desired_caps[appActivity] = com.baidu.searchbox.SplashActivity # 启动的界面的名字(也或者叫启动名,默认是 "." 开头的)
# desired_caps[automationName]=UiAutomator1
# 声明手机驱动
driver = webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) # 注册到这个节点上,传入 "desired_caps"。这个节点就是 "appium" 开启的端口节点
sleep(1)
# 利用 "swipe" 实现滑动, 屏幕从下向上滑动
swipeDown(driver)
sleep(2)
# 利用 "swipe" 实现滑动, 屏幕从上向下滑动
swipeUp(driver)
sleep(2)
# 利用 "swipe" 实现滑动, 屏幕从左向右滑动
swipeLeft(driver)
sleep(2)
# 利用 "swipe" 实现滑动, 屏幕从右向左滑动
swipeRight(driver)
sleep(2)
driver.terminate_app(com.baidu.searchbox)
# driver.quit()
if __name__ == __main__:
swipeDemo()
其实滑动在实际操作中应用的场景还是不少的,就比如要定位的元素在页面下方必须要通过滑动才能往下滑将其展示出来;再比如解锁密码、或者滑动九宫格之类的场景… 类似的滑动场景,大家可以在真实的场景中逐步的去体验。
到此,一个很简单的基于 百度App 实现的 demo 就到此结束了。但是该 demo 仅仅是基于实现,没有像之前的 WEB 框架那样去同意做处理、去进行 PO 模式的编写。
到此这篇关于Python利用appium实现模拟手机滑动操控的操作的文章就介绍到这了,更多相关Python appium手机滑动操控内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。