6f5668b7ec
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.
89 lines
3.0 KiB
Python
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
|