资讯专栏INFORMATION COLUMN

利用Python appium实现模拟手机滑动操控的操作

89542767 / 429人阅读


  小编写这篇文章的主要目的,是给大家进行一个相关的讲解,讲解的内容主要是利用Python appium实现模拟手机滑动的操作,具体的一些操作方法,下面给大家做出一个解答。


  其实在前面两个章节的元素定位的场景,我们已经对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模式的编写。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128008.html

相关文章

  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python3网络爬虫实战---9、APP爬取相关库安装:Appium安装

    摘要:支持全平台的安装,我们直接从的里面安装即可,链接为。平台可以下载安装包如,平台可以下载安装包如,平台可以选择下载源码,但是更推荐用下文的安装方式。上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---8、APP爬取相关库的安装:MitmProxy的安装下一篇文章:Python3网络爬虫实战---10、爬虫框架的安装...

    caige 评论0 收藏0
  • 全面超越Appium,使用Airtest超快速开发App爬虫

    摘要:代码运行完成以后,微信被打开了。能不能像前面打开知乎一样,使用这个属性呢也行,也不行。滑动屏幕使用的命令为,滑动屏幕需要使用坐标信息。单独使用控制手机在 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D、Cocos2dx-*、Android 原生 A...

    noONE 评论0 收藏0
  • 超全App 测试工具大全,收藏这篇就够了【附带官网|GitHub地址】

    摘要:三性能测试工具官网介绍腾讯开源的的随身调测平台,支持和。官网介绍腾讯游戏部门开发的移动全平台性能测试分析工具平台。百度的服务目前主要为收费服务。 随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用。除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率...

    MRZYD 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<