当前位置: 首页 > news >正文

Monkey结合appium模拟操作特定界面

目录

1. 使用 Monkey 操作特定界面(通过UI标识来限制)

2. 结合 uiautomator 或 appium 定位特定元素

步骤:

3. 使用 Monkey + Appium 控制特定界面点击

4. 如何结合 Appium 与 Monkey 

5. 限制 Monkey 只点击固定界面上的元素

使用 --pct-touch 和 --pct-motion 参数

使用特定的界面标识来触发 Monkey 操作

6. 结合 Monkey 与 UI 元素的状态判断

7. 限制 Monkey 操作的事件


1. 使用 Monkey 操作特定界面(通过UI标识来限制)

虽然Monkey本身是随机操作的,但你可以通过确保某些界面元素的存在或条件来让Monkey操作特定的界面。这需要结合一些前置条件,比如通过其他手段打开特定的界面后再使用 Monkey 进行操作。

2. 结合 uiautomatorappium 定位特定元素

可以用 uiautomatorappium 通过定位界面中的某些标识元素来确保 Monkey 只操作这些元素。然后结合 monkey 强制执行特定操作(例如点击、滑动等)。

步骤:
  1. 通过 uiautomatorappium 定位特定元素
  2. 在特定的界面打开后,运行 Monkey 进行自动点击

3. 使用 Monkey + Appium 控制特定界面点击

假设你已经打开了应用并且知道目标界面上的某个元素的 ID、XPATH、或者其它属性,可以通过 Appium 先定位到特定的界面或按钮,然后再用 Monkey 执行其他操作。

4. 如何结合 Appium 与 Monkey 

你可以使用 Appium 或者 UI Automator 定位到特定的界面元素,再用 Monkey 模拟用户操作。

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction# 设置Appium配置
desired_caps = {"platformName": "Android","platformVersion": "9","deviceName": "emulator-5554","appPackage": "com.example.app","appActivity": "com.example.app.MainActivity","automationName": "UiAutomator2"
}# 启动Appium驱动
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 定位到特定界面的元素
element = driver.find_element_by_xpath('//*[@text="目标元素文本"]')# 执行某些操作,如点击或滑动
element.click()# 使用 Monkey 执行其他随机操作,模拟更多的用户交互
import os
os.system('adb shell monkey -p com.example.app -v 5000')

5. 限制 Monkey 只点击固定界面上的元素

你可以限制 Monkey 的活动通过以下方法:

使用 --pct-touch--pct-motion 参数

Monkey 允许你设置不同的事件比例,--pct-touch 控制点击事件,--pct-motion 控制滑动事件等。你可以通过调整这些比例来让 Monkey 主要关注点击操作。

例如:

adb shell monkey -p com.example.app --pct-touch 70 --pct-motion 10 --throttle 500 -v 1000

这里设置了:

  • --pct-touch 70:70%的操作为点击。
  • --pct-motion 10:10%的操作为滑动。
  • --throttle 500:每次操作之间的间隔为500毫秒。
  • -v 1000:执行1000次操作。
使用特定的界面标识来触发 Monkey 操作

在你希望操作的界面上设置唯一的标识元素(例如某个按钮的文本或ID)。这样,确保在应用达到该界面时再执行 Monkey 操作。

6. 结合 Monkey 与 UI 元素的状态判断

你可以使用一些机制来检查应用界面状态(例如,通过元素是否可见、是否存在等),然后只有在满足这些条件时才启动 Monkey。

例如,在 Python 中可以结合 AppiumWebDriverWait 来判断一个特定的元素是否出现:

from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 设置Appium配置
desired_caps = {"platformName": "Android","platformVersion": "9","deviceName": "emulator-5554","appPackage": "com.example.app","appActivity": "com.example.app.MainActivity","automationName": "UiAutomator2"
}# 启动Appium驱动
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 等待某个特定元素加载(例如,某个按钮)
wait = WebDriverWait(driver, 10)
target_element = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@text="目标元素"]')))# 在元素可见后使用 Monkey 操作
import os
os.system('adb shell monkey -p com.example.app -v 5000')

7. 限制 Monkey 操作的事件

