技术分享 | 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 官方下载地址:https://github.com/appium/appium/tree/master/sample-code/apps

#!/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.mzph.cn/news/136792.shtml

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

相关文章

CentOS Linux 系统镜像

CentOS Linux具有以下特点&#xff1a; 稳定性&#xff1a;CentOS Linux旨在提供一个稳定、可靠的服务器环境&#xff0c;适合用于关键业务应用和生产环境。高效性&#xff1a;CentOS Linux经过优化和调整&#xff0c;可以充分发挥硬件的性能&#xff0c;提高系统的整体效率。…

Rust和isahc库编写代码示例

Rust和isahc库编写的图像爬虫程序的代码&#xff1a; rust use isahc::{Client, Response}; fn main() { let client Client::new() .with_proxy("") .finish(); let url ""; let response client.get(url) .send() …

无线测温系统在电厂的必要性,保障电力系统稳定运行

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;采集关键电力设备接电的实时温度&#xff0c;克服有线温度监测系统存在的诸如线路多&#xff0c;布线复杂&#xff0c;维护困难等不足&#xff0c;将无线无源传感器与Zigbee无线通信技术相结合&#xff0c;将物联网技…

关于VUE启动内存溢出

安装node v10.14.2 后 启动公司的VUE项目 使用命令npm run dev 命令 报错&#xff1a; <--- Last few GCs --->[20940:00000244699848E0] 215872 ms: Scavenge 1690.2 (1836.4) -> 1679.6 (1836.4) MB, 5.4 / 0.7 ms (average mu 0.266, current mu 0.253) a…

jQuery中淡入与淡出

在我们jQuery中为我们封装了很多好玩的方法&#xff0c;我为大家介绍一下淡入与淡出&#xff01; 我们需要配合事件来玩淡入淡出 淡出语法&#xff1a;fadeOut([speed,[easing],[fn]) (1)参数都可以省略 (2)speed:三种预定速度之一的字符串(“slow”“normal”or “fast”)或…

阿里云 :推出通义大模型编码助手产品【通义灵码】

本心、输入输出、结果 文章目录 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】前言通义灵码简介主要功能主要功能点 支持的语言和 IDEjetbrains IDEA 安装计费相关弘扬爱国精神 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】 编辑&#xff1a;简简…

ARMday2(环境创建+工程配置+创建文件+单步调试)

目录 一、汇编环境的创建 二、为工程配置链接脚本&#xff08;map.lds&#xff09; 三、为工程创建汇编文件 start.s 编程调试 接下来我们需要建立一个 start.s 汇编文件添加到我们的工程中去 四、对汇编代码进行单步调试&#xff08;仿真&#xff09; 五、汇编工程的编译 …

Node.js中的文件系统(file system)模块

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

记录:Unity脚本的编写5.0

目录 前言创建动画Unity Animation、Animator常用类关于两者的区别Animator 编写脚本 大型连续剧之在untiy中&#xff08;或者别的什么活动&#xff09; 前言 之前在场景中添加了背景音乐&#xff0c;而在我们的日常的体验中&#xff0c;可以发现游戏或者场景中有很多有趣的动…

java通过FTP跨服务器动态监听读取指定目录下文件数据

背景&#xff1a; 1、文件数据在A服务器&#xff08;windows&#xff09;&#xff08;不定期在指定目录下生成&#xff09;&#xff0c;项目应用部署在B服务器&#xff08;Linux&#xff09;&#xff1b; 2、项目应用在B服务器&#xff0c;监听A服务器指定目录&#xff0c;有新…

网络安全之CSRF漏洞原理和实战,以及CSRF漏洞防护方法

一、引言 总体来说CSRF属于一种欺骗行为&#xff0c;是一种针对网站的恶意利用&#xff0c;尽管听起来像跨站脚本&#xff08;XSS&#xff09;&#xff0c;但是与XSS非常不同&#xff0c;并且攻击方式几乎向佐。XSS利用站点内的信任用户&#xff0c;而CSRF则通过伪装来自受信任…

【Linux】补充:进程管理之手动控制进程,以及计划任务

目录 一、手动启动进程 1、理解前台启动与后台启动 2、如何完成前台启动后台启动的切换 3、完成并行执行多个任务 4、结束进程 1、kill 2、killall 2、pkill 二、计划任务 1、at一次性计划任务 2、实操 2、周期性计划任务 1、关于设置周期性任务的配置文件以及格式…

MySQL数据库的表操作

1.创建表 1.1一般格式 create table table_name( Field1 datatype, Field2 datatype, Field3 datatype ) charset 字符集名 collate 校验规则 engine 存储引擎; 解释&#xff1a; Field &#xff1a; 表示列名datatype&#xff1a; 表示列的类型 charset 字符集&#xff1a;…

EOCR-3E420,3EZ,3DE电机保护器与变频器配合使用的方法

上海韩施电气自动化设备有限公司提供 在工业现场中&#xff0c;电动机的起动与运行很多时候需要变频器参与其中&#xff0c;以达到降低电机维护成本、增加电机寿命的目的。采用变频器运转时&#xff0c;随着电机的加速相应提高频率和电压&#xff0c;起动电流被限制在 150%额定…

小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染

请求地址&#xff1a;geecg-uniapp 同源策略 数据请求 获取后台数据 ui库安装 冲突解决&#xff08;3&#xff09;-CSDN博客 一.uniapp转小程序 (1) 运行微信开发工具 &#xff08;2&#xff09; 配置id 然后运行 打开小程序 路径 E:\通\uniapp-jeecg\unpackage\dist\d…

linux之进程控制

进程创建&fork函数 fork函数之前就已经提到,它从已存在进程中创建一个新进程,新进程为子进程,而原进程为父进程。 调用接口&#xff1a;fork() 头文件&#xff1a;unistd.h 功能&#xff1a;创建一个子进程&#xff0c;给子进程返回0&#xff0c;父进程返回子进程pid …

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程

播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;…

【计算机网络笔记】网络层服务模型——数据报网络

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

掌动智能:UI自动化测试工具的五大功能

在现代软件开发中&#xff0c;保证应用程序的质量和性能至关重要。UI自动化测试工具是一种关键的资源&#xff0c;它们能够有效地检查应用程序的用户界面&#xff0c;确保它们在各种情况下都能正常运行。本文将探讨UI自动化测试工具的功能有哪些! UI自动化测试工具的五大功能&a…

性价比高的照明品牌,五款经济实惠的照明品牌推荐

很多家长有时候会说孩子觉得家里的台灯灯光刺眼&#xff0c;看书看久了就不舒服。这不仅要看光线亮度是否柔和&#xff0c;还要考虑台灯是不是有做遮光式设计。没有遮光式设计的台灯&#xff0c;光源外露&#xff0c;灯光会直射孩子头部&#xff0c;孩子视线较低&#xff0c;很…