Files
QaAutomationHub/tests/cross_end/pages/admin/settlement_page.py
T
xst 6f5668b7ec feat(cross_end): add cross-platform E2E test support for freight full flow
Add tests/cross_end/ directory with dual-driver architecture:
- conftest.py: Playwright admin_page + Appium app_driver fixtures
- Admin Page Objects: FreightSourcePage, WaybillManagementPage, SettlementPage
- App Page Objects: DriverOrderListPage, DriverTransportPage, DriverHomePage (re-export)
- test_freight_full_flow.py: 8-step end-to-end test (publish → accept → load → unload → accounting → review → shipper pay → platform pay)
- Shared context dict for cross-step data passing
- Graceful skip when either Playwright or Appium is unavailable
- All selectors marked with ⚠️ placeholders for discovery against real environments

Add cross_end marker to pytest.ini for selective execution.
2026-07-21 09:10:08 +08:00

89 lines
3.0 KiB
Python

"""管理端 — 承运结算 — 打款 Page Object。
覆盖步骤:
7. 货主打款 (do_shipper_payment)
8. 平台打款给司机 (do_platform_payment)
Usage:
settlement_page = SettlementPage(page)
settlement_page.do_shipper_payment(order_no)
settlement_page.do_platform_payment(order_no)
"""
from playwright.sync_api import Page
from tests.web.admin.pages.base_page import BasePage
class SettlementPage(BasePage):
"""管理端 - 承运结算 - 打款管理。"""
def __init__(self, page: Page):
super().__init__(page)
# ⚠️ 以下定位器需要根据实际 DOM 调整
# ── 搜索区 ──
self.search_order_input = page.get_by_placeholder("请输入订单号") # ⚠️
self.search_btn = page.get_by_role("button", name="查询") # ⚠️
# ── 操作按钮 ──
self.shipper_pay_btn = page.get_by_role("button", name="货主打款") # ⚠️
self.platform_pay_btn = page.get_by_role("button", name="平台打款") # ⚠️ 或"财务打款"
self.confirm_btn = page.get_by_role("button", name="确定") # ⚠️ 确认打款弹窗
# ── 结果元素 ──
self.success_toast = page.locator(".el-message--success") # ⚠️
self.status_text = page.locator(".settlement-status") # ⚠️ 结算状态文本
def search_order(self, order_no: str) -> None:
"""搜索运单。"""
self.fill_field(self.search_order_input, order_no)
self.click_when_ready(self.search_btn)
self.page.wait_for_timeout(1000)
def do_shipper_payment(self, order_no: str) -> None:
"""货主打款流程: 搜索 → 货主打款 → 确认。
Args:
order_no: 订单号
"""
self.search_order(order_no)
self.page.wait_for_timeout(500)
self.click_when_ready(self.shipper_pay_btn)
self.page.wait_for_timeout(500)
# 确认打款弹窗
self._confirm_if_present()
# 等待成功提示
self.wait_visible(self.success_toast, timeout_ms=10_000)
def do_platform_payment(self, order_no: str) -> None:
"""平台打款给司机流程: 搜索 → 平台打款 → 确认。
Args:
order_no: 订单号
"""
self.search_order(order_no)
self.page.wait_for_timeout(500)
self.click_when_ready(self.platform_pay_btn)
self.page.wait_for_timeout(500)
# 确认打款弹窗
self._confirm_if_present()
# 等待成功提示
self.wait_visible(self.success_toast, timeout_ms=10_000)
def _confirm_if_present(self) -> None:
"""如果有确认弹窗则点击确定。"""
# ⚠️ 确认按钮可能以不同形式存在
try:
if self.confirm_btn.is_visible():
self.click_when_ready(self.confirm_btn)
self.page.wait_for_timeout(500)
except Exception:
pass