移动端App自动化之触屏操作自动化

工作中我们经常需要对应用的页面进行手势操作,比如滑动、长按、拖动等,AppiumDriver 为我们提供一个模拟手势操作的辅助类
TouchAction,可以通过它对手机屏幕进行手势操作。

具体用法参见链接:chromedriver下载地址与webview自动化关键代码 1

导入TouchAction

from appium.webdriver.common.touch_action import TouchAction

常用的手势操作

TouchAction 提供的常用的手势操作有如下操作:

  • Press 按下
  • release 释放
  • move_to 移动
  • tap 点击
  • longPress 长按
  • wait 等待
  • cancel 取消
  • perform 执行

press

**
**

TouchAction 提供的 press( ) 方法可以实现对元素或者坐标的按下操作。通常会结合 release( )
方法实现对某个元素的点击(包括按下和抬起两个动作)。

在某个控件上执行 press 操作,用法如下:

press(WebElement el)

在坐标为(x,y)的点执行 press 操作,用法如下:

press(int x, int y)

release

**
**

释放操作,可以结合其它的事件使用。代表该系列动作的一个结束标志。在某个控件上执行释放操作,用法如下:

release(WebElement el)

也可以在上一个操作结束之后执行 release,不添加任何参数,用法如下:

release()

move_to

**
**

以控件为目标,从一个点移动到该目标上,用法如下:

move_to(WebElement el)

以(x,y)点为目标,从一个点移动到该目标,用法如下:

move_to(WebElement el, int x, int y)

tap

**
**

在某个控件的中心点上点击一下,用法如下:

tap(WebElement el)

以(x,y)坐标点为目标点击,用法如下:

tap(int x, int y)

以控件 el 的左上角为基准,沿着 x 轴向右移动 x 单位,沿着 y 轴向下移动 y 单位。在该点上点击,用法如下:

tap(WebElement el, int x, int y)

longpress

**
**

长按某一控件,用法如下:

long_press(WebElement el)

以(x,y)点为目标实现长按,用法如下:

long_press(int x, int y)

在控件的左上角的 x 坐标偏移 x 单位,y 左边偏移 y 单位的坐标上长按。用法如下:

long_press(WebElement el, int x, int y)

wait

**
**

等待,单位为毫秒。可以在操作事件的过程中,短暂的停留几秒再继续操作。用法如下:

wait(long timeout)

cancel

**
**

可以取消执行事件链中的事件,用法如下:

cancel()

perform

**
**

执行事件链中的事件,一般最后会调用这个方法,顺序执行事件链中的动作。用法如下:

perform()

案例

打开测试应用,从元素 “Views” 文本滑动到 “Accessibility” 元素,创建一个测试文件
test_touchaction.py,代码如下:

测试 app 官方下载地址:appium/sample-code/apps at master · appium/appium · GitHub

#!/usr/bin/env python# -*- coding: utf-8 -*-from appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction  
class TestTouchAction():    def setup(self):        caps = {}        caps['platformName'] = 'Android'        caps['platformVersion'] = '6.0'        caps['deviceName'] = 'emulator-5554'        caps['appPackage'] = 'io.appium.android.apis'        caps['appActivity'] = 'io.appium.android.apis.ApiDemos'        self.driver = webdriver.Remote(\        "http://127.0.0.1:4723/wd/hub", caps)        self.driver.implicitly_wait(5)  def teardown(self):        self.driver.quit()  def test_touchaction_unlock(self):        # 点击 Views        el1 = self.driver.find_element_by_accessibility_id(            "Views")        # 点击 Accessibility        el2 = self.driver.find_element_by_accessibility_id(            "Accessibility")        # TouchAction 滑动操作        action = TouchAction(self.driver)        action.press(el1).wait(100).move_to\        (el2).wait(100).release().perform()

上面代码可以看出,首先定位两个元素 el1 与 el2 ,分别作为滑动过程中起点元素和终点元素,将我们滑动的起点元素与终点元素找到之后,创建一个
TouchAction 对象,调用里面的 press( ) 方法实现起点元素的点击,使用 wait( ) 方法在事件之间添加等待,使用 move_to( )
方法完成手势的移动操作,然后调用 release( ) 方法来完成手势的抬起,最后调用 perform( ) 方法对添加到 TouchAction
中的事件链顺序执行。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/259883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

docker (七)-部署容器

实战开始: 1 docker 部署 kafka 集群,并验证 参考 Docker搭建Kafka集群 优秀文档 2 docker 部署 mysql 参考上一篇docker(六) 3.docker 部署 zabbix 参考 docker部署zabbix 优秀文档 BUG:根据这篇文章部署后,发现zabbix-s…

春节专题|产业7问:区块链厂商的现在和未来——混合技术厂商

2023转瞬即逝,不同于加密领域沉寂一整年后在年末集中爆发,对于我国的区块链厂商而言,稳中求胜才是关键词,在平稳发展的基调下,产业洗牌也悄无声息的到来。 从产业总体而言,在经过了接近3年的快速发展后&…

