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 模式的编写。

到此这篇关于Python利用appium实现模拟手机滑动操控的操作的文章就介绍到这了,更多相关Python appium手机滑动操控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python爬虫之Appium爬取手机App数据及模拟用户手势

    目录 Appium 模拟操作 屏幕滑动 屏幕点击 屏幕拖动 屏幕拖拽 文本输入 动作链 实战:爬取微博首页信息 Appium 在前文的讲解中,我们学会了如何安装Appium,以及一些基础获取App元素内容的方式.但认真看过前文的读者,肯定在博主获取元素的时候观察到了一个现象. 那就是手机App的内容并不是一次性加载出来的,比如大多数Android手机列表ListView,都是异步加载,也就是你滑动到那个位置,它才会显示出它的内容. 也就是说,我们前面爬取微博首页全部信息的时候,如果你不滑动先加载

  • Appium中scroll和drag_and_drop根据元素位置滑动

    目录 背景 scroll 介绍 说明 参数: 操作场景 关键代码实现 说明 drag_and_drop 介绍 说明 操作场景 关键代码实现 滑动和拖拽使用场景选择 背景 我们在操作APP应用时,有些需要从一个元素滑动到另外一个元素时,这时候我们无法确定坐标,所以swipe 根据坐标滑动方式就无法使用了,如下图:从 课堂直播 上滑到 直播公开课 位置 这时候我们就需要使用其他滑动方式,我们想到可以根据元素进行滑动,Appium 里面根据元素来进行滑动的方式主要方法为 scroll 和 drag_a

  • Python与Appium实现手机APP自动化测试的示例代码

    目录 1.什么是Appium 2.启动一个app自动化程序的步骤 3.appium服务介绍 4. appium客户端使用 5.adb的使用 6.Appium启动过程分析 1.什么是Appium appium是一个开源的测试自动化框架,可以与原生的.混合的和移动的web应用程序一直使用.它使用WebDriver协议驱动IOS(内置的测试引擎xcuitest).Android(uiautomator2,Espresso)和Windows应用程序 原生应用程序:安卓程序是用JAVA或kotlin开发出

  • python利用appium实现手机APP自动化的示例

    写这个东西也是自己喜欢研究些自动化的东西,以下全是自己的经验所得,由于开源的软件对于各版本以及操作系统要求很高,会经常碰到一些不兼容的问题,这个都属于正常的,换版本就对了. 如果你感觉学不会?莫慌,小编推荐大家加入群, 前面548中间377后面875,群里有志同道合的小伙伴, 互帮互助,还可以拿到许多视频教程! 本人的环境搭建都是在win10 64位上搭建的 1.环境准备 1.jdk1.8.0 (64位) 2.android-sdk_r24.4.1-windows 3.python:2.7(3.

  • 详解使用python爬取抖音app视频(appium可以操控手机)

    记录一下如何用python爬取app数据,本文以爬取抖音视频app为例. 编程工具:pycharm app抓包工具:mitmproxy app自动化工具:appium 运行环境:windows10 思路: 假设已经配置好我们所需要的工具 1.使用mitmproxy对手机app抓包获取我们想要的内容 2.利用appium自动化测试工具,驱动app模拟人的动作(滑动.点击等) 3.将1和2相结合达到自动化爬虫的效果 一.mitmproxy/mitmdump抓包 确保已经安装好了mitmproxy,并

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

    目录 滑动操控 如何获取设备屏幕坐标系 模拟实现一个简单的滑动操作 将 “滑动操控” 改为公共的方法 其实在前面两个章节的元素定位的场景,我们已经对 app 中的自动化操作已经略知一二.这里我们发现, 实际上 appium 复用了 selenium 的很多很多的操作方式,所以像一些 “点击.输入” 等操作,这种常规的操作的方式与在 WEB 自动化中的方式基本上是完全一致的,就不再进行赘述了. 唯一一个与 WEB 端不太一样的地方就是关于 “滑动操控” ,所以 “页面的滑动” 在实际操作手机过程中

  • python利用Appium实现自动控制移动设备并提取数据功能

    目录 1. 安装appium-python-client模块并启动已安装好的环境 1.1 安装appium-python-client模块 1.2 启动夜神模拟器 1.3 启动appium-desktop 1.4 利用上一小节所学习的内容获取Desired Capabilities参数 2. 初始化以及获取移动设备分辨率 3. 定位元素以及提取文本的方法 3.1 点击appium desktop右上角的放大镜图标 3.2 定位界面的使用方法如下图所示 3.3 点击短视频的作者名字,查看并获取该元

  • python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法

    首先在火狐浏览器上登录知乎,然后使用火狐浏览器插件 Httpfox 获取 GET 请求的Cookie,这里注意使用状态值为 200(获取成功)的某次GET. 将 Cookies 复制出来,注意这一行非常长,不要人为添加换行符.而且 Cookie 中使用了双引号,最后复制到代码里使用单引号包起来. 使用下边代码检验是否是模拟了登录的用户的请求: import requests import re headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT

  • python利用requests库模拟post请求时json的使用教程

    我们都见识过requests库在静态网页的爬取上展现的威力,我们日常见得最多的为get和post请求,他们最大的区别在于安全性上: 1.GET是通过URL方式请求,可以直接看到,明文传输. 2.POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的. 3.GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中. 两者用法上也有显著差异(援引自知乎): 1.GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等).动态数据展示(列表

  • Python中Selenium模拟JQuery滑动解锁实例

    本文介绍了Python中Selenium模拟JQuery滑动解锁实例,分享给大家,也给自己留个笔记 滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. 当我手动点击滑块时,改变的只是样式: 1.slide-to-unlock-handle 表示滑块,滑块的左边距在变大(因为它在向右移动嘛!) 2.Slide-tounlock-progress 表示滑过之后的背景黄色,黄色的宽度在增加,因为滑动经过的地方都变黄了. 除些

  • python 利用栈和队列模拟递归的过程

    一.递归 递归调用:一个函数,调用的自身,称为递归调用 递归函数:一个可以调用自身的函数称为递归函数 凡是循环能干的事,递归都能干 方法: 1.写出临界条件 2.找这一次和上一次的关系 3.假设当前函数已经能用,调用自身计算上一次的结果再求出本次的结果 下面我们通过两段代码简单看一下递归和非递归的区别: 输入一个大于等于1的数,求1到n的和! # 普通函数方法 def hanshu(n): sum = 0 # 循环遍历每一个数字,将他们加到一个事先定义好的变量上,直到加完 for x in ra

  • Python利用蒙特卡罗模拟期权定价

    目录 期权,及其价值 风险中性估值 模拟资产价格 期权定价 为真实期权定价 完整的模拟 期权是一种合约,它赋予买方在未来某个时间点以特定价格买卖资产的权利. 这些被称为衍生品的合约的交易有多种原因,但一种常见的用法是来对冲当资产价格以不利方式变动,所产生的风险敞口. 期权,即买入或卖出的权利,也是有价格的. Black Scholes 模型描述了一种确定期权公平价格的方法,但还有许多其他方法可以确定价格. 期权,及其价值 欧式期权只有在未来达到预定日期(称为到期日)后才能使用(或行使),可以用字

随机推荐