其实在前面两个章节的元素定位的场景,我们已经对 app 中的自动化操作已经略知一二。这里我们发现, 实际上 appium 复用了 selenium 的很多很多的操作方式,所以像一些 “点击、输入” 等操作,这种常规的操作的方式与在 WEB 自动化中的方式基本上是完全一致的,就不再进行赘述了。

唯一一个与 WEB 端不太一样的地方就是关于 “滑动操控” ,所以 “页面的滑动” 在实际操作手机过程中,也是最常使用的,只需要操控一个点在屏幕中拖动到另外一个点就可以了。这个 “滑” 的过程就是一个滑动的动作。

在 “appium” 中,对于 “滑动” 的操作也做了一些简单的封装,为其提供了方法,这就是 “swipe” 。

滑动操控

OK,接下来我们就看一些,滑动操控 的脚本究竟要怎么写。

在模拟 “滑动操控” 的时候,使用的方法就是 swipe() ,该方法的参数说明如下:

  • start_x:起始横坐标
  • start_y:起始纵坐标
  • end_x:结束时横坐标
  • end_y:结束时纵坐标
  • duration:滑动持续时间,单位毫秒,默认None(一般设置500-1000毫秒比较合适)

ps:如果不设置 "duration" ,即为 0秒 ,无法看到滑动效果。

duration 参数需要注意的是:在移动设备上滑动时间的快慢所形成的效果是不一样的。以今日头条APP首页上滑为例,同样的滑动距离,滑动较快则出现类似翻页的效果,而滑动较慢则是同一则新闻从起始位置滑动到结束位置。

手机屏幕的坐标:以手机屏幕最左上角的坐标点为坐标中心(0, 0),向右话滑动则纵坐标不变,横坐标变大;向下滑动则横坐标不变,纵坐标变大。

如何获取设备屏幕坐标系

在实际工作场景中,不同测试机的屏幕尺寸存在着很大的差异性。所以正常情况下,我们不会选择使用固定的的坐标来滑动屏幕。

一般操作是,先获取测试机屏幕尺寸,再通过获取的手机屏幕尺寸来确定滑动的起始、结束坐标;这样,即使在我们更换了测试手机后也不需要重新更改坐标。使用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)
sleep(1)

# 屏幕从上向下滑动
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
sleep(1)

# 屏幕从左向右滑动
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
sleep(1)

# 屏幕从右向左滑动
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
sleep(1)

模拟实现一个简单的滑动操作

代码示例如下:

# coding=utf-8


from time import sleep
from appium 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-8


from 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手机滑动操控内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python利用appium实现模拟手机滑动操控的操作的更多相关文章

  1. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5调用手机发短信和打电话功能

    这篇文章主要介绍了HTML5调用手机发短信和打电话功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. Xcode:iPhone截图不再有效

    解决方法我没有针对您的问题的解决方案,但这是一个解决方法:使用设备制作屏幕截图.生成的屏幕截图将保存在设备上.要将屏幕截图传输到桌面,请不要使用慢速iPhoto或iTunes进行同步.而是使用Preview.app导入图像.文件菜单中有一个命令可以在iPhone连接时从iPhone导入图像.

  4. ios – 页面上有一个或多个错误.在itunesconnect上

    我正在尝试在iTunesconnect上传一个新的iOS应用程序版本,我不断收到错误页面上有一个或多个错误它突出了唯一的语言.请帮忙.并参考附图解决方法简而言之,必须将所有图像添加到“AppPreview和Screenshots”.我刚刚遇到这个问题,这个https://stackoverflow.com/a/38887524/795114的答案帮助我解决了这个问题.不知道为什么,但是当删除其他图

  5. xcode – 了解iPhone分辨率

    我正在使用phonegap将一个非常简单的html5页面导出到iphone应用程序并遇到这个愚蠢的问题.iPhone分辨率为960×640.当我将画布设置为那些尺寸时,它似乎太大了.这是为什么?我怎样才能利用iphone4的全高清功能.如果我将画布设置为较旧的iPhone,似乎画布适合全屏.将视口设置为这样的东西似乎有效,但是这会是性能损失吗?

  6. ios – Websockets可以在移动电话上工作吗?

    相关地,我怀疑长轮询客户端可能是实现类似功能的好方法,但我想知道我可能遇到的移动特定问题.到目前为止,我已经读过长时间的轮询请求可能会对电池寿命产生相当大的影响.我还听说iOS以某种方式限制了对单个服务器的连接数量,这可能是个问题.有没有人在使用实时组件的移动应用程序上工作?

  7. ios – 如何为此应用声明设备功能?

    我用iOS8.0及更高版本创建了应用程序.在应用商店中,兼容性:兼容iPhone5s,6,6s,6s和iPad……为什么iPhone4,4和5在兼容性列表中不可用,但app4适用于iPhone4,4和5,并且无法从带有iOS9.2.1的iPhone4s中的应用程序商店下载应用程序谢谢你的建议解决方法单击应用程序的顶级文件夹.它会将您带到一个具有常规,功能,资源标签,信息等的屏幕.在顶部.前两个选项卡可以包括电话必须能够支持的功能或最小iOS更新(通常).较旧的手机无法支持iOS9,这是默认设置.

  8. ios – 如何获取iPhone 5的手机信息塔数据?

    我正在尝试用我的iPhone5获取手机信号塔数据.我一直在使用VAFieldTest(https://github.com/valexa/VAFieldTest)进行测试.在第61行的文件VAFieldTestViewController.m(https://github.com/valexa/VAFieldTest/blob/master/Classes/VAFieldTestViewContr

  9. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  10. Xcode 4没有将iPhone识别为配置设备

    解决方法转到项目的“构建设置”,然后在右上角选择“全部”,然后确保iOS部署目标是4.2.然后构建,它应该工作.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部