"""用真机导出的控件树验证真实页面结构。""" 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 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): return None def dump_hierarchy(self): 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()