如果你不希望 Monkey 随机触发过多的事件,可以通过参数限制 Monkey 的操作类型。例如:

adb shell monkey -p com.example.app --throttle 500 --pct-touch 80 --pct-motion 10 -v 500

至此大家可以根据各自的需求结合实践能够更好的实践方式进行交流。 

相关文章:

Monkey结合appium模拟操作特定界面

目录 1. 使用 Monkey 操作特定界面(通过UI标识来限制) 2. 结合 uiautomator 或 appium 定位特定元素 步骤: 3. 使用 Monkey Appium 控制特定界面点击 4. 如何结合 Appium 与 Monkey 5. 限制 Monkey 只点击固定界面上的元素 使用 --pc…...

Ubuntu22.04深度学习环境安装【cuda+cudnn】

为了复现一篇深度学习论文,特意安装了Linux系统。前一天已经安装Linux显卡驱动,现在需要安装cuda、cudnn等。 论文代码 论文PDF 确定包版本: 根据论文提供的代码。在requirements.txt中发现cuda版本为11.7,cudnn为8.5.0,python没…...

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签(Tag)时,通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南,帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…...

从零用java实现 小红书 springboot vue uniapp (1)

前言 偶尔会用小红书发一些笔记 闲来无事 想自己实现一个小红书 正好可以学习一下 帖子 留言 im 好友 推送 等功能 下面我们就从零 开发一个小红书 后台依旧用我们的会员系统的脚手架 演示 http://120.26.95.195:8889/ 客户端我们使用uniapp 我们首先对主页进行一个分解 顶部我…...

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置,进而将其写入到本地或者数据库中。 学习Xpath爬虫,我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…...

电脑无法识别usb设备怎么办?电脑无法识别usb解决方法

usb设备是我们常解除的外部操作以及存储设备,它可以方便用户数据传输以及操作输入。但在使用过程中,大家基本都碰到过电脑无法识别usb设备这种情况。这种情况下,我们应该怎么办呢?下面将为你介绍几种可能的原因和解决方法&#xf…...

思特奇政·企数智化产品服务平台正式发布,助力运营商政企数智能力跃迁

数字浪潮下,产业数字化进程加速发展,信息服务迎来更广阔的天地,同时也为运营商政企支撑系统提出了更高要求。12月4日,2024数字科技生态大会期间,思特奇正式发布政企数智化产品服务平台,融合应用大数据、AI等新质生产要素,构建集平台服务、精准营销、全周期运营支撑、智慧大脑于…...

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之前端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目之前端环境搭建 2 前端环境搭建2.1 环境准备2.2 创建Vue3项目2.3 项目搭建准备2.4 安装Element Plus2.5 安装axios2.5.1 配置(创建实例,配置请求,响应拦截器)2.5.2 …...

手写Mybatis框架源码(简写)

pom文件&#xff1a; springboot版本&#xff1a;2.6.5 jdk&#xff1a;8 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…...

Flask返回中文Unicode编码(乱码)解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

最大值和最小值的差

最大值和最小值的差 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M&#xff0c;表示整数个数&#xff0c;整数个数不会大于1…...

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步&#xff0c;开发者们越来越重视提高生产力的特性。对于 Java 开发者来说&#xff0c;能够在不重启…...

探索 Java 中的 Bug 世界

在 Java 编程的旅程中&#xff0c;我们不可避免地会遇到各种 Bug。这些 Bug 可能会导致程序出现意外的行为、崩溃或者性能问题。了解 Java Bug 的类型、产生原因以及解决方法&#xff0c;对于提高我们的编程技能和开发出稳定可靠的应用程序至关重要。 一、Java Bug 的定义与分类…...

SQL面试题——百度SQL面试题 连续签到领金币

百度SQL面试题 连续签到领金币 今天的这个题目来自百度,而且这个题目很常见,是一个大家日常经常遇到的一个场景,几乎无处不在,就是签到送积分,只不过这里是签到领金币 有用户签到记录表,sign,记录用户当天是否完成签到,请计算出每个用户的每个月获得的金币数量; 签到…...

easyExcel单一下拉框和级联下拉框

文章目录&#xff1a; 单一下拉框级联下拉框 具体实现&#xff1a; 单一下拉框 public class BoolWriteHandler implements SheetWriteHandler {private List<String> dropDown;private List<Integer> indexList;public BoolWriteHandler(List<Integer> i…...

linux-安全-iptables防火墙基础笔记

目录 一、 iptables链结构 五链 二、 iptables表结构 四表 三、 匹配流程 四、 语法 五、 匹配 1. 通用匹配 2. 隐含匹配 3. 显示匹配 六、 SNAT 七、 DNAT 八、 规则备份及还原 1. 备份 2. 还原 这篇将讲解iptables防火墙的基础知识 一、 iptables链结构 规则…...

力扣刷题TOP101: 25.BM32合并二叉树

目录&#xff1a; 目的 思路 复杂度 记忆秘诀 python代码 目的&#xff1a; 已知两颗二叉树&#xff0c;将它们合并成一颗二叉树。合并规则是&#xff1a;都存在的结点&#xff0c;就将结点值加起来&#xff0c;否则空的位置就由另一个树的结点来代替。 思路 我们有两棵二…...

R的中文文本处理包--tmcn

文章目录 介绍tmcn 和 jieba 的关系函数&#xff1a;catUTF8toUTF8实例 介绍 tmcn 包是 R 语言中的一个用于处理和分析中文文本的包&#xff0c;特别适用于中文文本的分词、词频统计和文本挖掘等任务。以下是 tmcn 包的基本用法&#xff0c;包括安装、常用函数和示例。 一个用…...

差异基因富集分析(R语言——GOKEGGGSEA)

接着上次的内容&#xff0c;上篇内容给大家分享了基因表达量怎么做分组差异分析&#xff0c;从而获得差异基因集&#xff0c;想了解的可以去看一下&#xff0c;这篇主要给大家分享一下得到显著差异基因集后怎么做一下通路富集。 1.准备差异基因集 我就直接把上次分享的拿到这…...

scrapy对接rabbitmq的时候使用post请求

