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

文章目录

  • 一、滑动操控
    • 二、如何获取设备屏幕坐标系
      • 三、模拟实现一个简单的滑动操作
        • 四、将 “滑动操控” 改为公共的方法

一、滑动操控

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)
Python学习资源分享群:748989764
# 获取屏幕宽度
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()

四、将 “滑动操控” 改为公共的方法

代码示例如下:

# 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)
    Python学习资源分享群:748989764

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()
   Python学习资源分享群:748989764

其实滑动在实际操作中应用的场景还是不少的,就比如要定位的元素在页面下方必须要通过滑动才能往下滑将其展示出来;再比如解锁密码、或者滑动九宫格之类的场景… 类似的滑动场景,大家可以在真实的场景中逐步的去体验。

到此,一个很简单的基于 “百度App” 实现的 demo 就到此结束了。但是该 demo 仅仅是基于实现,没有像之前的 WEB 框架那样去同意做处理、去进行 PO 模式的编写。

你可能感兴趣的:(编程,python,学习技巧,python,开发语言)