fix: AI 返回后先选尺码再核对组合 (#267)
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user