android-midscene-automation 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +9 -0
- package/artemis-main/apps/admin_console/server.py +33 -0
- package/package.json +1 -1
- package/server/appium-recorder/appium-runner.ts +231 -78
- package/server/appium-recorder/element-tap.test.ts +171 -6
- package/server/appium-recorder/managed-cleanup.test.ts +7 -7
- package/server/appium-recorder/replay-lifecycle.test.ts +4 -4
- package/server/appium-recorder/repository.ts +39 -9
- package/server/appium-recorder/request-timeout.ts +5 -0
- package/server/appium-recorder/routes.ts +38 -15
- package/server/appium-recorder/script-import.test.ts +45 -0
- package/server/appium-recorder/tree-dump.ts +44 -0
- package/server/remote-agents/replay-integration.test.ts +4 -4
- package/src/App.vue +10 -10
- package/src/appium-recorder/AppiumPage.vue +58 -12
- package/src/appium-recorder/RunHistoryDialog.vue +91 -51
- package/src/appium-recorder/api.ts +4 -0
- package/src/appium-recorder/components/ComponentTree.vue +72 -10
- package/src/appium-recorder/components/FlowStepEditor.vue +51 -9
- package/src/appium-recorder/components/NodeDetail.vue +129 -52
- package/src/appium-recorder/components/RecordedSteps.vue +1 -0
- package/src/appium-recorder/components/ScriptParameterSettings.vue +44 -10
- package/src/appium-recorder/components/VariableTable.vue +44 -5
- package/src/appium-recorder/tree.ts +1 -0
- package/src/components/config/AiDeduplicationSettings.vue +0 -1
- package/src/components/config/MidsceneConfigPanel.vue +12 -2
- package/src/style.css +296 -55
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
# 更新记录
|
|
2
|
+
## v1.1.5
|
|
3
|
+
- UI优化
|
|
4
|
+
|
|
5
|
+
## v1.1.4
|
|
6
|
+
- [Appium]修复持续刷新页面中的操作超时,以及可选元素未出现时误报失败的问题。
|
|
7
|
+
- [Appium]脚本列表支持批量导入并自动重建连接脚本关系;导入后保留列表页,不自动加载脚本。
|
|
8
|
+
- [Appium]点击节点改为优先使用组件定位,失败后才使用备用坐标;节点配置中显示备用坐标并过滤无效区域。
|
|
9
|
+
- [Appium]优化连接脚本参数和返回值配置,使用自适应卡片布局并简化空状态。
|
|
10
|
+
|
|
2
11
|
## v1.1.3
|
|
3
12
|
- [Appium]修复登录等点击操作已经触发 Activity 跳转后,UiAutomator2 仍等待点击确认、最终误报超时并占用命令队列的问题;元素点击先读取实时区域,再通过 ADB 点击中心坐标,并限制界面空闲等待时间。
|
|
4
13
|
|
package/README.md
CHANGED
|
@@ -1502,6 +1502,15 @@ Linux: ~/.local/share/android-midscene-automation
|
|
|
1502
1502
|
|
|
1503
1503
|
# 项目更新记录
|
|
1504
1504
|
|
|
1505
|
+
## v1.1.5
|
|
1506
|
+
- UI优化
|
|
1507
|
+
|
|
1508
|
+
## v1.1.4
|
|
1509
|
+
- [Appium]修复持续刷新页面中的操作超时,以及可选元素未出现时误报失败的问题。
|
|
1510
|
+
- [Appium]脚本列表支持批量导入并自动重建连接脚本关系;导入后保留列表页,不自动加载脚本。
|
|
1511
|
+
- [Appium]点击节点改为优先使用组件定位,失败后才使用备用坐标;节点配置中显示备用坐标并过滤无效区域。
|
|
1512
|
+
- [Appium]优化连接脚本参数和返回值配置,使用自适应卡片布局并简化空状态。
|
|
1513
|
+
|
|
1505
1514
|
## v1.1.3
|
|
1506
1515
|
- [Appium]修复登录等点击操作已经触发 Activity 跳转后,UiAutomator2 仍等待点击确认、最终误报超时并占用命令队列的问题;元素点击先读取实时区域,再通过 ADB 点击中心坐标,并限制界面空闲等待时间。
|
|
1507
1516
|
|
|
@@ -19,7 +19,9 @@ Modular entrypoint for full trace inspection, step replay, and task execution ma
|
|
|
19
19
|
|
|
20
20
|
import argparse
|
|
21
21
|
import asyncio
|
|
22
|
+
import copy
|
|
22
23
|
from contextlib import asynccontextmanager
|
|
24
|
+
import logging
|
|
23
25
|
import os
|
|
24
26
|
from pathlib import Path
|
|
25
27
|
import secrets
|
|
@@ -452,6 +454,35 @@ class ArtemisUvicornServer(uvicorn.Server):
|
|
|
452
454
|
super().handle_exit(sig, frame)
|
|
453
455
|
|
|
454
456
|
|
|
457
|
+
class QuietProbeAccessFilter(logging.Filter):
|
|
458
|
+
"""Hide successful high-frequency probe requests from Uvicorn access logs."""
|
|
459
|
+
|
|
460
|
+
_quiet_paths = frozenset({"/api/status", "/api/system/readiness"})
|
|
461
|
+
|
|
462
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
463
|
+
args = record.args
|
|
464
|
+
if not isinstance(args, tuple) or len(args) < 5:
|
|
465
|
+
return True
|
|
466
|
+
method = str(args[1]).upper()
|
|
467
|
+
path = str(args[2]).partition("?")[0]
|
|
468
|
+
try:
|
|
469
|
+
status_code = int(args[4])
|
|
470
|
+
except (TypeError, ValueError):
|
|
471
|
+
return True
|
|
472
|
+
return not (method == "GET" and path in self._quiet_paths and status_code == 200)
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
def _uvicorn_log_config() -> dict:
|
|
476
|
+
"""Keep normal access logs while silencing successful background probes."""
|
|
477
|
+
config = copy.deepcopy(uvicorn.config.LOGGING_CONFIG)
|
|
478
|
+
filter_name = "quiet_artemis_probes"
|
|
479
|
+
config.setdefault("filters", {})[filter_name] = {"()": QuietProbeAccessFilter}
|
|
480
|
+
access_handler = config.get("handlers", {}).get("access")
|
|
481
|
+
if access_handler is not None:
|
|
482
|
+
access_handler["filters"] = [*access_handler.get("filters", []), filter_name]
|
|
483
|
+
return config
|
|
484
|
+
|
|
485
|
+
|
|
455
486
|
def run_ui_server(host: str, port: int, reload: bool = False) -> None:
|
|
456
487
|
"""Run the UI server with bounded, signal-aware graceful shutdown."""
|
|
457
488
|
state.host = host
|
|
@@ -466,6 +497,7 @@ def run_ui_server(host: str, port: int, reload: bool = False) -> None:
|
|
|
466
497
|
port=port,
|
|
467
498
|
reload=True,
|
|
468
499
|
timeout_graceful_shutdown=5,
|
|
500
|
+
log_config=_uvicorn_log_config(),
|
|
469
501
|
)
|
|
470
502
|
return
|
|
471
503
|
|
|
@@ -474,6 +506,7 @@ def run_ui_server(host: str, port: int, reload: bool = False) -> None:
|
|
|
474
506
|
host=host,
|
|
475
507
|
port=port,
|
|
476
508
|
timeout_graceful_shutdown=5,
|
|
509
|
+
log_config=_uvicorn_log_config(),
|
|
477
510
|
)
|
|
478
511
|
server = ArtemisUvicornServer(config)
|
|
479
512
|
app.state.uvicorn_server = server
|