技术分享 | app自动化测试(Android)--触屏操作自动化

导入TouchAction

  • Python 版本

from appium.webdriver.common.touch_action import TouchAction

  • Java 版本

import io.appium.java_client.TouchAction;

常用的手势操作

press 按下

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

  • press 按下

  • release 释放

  • move_to/moveTo 移动

  • tap 点击

  • long_press/longPress 长按

  • wait 等待

  • cancel 取消

  • perform 执行

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

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

  • Python 版本

按下某个元素,用法如下:

press(WebElement el)

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

press(int x, int y)

  • Java 版本

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

press(int x, int y)

release 释放

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

  • Python 版本

release(WebElement el)

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

release()

  • Java 版本

release()

移动

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

  • Python 版本

move_to(WebElement el)

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

move_to(WebElement el, int x, int y)

  • Java 版本

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

moveTo(WebElement el, int x, int y)

tap 点击

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

  • Python 版本

tap(WebElement el)

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

tap(WebElement el, int x, int y)

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

tap(int x, int y)

  • Java版本

只提供坐标点击,用法如下:

tap(int x, int y)

长按

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

  • Python 版本

long_press(WebElement el)

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

long_press(int x, int y)

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

long_press(WebElement el, int x, int y)

  • Java 版本

只提供坐标点击,用法如下:

longPress(int x, int y)

等待

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

  • Python 版本

wait(long timeout)

  • Java 版本

wait(long timeout)

cancel 取消

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

  • Python 版本

cancel()

  • Java 版本

cancel()

执行 perform

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

  • Python 版本

perform()

  • Java 版本

perform()

案例

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

