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

发布于:2024-12-06 ⋅ 阅读:(101) ⋅ 点赞:(0)

目录

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

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


网站公告

今日签到

点亮在社区的每一天
去签到