当前位置: 首页 > 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

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

http://www.lryc.cn/news/500953.html

相关文章:

  • Ubuntu22.04深度学习环境安装【cuda+cudnn】
  • go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库
  • 从零用java实现 小红书 springboot vue uniapp (1)
  • Python爬虫——HTML中Xpath定位
  • 电脑无法识别usb设备怎么办?电脑无法识别usb解决方法
  • 思特奇政·企数智化产品服务平台正式发布,助力运营商政企数智能力跃迁
  • 【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之前端环境搭建
  • 手写Mybatis框架源码(简写)
  • Flask返回中文Unicode编码(乱码)解决方案
  • 最大值和最小值的差
  • 如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署
  • 探索 Java 中的 Bug 世界
  • SQL面试题——百度SQL面试题 连续签到领金币
  • easyExcel单一下拉框和级联下拉框
  • linux-安全-iptables防火墙基础笔记
  • 力扣刷题TOP101: 25.BM32合并二叉树
  • R的中文文本处理包--tmcn
  • 差异基因富集分析(R语言——GOKEGGGSEA)
  • scrapy对接rabbitmq的时候使用post请求
  • vue+elementUI+transition实现鼠标滑过div展开内容,鼠标划出收起内容,加防抖功能
  • 大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件
  • 阿里云ECS服务器域名解析
  • 牛客周赛71:A:JAVA
  • 查询产品所涉及的表有(product、product_admin_mapping)
  • 算法基础学习Day5(双指针、动态窗口)
  • docker 部署 mysql 9.0.1
  • 关于小标join大表,操作不当会导致笛卡尔积,数据倾斜
  • SpringMVC全局异常处理
  • 出海服务器可以用国内云防护吗
  • 从零开始的使用SpringBoot和WebSocket打造实时共享文档应用