测试 app 官方下载地址:github.com/appium/appi…

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 测试文件 test_touchaction.py
from appium import webdriver
from appium.webdriver.common.touch_action import TouchActionclass 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):# 点击 Viewsel1 = self.driver.find_element_by_accessibility_id("Views")# 点击 Accessibilityel2 = 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()
public class TouchActionTest {static AppiumDriver driver;@BeforeAllpublic static void beforeAll() throws MalformedURLException {DesiredCapabilities caps = new DesiredCapabilities();caps.setCapability("deviceName", "emulator-5554");caps.setCapability("platformName", "Android");caps.setCapability("appPackage", "io.appium.android.apis");caps.setCapability("appActivity", "io.appium.android.apis.\ApiDemos");URL appiumServer = new URL("http://127.0.0.1:4723/wd/hub");driver = new AndroidDriver(appiumServer, caps);driver.manage().timeouts().implicitlyWait(10, \TimeUnit.SECONDS);}@Testvoid test() {// 创建 TouchAction 对象TouchAction action = new TouchAction<>(driver);// TouchAction 滑动操作action.press(PointOption.point((int) (width * 0.5), \(int) (height * 0.8))).waitAction(WaitOptions.\waitOptions(Duration.ofSeconds(2))).moveTo(\PointOption.point((int) (width * 0.5), \(int) (height * 0.2))).release().perform();}}

以上两段代码实现了相同的操作,创建了一个 TouchAction 对象,调用里面的 press() 方法实现起点元素的点击,使用 wait() 方法在事件之间添加等待,使用 move_to()/moveTo() 方法完成手势的移动操作,然后调用 release() 方法来完成手势的抬起,最后调用 perform() 方法对添加到 TouchAction 中的事件链顺序执行。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

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

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

相关文章

[PHP]ShopXO企业级B2C免费开源商城系统 v2.3.1

ShopXO 企业级B2C免费开源电商系统&#xff01; 求实进取、创新专注、自主研发、国内领先企业级B2C电商系统解决方案。 遵循Apache2开源协议发布&#xff0c;无需授权、可商用、可二次开发、满足99%的电商运营需求。 PCH5、支付宝小程序、微信小程序、百度小程序、头条&抖音…

【JVM系列】- 挖掘·JVM堆内存结构

挖掘JVM堆内存结构 文章目录 挖掘JVM堆内存结构堆的核心概念堆的特点 堆的内存结构内存划分新生代/新生区&#xff08;Young Generation&#xff09;老年代&#xff08;Tenured Generation&#xff09;永久代&#xff08;或元数据区&#xff09;&#xff08;PermGen 或 MetaSpa…

水利部加快推进小型水库除险加固,大坝安全监测是重点

国务院常务会议明确到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 为加快推进小型水库除险加固前期工作&#xff0c;水利部协调财政部提前下达了2023年度中央补助…

数字IC后端实现 |TSMC 12nm 与TSMC 28nm Metal Stack的区别

下图为咱们社区IC后端训练营项目用到的Metal Stack。 芯片Tapeout Review CheckList 数字IC后端零基础入门Innovus学习教程 1P代表一层poly&#xff0c;10M代表有10层metal&#xff0c;M5x表示M2-M6为一倍最小线宽宽度的金属层&#xff0c;2y表示M7-M8为二倍最小线宽宽度的金…

Dockerfile

文章目录 基本概念commit构建镜像常用指令拓展指令ARGUSERONBUILDHEALTHCHECK SpringBoot项目镜像构建 基本概念 Docker为我们提供一个用于自定义构建镜像的一个配置文件。利用docker的build命令&#xff0c;指定dockerfile文件&#xff0c;就能按配置内容把容器构建出来。 可…

react 实现chatGPT的打印机效果 兼容富文本,附git地址

1、方式一 &#xff1a;使用插件 typed.js typed.js 网站地址&#xff0c;点我打开 1.1、核心代码如下&#xff1a; //TypeWriteEffect/index.tsx 组件 import React, { useEffect, useRef } from react; import Typed from typed.js; import { PropsType } from ./index.d;…

[架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法

目录 前言&#xff1a; 一、概述: 软件聚合的程度由简单到复杂 二、主要开发方法详见 2.1 结构化的开发方法 2.2 面对对象的开发方法 2.3 面向服务的开发方法 2.4 面向组件的开发方法 三、不同开发方法比较 3.1 结构化开发方法 3.2 面向对象(OOP)开发方法 3.3 面向服…

java基础练习(使用java实现跨库数据调度ETL)

简介 本文写一篇关于java库与库之间的数据传输&#xff0c;现实生产中可能是通过其他方式完成&#xff0c;在没有架构的基础上使用java实现跨库的数据传送&#xff0c;非常不便利。但是作为练习我觉得确实非常有用&#xff0c;涉及的java知识点相对较多。本文以一个实列讲解&am…

HTTP 协议详解-上(Fiddler 抓包演示)

文章目录 HTTP 协议HTTP 协议的工作过程HTTP 请求 (Request)认识URL关于 URL encode认识 "方法" (method)GET 方法POST 方法其他方法请求 "报头" (header)请求 "正文" (body) HTTP 响应详解状态码响应 "报头" (header) HTTP 协议 HTT…

服务器数据恢复—云服务器mysql数据库表被truncate的数据恢复案例

云服务器数据恢复环境&#xff1a; 阿里云ECS网站服务器&#xff0c;linux操作系统mysql数据库。 云服务器故障&#xff1a; 在执行数据库版本更新测试时&#xff0c;在生产库误执行了本来应该在测试库执行的sql脚本&#xff0c;导致生产库部分表被truncate&#xff0c;还有部…

python 视频硬字幕去除 内嵌字幕去除工具 vsr

项目简介 开源地址&#xff1a;https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术&#xff0c;将视频中的硬字幕去除的软件。 主要实现了以下功能&#xff1a; 无损分辨率将视频中的硬字幕去除&#xff0c;生成去除字幕后…

大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法。 Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均…

25期代码随想录算法训练营第十天 | 栈与队列 part 1

目录 232.用栈实现队列225. 用队列实现栈 232.用栈实现队列 链接 相当于用两个stack将队列的元素顺序颠倒了一遍。 class MyQueue:def __init__(self):self.stack_in []self.stack_out []def push(self, x: int) -> None:self.stack_in.append(x)def pop(self) -> in…

three.js 航拍全景图(+陀螺仪)

右上角陀螺仪也可点击,需要https的环境,手动下载DeviceOrientationControls.js文件 后台包含打点功能 <template><div id"quanjing" style"width: 100vw; height: 100vh; overflow: hidden"><spanid"tip"style"position: ab…

【刷题篇】动态规划(三)

文章目录 1、第 N 个泰波那契数2、三步问题3、使用最小花费爬楼梯4、解码方法5、不同路径6、不同路径 II 1、第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波…

【数学】 4、向量的内积、外积、模长

文章目录 一、向量点乘&#xff08;内积&#xff09;1.1 几何意义1.2 点乘的代数定义&#xff0c;推导几何定义&#xff08;用于求向量夹角&#xff09;1.2.1 余弦定理 1.3 程序计算 二、向量叉乘&#xff08;外积&#xff09;2.1 几何意义 三、通俗理解内积和外积四、向量的模…

【网络编程】传输层——TCP协议

文章目录 TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比 TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TI…

gitlab数据备份和恢复

gitlab数据备份 sudo gitlab-rake gitlab:backup:create备份文件默认存放在/var/opt/gitlab/backups路径下&#xff0c; 生成1697101003_2023_10_12_12.0.3-ee_gitlab_backup.tar 文件 gitlab数据恢复 sudo gitlab-rake gitlab:backup:restore BACKUP1697101003_2023_10_12_…

Texlive安装

下载4.8G的iso文件 解压 或 装载后&#xff0c;以管理员身份运行(.bat)文件。 运行以下两句代码进行Texlive相关升级 tlmgr option repository otan tlmgr update --self --all 运行以下三行代码&#xff0c;检查是否安装成功 latex -v xelatex -v pdflatex -v 如果有异常…

Hundred Finance 攻击事件分析

背景知识 Hundred Finance 是 fork Compound 的一个借贷项目&#xff0c;在2023/04/15遭受了黑客攻击。攻击者在发起攻击交易之前执行了两笔准备交易占据了池子&#xff0c;因为发起攻击的前提是池子处于 empty 的状态&#xff08;发行的 hToken 数量为 0&#xff09;。 准备交…