fix: 兼容非滚动PDD规格面板 (#154)
This commit is contained in:
@@ -10,6 +10,7 @@ import xml.etree.ElementTree as ET
|
||||
from src.pdd_collect_service import (
|
||||
PddCollectError,
|
||||
PddCollectService,
|
||||
_is_spec_panel_open,
|
||||
parse_goods_page,
|
||||
parse_quantity,
|
||||
parse_spec_panel,
|
||||
@@ -340,6 +341,9 @@ class PddCollectParserTest(unittest.TestCase):
|
||||
cls.count_heading_spec_xml = (
|
||||
FIXTURES / "pdd_spec_panel_count_heading.xml"
|
||||
).read_text(encoding="utf-8")
|
||||
cls.non_scrollable_spec_xml = (
|
||||
FIXTURES / "pdd_spec_panel_non_scrollable.xml"
|
||||
).read_text(encoding="utf-8")
|
||||
|
||||
def test_quantity_keeps_raw_value_and_approximate_flag(self):
|
||||
result = parse_quantity("已拼1.2万+件")
|
||||
@@ -403,6 +407,63 @@ class PddCollectParserTest(unittest.TestCase):
|
||||
["黑色", "红色", "蓝色", "紫色", "浅粉", "本色"],
|
||||
)
|
||||
|
||||
def test_parse_non_scrollable_spec_panel(self):
|
||||
result = parse_spec_panel(self.non_scrollable_spec_xml)
|
||||
|
||||
self.assertTrue(_is_spec_panel_open(self.non_scrollable_spec_xml))
|
||||
self.assertEqual([item.key for item in result.dimensions], ["color", "size"])
|
||||
self.assertEqual(
|
||||
[value.text for value in result.dimensions[0].values],
|
||||
[
|
||||
"测试黑色",
|
||||
"测试黑色+网袜",
|
||||
"测试黑色+丝袜",
|
||||
"测试黑色+短袜",
|
||||
"测试黑色+长袜",
|
||||
],
|
||||
)
|
||||
self.assertEqual(
|
||||
[value.text for value in result.dimensions[1].values],
|
||||
["均码(适合80-120斤)"],
|
||||
)
|
||||
self.assertEqual(result.price_cent, 817)
|
||||
self.assertEqual(result.raw_price, "¥8.17")
|
||||
self.assertNotIn("确认款式", [item.name for item in result.dimensions])
|
||||
|
||||
def test_wait_accepts_non_scrollable_spec_panel_without_sleep(self):
|
||||
device = FakeCollectDevice(self.home_xml, self.non_scrollable_spec_xml)
|
||||
device.opened_url = "https://mobile.yangkeduo.com/goods.html?goods_id=123"
|
||||
device.panel_open = True
|
||||
clock = FakeClock()
|
||||
service = PddCollectService(
|
||||
PddDeviceService(lambda _serial: device),
|
||||
"USB-001",
|
||||
"client-001",
|
||||
sleeper=clock.sleep,
|
||||
monotonic=clock.monotonic,
|
||||
spec_panel_timeout=1.0,
|
||||
)
|
||||
|
||||
snapshot = service._wait_spec_panel(device)
|
||||
|
||||
self.assertEqual([item.key for item in snapshot.dimensions], ["color", "size"])
|
||||
self.assertEqual(clock.sleeps, [])
|
||||
|
||||
def test_goods_page_is_not_non_scrollable_spec_panel(self):
|
||||
self.assertFalse(_is_spec_panel_open(self.home_xml))
|
||||
|
||||
def test_full_window_with_scattered_labels_is_not_spec_panel(self):
|
||||
xml_data = """<hierarchy>
|
||||
<node class="android.widget.FrameLayout" bounds="[0,0][1080,2400]">
|
||||
<node text="确认款式" bounds="[20,100][220,160]" />
|
||||
<node text="已选择:测试值" bounds="[20,300][500,360]" />
|
||||
<node text="颜色分类" bounds="[20,800][220,860]" />
|
||||
<node text="确定" clickable="true" bounds="[0,2280][1080,2400]" />
|
||||
</node>
|
||||
</hierarchy>"""
|
||||
|
||||
self.assertFalse(_is_spec_panel_open(xml_data))
|
||||
|
||||
def test_open_panel_without_visible_options_is_not_reported_as_timeout(self):
|
||||
panel_xml = """<hierarchy>
|
||||
<node class="android.widget.FrameLayout" bounds="[0,0][1080,2400]">
|
||||
|
||||
Reference in New Issue
Block a user