feat: 抓取元素选择器精度优化 + 设备列表补全 + 刷新同步
This commit is contained in:
+61
-6
@@ -596,18 +596,73 @@ def api_uiauto_status():
|
||||
return jsonify({"ok": True, "running": uiauto_helper.is_running()})
|
||||
|
||||
|
||||
@app.route("/api/steps/test", methods=["POST"])
|
||||
@perm_required(PERM_DEVICES)
|
||||
def api_steps_test():
|
||||
"""测试单个步骤:在指定设备上试执行,验证选择器是否命中(步骤编辑器"测试此步骤")。
|
||||
|
||||
请求: {"serial": "100.100.10.11:5555", "step": {"type": "click", "params": {...}}}
|
||||
只读连接(adb connect + u2),不占用/释放 STF,与运行中任务互不干扰。
|
||||
返回 result: "命中" / "未找到" / "已执行"。
|
||||
"""
|
||||
data = request.json or {}
|
||||
serial = (data.get("serial") or "").strip()
|
||||
step = data.get("step") or {}
|
||||
if not serial:
|
||||
return jsonify({"ok": False, "error": "缺少 serial"}), 400
|
||||
if not step.get("type"):
|
||||
return jsonify({"ok": False, "error": "缺少步骤类型"}), 400
|
||||
from tasks.generic.task import test_step
|
||||
ok, msg, result = test_step(serial, step)
|
||||
res_txt = {True: "命中", False: "未找到"}.get(result, "已执行")
|
||||
_log.info(f"测试步骤 {step.get('type')} @ {serial}: {res_txt} ({msg})")
|
||||
return jsonify({"ok": ok, "msg": msg, "result": res_txt})
|
||||
|
||||
|
||||
@app.route("/api/uiauto/devices")
|
||||
@login_required
|
||||
@perm_required(PERM_DEVICES)
|
||||
def api_uiauto_devices():
|
||||
"""获取 uiauto2 已连接的设备列表(供抓取元素时选择设备)。"""
|
||||
"""获取可选设备列表(抓取元素用)。
|
||||
|
||||
uiautodev 只认识本地 adb 已连接的设备;平台设备池(STF)里在线但未
|
||||
本地连接的设备(如 100.100.10.10)在这里补全,并先做一次轻量 adb
|
||||
connect(单次尝试,绝不 kill-server),让它们可被 uiautodev 抓取。
|
||||
"""
|
||||
ok, data = uiauto_helper.list_devices()
|
||||
if ok:
|
||||
return jsonify({"ok": True, "devices": data})
|
||||
return jsonify({"ok": False, "error": data}), 503
|
||||
if not ok:
|
||||
return jsonify({"ok": False, "error": data}), 503
|
||||
seen = {d.get("serial") for d in data}
|
||||
try:
|
||||
pool = stf.list_all_devices()
|
||||
except Exception:
|
||||
pool = []
|
||||
added = 0
|
||||
for d in pool:
|
||||
serial = d.get("serial", "")
|
||||
if not serial or serial in seen:
|
||||
continue
|
||||
if not (d.get("present") and d.get("ready")):
|
||||
continue
|
||||
# 轻量连接(单次尝试,不重试不 kill-server);连不上也照样列出,
|
||||
# 前端抓取时会报明确错误,不影响其他设备的连接
|
||||
adb_connect_light(serial)
|
||||
data.append({
|
||||
"serial": serial,
|
||||
"model": d.get("model") or d.get("product") or "",
|
||||
"product": d.get("product") or "",
|
||||
"name": serial,
|
||||
"status": "device",
|
||||
"enabled": True,
|
||||
})
|
||||
seen.add(serial)
|
||||
added += 1
|
||||
if added:
|
||||
_log.info(f"抓取元素设备列表补全 {added} 台 STF 在线设备: {list(seen)}")
|
||||
return jsonify({"ok": True, "devices": data})
|
||||
|
||||
|
||||
@app.route("/api/uiauto/screenshot")
|
||||
@login_required
|
||||
@perm_required(PERM_DEVICES)
|
||||
def api_uiauto_screenshot():
|
||||
"""通过 uiauto2 获取设备截图(供抓取元素时显示设备画面)。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user