之前做分布式爬虫的时候,都是从push url来拿到爬虫消费的链接,这里提出一个问题,假如这个请求是post请求的呢,我观察了scrapy-redis的源码,其中spider.py的代码是这样写的 1.scrapy-redis源码分析 def make_request_from_data(self, data):"""Returns a Reques…...

vue+elementUI+transition实现鼠标滑过div展开内容,鼠标划出收起内容,加防抖功能

文章目录 一、场景二、实现代码1.子组件代码结构2.父组件 一、场景 这两天做项目&#xff0c;此产品提出需求 要求详情页的顶部区域要在鼠标划入后展开里面的内容&#xff0c;鼠标划出要收起部分内容&#xff0c;详情底部的内容高度要自适应&#xff0c;我这里运用了鼠标事件t…...

大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件

以下是大模型语料库的构建过程&#xff1a; 一、文档切分语料库构建 数据来源确定&#xff1a; 首先&#xff0c;需要确定语料库的数据来源。这些来源可以是多种多样的&#xff0c;包括但不限于&#xff1a; 网络资源&#xff1a;利用网络爬虫技术从各种网站&#xff08;如新闻…...

阿里云ECS服务器域名解析

阿里云ECS服务器域名解析&#xff0c;以前添加两条A记录类型&#xff0c;主机记录分别为www和&#xff0c;这2条记录都解析到服务器IP地址。 1.进入阿里云域名控制台&#xff0c;找到域名 ->“解析设置”->“添加记录” 2.添加一条记录类型为A,主机记录为www&#xff0c…...

牛客周赛71:A:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 \hspace{15pt}对于给定的两个正整数 nnn 和 kkk &#xff0c;是否能构造出 kkk 对不同的正整数 (x,y)(x,y)(x,y) &#xff0c;使得 xynxynxyn 。 \hspace{15pt}我们认为两对正整数 (…...

查询产品所涉及的表有(product、product_admin_mapping)

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService1. 完整SQL分析可选部分&#xff08;条件筛选&#xff09;&#xff1a; 2. 涉及的表3. 总结4. 功能概述 查询指定管理员下所有产品所涉及的表&#xff1f;…...

算法基础学习Day5(双指针、动态窗口)

文章目录 1.题目2.题目解答1.四数之和题目及题目解析算法学习代码提交 2.长度最小的子数组题目及题目解析滑动窗口的算法学习方法一&#xff1a;单向双指针(暴力解法)方法二&#xff1a;同向双指针(滑动窗口) 代码提交 1.题目 18. 四数之和 - 力扣&#xff08;LeetCode&#x…...

docker 部署 mysql 9.0.1

docker 如何部署 mysql 9 &#xff0c;请看下面步骤&#xff1a; 1. 先看 mysql 官网 先点进去 8 版本的 Reference Manual 。 选择 9.0 版本的。 点到这里来看&#xff0c; 这里有一些基础的安装步骤&#xff0c;可以看一下。 - Basic Steps for MySQL Server Deployment wit…...

关于小标join大表,操作不当会导致笛卡尔积,数据倾斜

以前总是说笛卡尔积&#xff0c;笛卡尔积&#xff0c;没碰到过&#xff0c;今天在跑流程调度时&#xff0c;就碰到笛卡尔积了&#xff0c;本来&#xff0c;就是查询几个编码的信息&#xff0c;然后由于使用的是with tmp as&#xff0c;没使用where in ,所以跑的很慢 现象&#…...

SpringMVC全局异常处理

一、Java中的异常 定义&#xff1a;异常是程序在运行过程中出现的一些错误&#xff0c;使用面向对象思想把这些错误用类来描述&#xff0c;那么一旦产生一个错误&#xff0c;即创建某一个错误的对象&#xff0c;这个对象就是异常对象。 类型&#xff1a; 声明异常&#xff1…...

出海服务器可以用国内云防护吗

随着企业国际化进程的加速&#xff0c;越来越多的企业选择将业务部署到海外服务器上&#xff0c;以便更贴近国际市场。然而&#xff0c;海外服务器也面临着来自全球各地的安全威胁和网络攻击。当出海服务器遭受攻击时&#xff0c;是否可以借助国内的云服务器来进行有效的防护呢…...

wordpress数据库连接文件/广州seo快速排名

1.k8s高可用架构解析 2.基本环境配置 Kubeadm安装方式自1.14版本以后,安装方法几乎没有任何变化,此文档可以尝试安装最新的k8s集群,centos采用的是7.x版本 K8S官网:https://kubernetes.io/docs/setup/ 最新版高可用安装:https://kubernetes.io/docs/setup/production-e…...

门头沟网站建设公司/万能bt搜索引擎网站

流媒体指的是在网络中使用流技术传输的连续时基媒体&#xff0c;其特点是在播放前不需要下载整个文件&#xff0c;而是采用边下载边播放的方式&#xff0c;它是视频会议、IP电话等应用场合的技术基础。RTP是进行实时流媒体传输的标准协议和关键技术&#xff0c;本文介绍如何在L…...

如何在服务器上关闭网站/android优化大师

错误 原因 cookie中不能使用中文名。 错误代码 // 新建名为identity的Cookie Cookie identityCookienew Cookie("identity",identity); 解决 设置编码为UTF-8 正确代码 // 新建名为identity的Cookie Cookie identityCookienew Cookie("identity",UR…...

滁州网站开发/互联网运营推广

知识点1----ALTER 下列代码意义&#xff1a;向已存在的表my_foods中新增自动排列的列 作为主键 ALTER TABLE my_contacts  --表名称ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,   --新的 列 id&#xff0c;自动排列&#xff0c;该列于第一位 ADD PRIMARY KEY (id);…...

大连网龙建站优化推广/网店如何营销推广

更多代码请见&#xff1a;https://github.com/xubo245 基因数据处理系列 1.解释 重新运行&#xff0c;跟换了文件地址 后来终端&#xff0c;需要运行其他的2.代码&#xff1a; hadoopMaster:~/disk2/xubo/project/alignment/sparkBWA$ vi sparkBWA.sh for j in 10000 10000…...

wordpress 主题生成/营销型网站建设ppt

1 UI界面代码; 看着多。实际上真正布局用到的地方,也是非常有限的。 <Page x:Class="Wpf.Jie.Views.Jie1_Page1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&qu…...