fix: AI 返回后先选尺码再核对组合 (#267)

This commit is contained in:
chengma
2026-08-18 14:17:50 +08:00
parent 024f5e69cb
commit 39c6258d24
3 changed files with 146 additions and 26 deletions
+28 -17
View File
@@ -1303,19 +1303,6 @@ class U2PddPurchaseAdapter(PddPurchaseAdapter):
"observed_page_kind": current_page_kind,
},
)
# 完整遍历第二规格后,面板可能停在尺码列表末端,颜色节点已经
# 滑出当前控件树。必须先回到颜色区域,再用最新控件树确认原颜色;
# 否则“当前看不见”会被误报成“颜色发生变化”。
current_xml = self._restore_purchase_panel_color_region(current_xml)
root = _parse_xml(current_xml)
if not _selected(root, expected_snapshot.selected_color):
raise PddPurchaseError(
"PURCHASE_SPEC_CONTEXT_CHANGED",
"等待规格解析期间已选颜色发生变化",
step="purchase_resolve_options",
diagnostics={"context_check": "selected_color"},
)
try:
dimension = self._size_candidate_collector(self._require_device())
except PddCollectError as exc:
@@ -1355,9 +1342,10 @@ class U2PddPurchaseAdapter(PddPurchaseAdapter):
step="purchase_resolve_options",
)
latest_xml = self._restore_purchase_panel_color_region(
self._dump_hierarchy()
)
# 候选复算后仍停留在尺码上下文时,直接选择 Admin 返回的页面
# 原文。颜色节点当前不可见不代表颜色已变化;完整组合在点击后
# 使用最新“已选”摘要核对,摘要不足时才回到颜色区域兜底。
latest_xml = self._dump_hierarchy()
if not self._select_size(
self._require_device(), latest_xml, candidate.raw_text, action_delay=0.2
):
@@ -1367,12 +1355,35 @@ class U2PddPurchaseAdapter(PddPurchaseAdapter):
step="purchase_resolve_options",
)
selected_xml = self._dump_hierarchy()
if not _selected(_parse_xml(selected_xml), candidate.raw_text):
selected_root = _parse_xml(selected_xml)
selected_page_kind = _page_kind(selected_root, "")
if selected_page_kind != "order_confirmation":
raise PddPurchaseError(
"PURCHASE_SPEC_CONTEXT_CHANGED",
"选择解析尺码后页面已离开规格确认页",
step="purchase_resolve_options",
diagnostics={
"context_check": "page_kind_after_size",
"expected_page_kind": "order_confirmation",
"observed_page_kind": selected_page_kind,
},
)
if not _selected(selected_root, candidate.raw_text):
raise PddPurchaseError(
"PURCHASE_RESOLVED_SIZE_NOT_SELECTED",
"点击解析尺码后页面没有确认选中",
step="purchase_resolve_options",
)
if not _selected(selected_root, expected_snapshot.selected_color):
color_xml = self._restore_purchase_panel_color_region(selected_xml)
color_root = _parse_xml(color_xml)
if not _selected(color_root, expected_snapshot.selected_color):
raise PddPurchaseError(
"PURCHASE_SPEC_CONTEXT_CHANGED",
"选择解析尺码后无法确认原颜色仍处于选中状态",
step="purchase_resolve_options",
diagnostics={"context_check": "selected_color"},
)
self._requested_options["size"] = candidate.raw_text
def set_quantity(self, quantity: int) -> None: