首页 > 其他分享 >Appium - 模拟手机滑动操控的操作

Appium - 模拟手机滑动操控的操作

时间:2022-09-01 11:24:16浏览次数:68  
标签:Appium 模拟手机 desired swipe driver caps width 滑动

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

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

如果不设置 "duration" ,即为 0秒 ,无法看到滑动效果。duration 参数需要注意的是:在移动设备上滑动时间的快慢所形成的效果是不一样的。

以今日头条APP首页上滑为例,同样的滑动距离,滑动较快则出现类似翻页的效果,而滑动较慢则是同一则新闻从起始位置滑动到结束位置。

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

 

1.获取设备屏幕坐标系

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

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

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

# 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.close_app()

3.将 “滑动操控” 封装为公共的方法

上文中的脚本虽然也能够实现我们针对 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()

 

标签:Appium,模拟手机,desired,swipe,driver,caps,width,滑动
From: https://www.cnblogs.com/xiaolintongxue1/p/16645861.html

相关文章

  • pyest+appium实现APP自动化测试,思路全总结在这里
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试01appium......
  • Workshop 深圳站|实战+源码架构剖析带你揭开Appium的神秘面纱
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取“工作坊(workshop)”一词最早出现在教育与心理学的研究领域之中。它是引发人们思考、探讨、......
  • 滑动加载
    html<divclass="message-box"data-spy="scroll"data-target="#navbar-example"data-offset="0"ref="messageList"></div> jsmounted(){//缓存指针......
  • appium入门
    Appium入门参数:platformName:平台名称,一般是Android或iOS;platformVersion:平台的版本号,可以使用以下命令:adbshellgetpropro.build.version.releasedeviceName:......
  • appium 移动端自动化测试工具
    appium移动端自动化测试工具appium移动端自动化测试工具appium是哟个自动化测试开源工具支持ios和安卓平台的应用以及web应用和混合应用appium是一个跨平台的工......
  • 小程序scroll-view滑动进度条
     效果图如下:    代码如下:Page({data:{left:0.5//初始化滑块位置},//金刚区滑动事件scroll(event){letscrollLeft=e......
  • appium 2.0 beta版体验
    appium创建了Appium2.0的项目看板,项目正在开发中。https://github.com/appium/appium/projects/2Appium2.0核心特性独立的驱动:能够安装和使用基于你的应用平台的解......
  • Appium 华为鸿蒙系统ADB无线调试
    1.获取鸿蒙设备信息platformName和platformVersion#在前置参数中#platformName就直接填写Android#platformVersion先便填写一个版本(10、11、12先随便填写一个版......
  • vue 滑动到指定位置
    在Vue中,有三种方式可以实现H5页面滑动至指定位置方法1://先获取目标位置距离mounted(){this.$nextTick(()=>{setTimeout(()=>{lettargetbox=......
  • better-scroll在终端触屏上滑动失效(vue)
    this.$nextTick(()=>{this.scroll=newBScroll(this.$refs.scroll,{scrollX:true,click:true,disableMouse:false,//启用鼠标拖动disableTouch:false//启用......