MySQL-锁(LOCK)

文章目录 1. 锁是什么?2. 全局锁2.1 相关语法2.2 特点 3. 表级锁3.1 表锁3.1.1 共享读锁(S)3.1.2 排它写锁(X) 3.2 元数据锁(MDL)3.2 意向锁(IS、IX) 4. 行级锁4.1 行锁 …

基于SpringBoot的药品管理系统

基于SpringBoot的药品管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 药品详情 个人中心 员工界面 管理员界面 摘要 随着医疗技术的不断发展和人们健…

鸿蒙应用模型开发-更新SDK后报错解决

更新SDK后提示 “ohos.application.Ability”/“ohos.application.AbilityStage”等模块找不到或者无相关类型声明 问题现象 更新SDK后报错“Cannot find module ‘ohos.application.AbilityStage’ or its corresponding type declarations”,“Cannot find modu…

有什么办法解决SQL注入问题

随着互联网的普及和数字化进程的加速,Web攻击已经成为网络安全领域的一大威胁。Web攻击不仅可能导致个人隐私泄露、财产损失,还可能对企业和国家的安全造成严重影响。下面德迅云安全就分享一种常见的web攻击方式-SQL注入,了解下什么是SQL注入…

五分钟快速了解软件测试是干什么的

软件测试是互联网技术中一门重要的学科,它是软件生命周期中不可或缺的一个环节,担负着把控、监督软件的质量的重任。 目前,软件测试工程师缺口达30万,其中在我国大中型发达城市的人才需求就突破20万,并以每年20%的速度…

使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换(Fourier Transform)是一种将一个函数(在时间或空间域)转换为另一个函数(在频率域)的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。 实现过程 将傅里叶系数核心的1%保留&…

Gin框架: HTML模板渲染之配置与语法详解

Gin的HTML模板配置 1 &#xff09;单一目录的配置 配置模板目录&#xff0c;在与main.go同级下, 新建目录&#xff0c;下面二选一&#xff0c;仅作举例, 这里选择 tpls templatestpls 在 tpls 目录下新建 news.html <!-- 最简单的 --> <h1>News Page</h1>&l…

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

17-k8s控制器资源-job控制

job控制器&#xff1a;就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never 1&#xff0c;job控制器案例描述 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b; 事件&#xff1a;计算π的值&a…

请你设计一个抢手机F码的排队的场景,并且需要显示等待时间

package com.example.demo1.service.impl;import lombok.Data;import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.Date;Data public class User {//用户idprivate Integer id;//姓名private String name;//插入的时间private LocalDate…

php数组运算符 比较 isset、is_null、empty的用法和区别

php数组运算符 1. 数组运算符2. 判断两个数组是否相等3. isset、is_null、empty的用法和区别 1. 数组运算符 注意&#xff1a;只会保留第一个数组中的键值对&#xff0c;而忽略后面数组中相同键名的元素&#xff0c;如果想要合并两个数组并覆盖相同键名的元素&#xff0c;可以…

搜维尔科技:分析OptiTrack光学动作捕捉应用领域!

虚拟制作 当今虚拟制作阶段低延迟、超精确摄像机跟踪的事实上的标准。 用于运动科学的 OptiTrack OptiTrack 系统提供世界领先的测量精度和简单易用的工作流程&#xff0c;为研究人员和生物力学师的研究提供理想的 3D 跟踪数据。对所有主要数字测力台、EMG 和模拟设备的本机即…

广州游戏业:低调内敛 务实创新

广州游戏业&#xff1a;低调内敛 务实创新 中国游戏产业发展迅猛&#xff0c;不同城市因地制宜&#xff0c;各具特色。本篇我们的视角转到历史悠久的广州&#xff0c;看看这座百年老城的游戏业正在以怎样的姿态前行。 广州在中国游戏产业中有其独特地位——作为游戏产业发源地…

[计算机网络]---Https协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、https协…

【EI会议征稿通知】第五届信息科学与并行、分布式处理国际学术会议(ISPDS 2024)

第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2024&#xff09; 2024 5th International Conference on Information Science, Parallel and Distributed Systems 第五届信息科学与并行、分布式处理国际学术会议&#xff08;ISPDS 2024&#xff09;定于20…

八、计算机视觉-边界填充

文章目录 前言一、原理二、具体的实现 前言 在Python中使用OpenCV进行边界填充&#xff08;也称为zero padding&#xff09;是一种常见的图像处理操作&#xff0c;通常用于在图像周围添加额外的像素以便进行卷积或其他操作。下面是使用OpenCV进行边界填充的基本原理和方法 一…

纯净住宅代理有何优势?为什么要用它?

随着互联网的快速发展&#xff0c;代理服务器已经成为许多在线活动的关键组成部分&#xff0c;从数据挖掘到网络安全。然而&#xff0c;随着技术的不断发展&#xff0c;住宅IP代理正崭露头角&#xff0c;因其在保障隐私、提升性能和应对封锁方面的卓越优势而备受瞩目。本文将深…