全网最新最牛的Appium自动化:Appium常用操作之TouchAction操作

TouchAction操作

  Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。

TouchAction类支持的动作很多;常用操作如下:

1、press(self,el=None,x=None,y=None):  按压一个元素或坐标,el为要点击的元素,x/y为坐标
2、long_press(self,el=None,x=None,y=None,duration=1000):  长按压一个元素或坐标,默认长按时间1000ms
3、tap(self,element=None,x=None,y=None,count=1):  对一个元素或控件执行点击操作
4、move_to(self,el=None,x=None,y=None):  将指针从上一个点移动到指定的元素或点
5、wait(self,ms=0):  等待时间,单位毫秒
6、release(self):  释放,结束屏幕上的一系列动作的命令操作
7、perform(self):  执行,将待执行的操作发送到服务器的命令操作

利用TouchAction类实现操作如下:

一、利用TouchAction类实现点击操作

导入 from appium.webdriver.common.touch_action import TouchAction

代码示例:

from appium import webdriver  # 导入appium 驱动包
from appium.webdriver.webdriver import By   # 导入appium 定位的方法包
from appium.webdriver.common.touch_action import TouchAction  # 导入appium的TouchAction类
des = {
   'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.android.settings',    # 填写被测app包名
    'appActivity':'.Settings',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':30        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

el = driver.find_element(By.XPATH,'//android.widget.TextView[@text="显示"]')
# el.click()

# 通过TouchAction类实现点击操作
TouchAction(driver).press(el).release().perform()  # 链条指令  点击操作(同click效果一样)

二、长按操作:

TouchAction(driver).long_press(el,None,None,10000).perform()

代码示例:

# 长按 el元素 3秒
TouchAction(driver).long_press(el=el,duration=3000).perform()

注:long_press  有个bug:把元素作为参数,会把该元素的bounds(该属性可以在ispector工具中查看)属性,相加 /2,得到x,y坐标,但是x和y坐标可能出现小数情况;因为坐标只能是整数,所以会导致报错;

解决方案:

直接使用 long_press 的坐标进行操作;通过元素的x,y坐标的 bounds 属性,把元素坐标的 x相加 除以2 再把 y相加 除以2,如果有小数,就四舍五入

bounds 属性值为元素的左上角坐标和右下角坐标;如下图:

三、手势轨迹操作:

TouchAction(driver).press(x=211,y=660).wait(100).move_to(x=325,y=0).wait(100).move_to(x=0,y=325).move_to(x=0,y=325).release().perform()

备注:坐标采用相对值,非绝对坐标值

代码示例:通过点击并移动实现图案的手势操作

import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.webdriver import By
des = {
    'automationName':'appium',
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.android.settings',    # 填写被测app包名
    'appActivity':'.Settings',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':30        # 30秒没发送新命令就断开连接
       }


driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

driver.swipe(220,1872,220,1027,5000)  # 从坐标1移动到坐标2 时间为5秒
time.sleep(2)
# 点击 安全 按钮
el_01 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="安全"]')
touch_action = TouchAction(driver)
touch_action.press(el_01).release().perform()
time.sleep(2)
# 点击 屏幕锁定方式 按钮
el_02 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="屏幕锁定方式"]')
touch_action.press(el_02).release().perform()
time.sleep(2)
# 点击 图案 按钮
el_03 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="图案"]')
touch_action.press(el_03).release().perform()
# 执行手势操作  图案坐标 190 705 / 564 708 / 565 1085 / 562 1457 / 937 1455 / 935 1085
touch_action = (touch_action.press(x=190,y=705).wait(1000).move_to(x=564,y=708)
                .wait(1000).move_to(x=565,y=1085).wait(1000).move_to(x=562,y=1457)
                .wait(1000).move_to(x=937,y=1455).wait(1000).move_to(x=935, y=1085)
                .release().perform())

效果如下:

 

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’

解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’ 文章目录 解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景…

深度学习TensorFlow2基础知识学习前半部分

目录 测试TensorFlow是否支持GPU: 自动求导: 数据预处理 之 统一数组维度 定义变量和常量 训练模型的时候设备变量的设置 生成随机数据 交叉熵损失CE和均方误差函数MSE 全连接Dense层 维度变换reshape 增加或减小维度 数组合并 广播机制&#…

MYSQL8用户权限配置详解

单位的系统性能问题需要把Mysql5升级到Mysql8,需要用到Mysql8的一些特性来提升系统的性能。 配置用户权限过程中发现一些问题,学习并记录一下。 目录 一、环境 二、MySQL8 用户权限 2.1 账号管理权限 2.1.1 连接数据库 2.1.2 账号权限配置 2.2 密码…

从开发到测试,你需要掌握哪些必备测试技能?

一、为什么从开发转测试 我从2019年5月开始从一名java开发女程序猿正式转为测试开发工程师,原因除了机缘凑巧之外,当然是因为这个行业对测试工程师的要求已经越来越高,简单做些UI脚本录制和回放的自动化,参考度娘写出框架demo却不…

二叉树求叶子节点

