diff --git a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt index 6357ff0..7442d27 100644 --- a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt +++ b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt @@ -306,13 +306,13 @@ object PddScreenParser { orderConfirmationEvidence -> SpecPanelType.ORDER_CONFIRMATION panelScrollable != null && (hasSelectionSummary || hasSubmitHint || (hasPanelTitle && hasPanelAction)) -> SpecPanelType.NORMAL_SCROLLABLE hasSelectionSummary && hasPanelTitle && hasPanelAction -> SpecPanelType.NON_SCROLLABLE_CONFIRMATION - // Some PDD builds expose the complete selector as non-scrollable. - // Accept it only when two parsed dimensions and selectable values - // coexist with the selected summary, unique quantity controls and - // the unique lower-page order action; generic product/review pages - // cannot satisfy this combined evidence. + // Some PDD builds expose the complete selector as non-scrollable + // before a value is selected, so an "已选" summary is absent. Two + // parsed dimensions with selectable values plus the unique quantity + // controls and lower-page order action remain required; generic + // product/review pages cannot satisfy this combined evidence. panelScrollable == null && headings.size >= 2 && dimensions.size >= 2 && - dimensions.sumOf { it.values.size } >= 2 && hasSelectionSummary && + dimensions.sumOf { it.values.size } >= 2 && hasQuantityControls && hasOrderSubmitAction -> SpecPanelType.NON_SCROLLABLE_CONFIRMATION else -> SpecPanelType.UNKNOWN } diff --git a/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt b/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt index adf1d07..c235a92 100644 --- a/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt +++ b/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt @@ -571,6 +571,33 @@ class PddProductDetailCollectorTest { assertTrue(parsed.dimensions.isEmpty()) } + @Test + fun nonScrollableSelectorWithTwoDimensionsDoesNotRequireInitialSelectedSummary() { + val snapshot = UiSnapshot( + PDD_PACKAGE, + ACTIVITY, + listOf( + node("content", "", 0, 0, 1080, 2200, resourceId = "android:id/content", className = "android.widget.FrameLayout"), + node("color-heading", "颜色", 20, 420, 300, 470), + node("color", "豹纹", 20, 490, 300, 550, clickable = true), + node("size-heading", "尺码", 20, 650, 300, 700), + node("size", "均码", 20, 720, 300, 780, clickable = true), + node("quantity", "1", 480, 1400, 600, 1480, className = "android.widget.EditText"), + node("decrease", "减少数量", 360, 1400, 470, 1480, clickable = true), + node("increase", "增加数量", 610, 1400, 720, 1480, clickable = true), + node("order", "提交订单", 20, 1900, 1060, 2100, clickable = true), + ), + ) + + val parsed = PddScreenParser.parse(snapshot, config(), GOODS_ID, evidence()) + + assertTrue(parsed.specPanelOpen) + assertEquals(SpecPanelType.NON_SCROLLABLE_CONFIRMATION, parsed.specPanelType) + assertFalse(parsed.hasSelectionSummary) + assertEquals(2, parsed.dimensions.size) + assertEquals(2, parsed.panelOptionCount) + } + @Test fun genericQuantityAndBuyControlsDoNotProveQuickConfirmation() { val snapshot = UiSnapshot(