Files
cmautobuy/client/test/test_pdd_real_xml_fixtures.py
T

110 lines
3.4 KiB
Python

"""用真机导出的控件树验证真实页面结构。"""
from pathlib import Path
import unittest
from src.pdd_collect_service import (
PddCollectService,
parse_goods_page,
parse_spec_panel,
)
from src.pdd_device_service import PddDeviceService
from src.util.get_size_panle_coord import get_size_panel_coord
REAL_XML = Path(__file__).parents[1] / "image_xml"
class SettingsFocusedRealPage:
"""复现真机:焦点 API 是无线设置,控件树实际是 PDD。"""
def __init__(self, xml_data):
self.xml_data = xml_data
self.opened = False
def app_current(self):
return {"package": "com.oplus.wirelesssettings"}
def app_start(self, _package):
return None
def app_wait(self, _package, timeout=10):
return 1
def open_url(self, _url):
self.opened = True
def dump_hierarchy(self):
if not self.opened:
return '<hierarchy><node package="com.oplus.wirelesssettings" /></hierarchy>'
return self.xml_data
class PddRealXmlFixtureTest(unittest.TestCase):
def test_real_pdd_page_is_ready_when_focus_api_reports_settings(self):
xml_data = (REAL_XML / "737116531267_home.xml").read_text(
encoding="utf-8"
)
device = SettingsFocusedRealPage(xml_data)
service = PddCollectService(
PddDeviceService(lambda _serial: device),
"USB-001",
"client-001",
sleeper=lambda _seconds: None,
)
service._open_goods(
device,
"https://mobile.yangkeduo.com/goods.html?goods_id=737116531267",
)
def test_split_title_is_joined_from_real_goods_page(self):
result = parse_goods_page(
(REAL_XML / "737116531267_home.xml").read_text(encoding="utf-8")
)
self.assertEqual(
result.title,
"【店铺热销】冰丝吊带裙女夏季薄款内搭连衣裙宽松a字裙中长款打底裙衬裙纯色",
)
def test_real_spec_panel_has_all_colors_and_two_prices(self):
xml_data = (REAL_XML / "737116531267_size.xml").read_text(
encoding="utf-8"
)
result = parse_spec_panel(xml_data)
colors = next(item for item in result.dimensions if item.key == "color")
self.assertEqual(len(colors.values), 8)
self.assertIn("浅蓝色中长款", [item.text for item in colors.values])
self.assertEqual(result.price_cent, 470)
self.assertEqual(result.list_price_cent, 1990)
service = PddCollectService(
PddDeviceService(lambda _serial: object()),
"USB-001",
"client-001",
max_spec_swipes=0,
)
rows = service._visible_color_rows(xml_data)
self.assertEqual(len(rows), 2)
self.assertEqual(
[item.text for item in rows[0]],
["黑色中长款", "白色中长款", "卡其中长款"],
)
self.assertEqual(
[item.text for item in rows[1]],
["黑色长款", "白色长款", "卡其长款"],
)
def test_real_home_xml_has_immediate_spec_entry(self):
xml_data = (REAL_XML / "737116531267_home.xml").read_text(
encoding="utf-8"
)
coordinate = get_size_panel_coord(xml_data)
self.assertIsNotNone(coordinate)
self.assertGreater(coordinate[1], 2000)
if __name__ == "__main__":
unittest.main()