以这个图展示叶子节点的求取 项目结构 项目代码截图&#xff1a;使用递归的方式求取二叉树的叶子节点&#xff08;递归指的是函数自己调用自己的过程&#xff09; 具体代码展示 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #includ…

全网最新最全的Appium自动化:Appium常用操作之等待操作

等待机制&#xff1a; 为了保证脚本的稳定性&#xff0c;有时候需要引入等待时间&#xff0c;等待页面加载元素后再进行操作&#xff0c;主要有三种等待时间设置方式。 方式一&#xff1a; sleep()&#xff1a;固定等待时间设置&#xff0c;python的time包里提供了休眠方法sle…

Clion自定义管理和配置软件构建过程的工具(代替CMake)构建程序

在公司由于需要x86环境和其他arm环境&#xff0c;同时需要使用公司自定义的mine_x86或者mine_orin对代码进行编译。 编译命令如下mine_x86 build -Dlocal1 -j8,为使用Clion对程序进行调试&#xff0c;需要对程序进行设置。方便调试代码时能够断点查看变量。尝试了很多次&#…

什么是网络爬虫?有什么用?怎么爬?

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 【导读】 网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。 在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低…

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …

temu最近数据:拼多多旗下跨境电商平台的业绩持续增长

据最近的报道和数据显示&#xff0c;拼多多旗下的跨境电商平台Temu在2023年第三季度取得了显著的业绩增长。销售额突破50亿美元&#xff0c;市场份额不断扩大&#xff0c;用户数量迅速增长。本文将深入探讨Temu的业绩增长、市场份额、用户增长以及其营销策略。 先给大家推荐一款…

批量给文件名加相同后缀的两个方法

如何批量给文件名加相同后缀&#xff1f;文件处理是每个上班族需要面对的工作&#xff0c;并且文件处理能力的高低也体现了我们工作能力的高低&#xff0c;文件处理中就包含文件名称的修改&#xff0c;修改文件名是非常简单的&#xff0c;通过点击软件重命名就可以进行操作&…

应用案例 | 基于三维视觉的汽车零件自动化拧紧解决方案

​Part.1 引言 随着人们生活水平的提高&#xff0c;汽车作为理想的代步工具&#xff0c;逐渐成为人们生活中不可或缺的一部分。汽车的广泛应用&#xff0c;大大增加了汽车制造业的负荷。因此&#xff0c;如何提高生产效率和汽车性能&#xff0c;成为汽车制造业的首要关注话题。…

AI之火是如何燎原的?始于马斯克与佩奇的一场激辩

丨划重点 ①在2015年, 马斯克44岁生日派对上&#xff0c;他与谷歌联合创始人佩奇曾就AI产生严重分歧&#xff0c;甚至终结了十多年的友谊。佩奇认为人类最终将与AI机器融合&#xff0c;将会有许多种智能争夺资源, 马斯克则担心机器可能会毁灭人类。 ②在收购AI创企DeepMind时…

智慧电力在线监测系统

智慧电力在线监测系统是一种基于物联网、云计算、大数据和人工智能等技术的智能化监控系统&#xff0c;用于实时监测电力设备的运行状态和电能质量&#xff0c;及时发现和处理电力系统中存在的问题&#xff0c;提高电力系统的安全性和可靠性。依托电易云-智慧电力物联网&#x…

Linux系统编程:并发与信号总结

并发 并发是指两个或多个同时独立进行的活动。在计算机系统中&#xff0c;并发指的是同一个系统中多个独立活动同时进行&#xff0c;而非依次进行。 并发在计算机系统中的表现&#xff1a; 一个时间段中有几个程序都处于已启动运行到运行完毕之间&#xff0c;且这几个程序都是…

spring boot 2 升级到 spring boot 3 后文件上传失败

背景 项目需要&#xff0c;要求升级 spring boot 2.7 到 spring boot 3.2&#xff0c;升级过程中发现很多不兼容问题&#xff0c;下面说明文件上传失败的解决方案。 问题 spring boot 2 中不需要额外的配置&#xff0c;直接在 Controller 中配置 MultipartFile 接收页面传的…

创建 Python Docker 镜像的完整指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python和Docker是两个极其流行的技术&#xff0c;结合它们可以创建强大的应用程序。Docker允许将应用程序及其依赖项打包到一个独立的容器中&#xff0c;而Python则提供了丰富的库和工具来开发应用程序。本文将提…

C++ 12.5作业

以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&…

国产接口测试工具APIpost

说实话&#xff0c;了解APIpost是因为&#xff0c;我的所有接口相关的文章下&#xff0c;都有该APIpost水军的评论&#xff0c;无非就是APIpost是中文版的postman&#xff0c;有多么多么好用&#xff0c;虽然咱也还不是什么啥网红&#xff0c;但是不知会一声就乱在评论区打广告…

docker 手工redis7.x cluster

IP端口192.168.0.816379/6380192.168.0.826379/6380192.168.0.1146379/6380 mdkir /data/{6379,6380}cat <<END> /data/6379.conf # 端口号 port 6379# 设置客户端连接后进行任何其他指定前需要使用的密码 #requirepass 123456 ## 当master服务设置了密码保护时(用re…