import pytest
from seleniumbase import BaseCase
# 设备配置矩阵:(设备名称, CSS宽, CSS高, 像素比, 用户代理)
DEVICE_CONFIGS = [
("iPhone 13", 390, 844, 3, "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1"),
("Pixel 7", 412, 915, 2.75, "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36"),
("iPad Pro", 1024, 1366, 2, "Mozilla/5.0 (iPad; CPU OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1"),
]
@pytest.mark.parametrize("device_name, width, height, pixel_ratio, user_agent", DEVICE_CONFIGS)
class TestMultiDevice(BaseCase):
def test_responsive_design_across_devices(self, device_name, width, height, pixel_ratio, user_agent):
self.open("https://example.com")
# 配置设备参数
self.driver.execute_cdp_cmd(
"Emulation.setDeviceMetricsOverride",
{
"width": width,
"height": height,
"deviceScaleFactor": pixel_ratio,
"mobile": True,
"screenOrientation": {"type": "portraitPrimary", "angle": 0}
}
)
self.driver.execute_cdp_cmd(
"Network.setUserAgentOverride",
{"userAgent": user_agent}
)
self.refresh_page()
# 执行通用测试步骤
self.verify_core_functionality()
# 保存设备专属截图
self.save_screenshot(f"responsive_{device_name}.png")
def verify_core_functionality(self):
self.assert_element("h1", timeout=10)
self.assert_text("响应式Web应用", "h1")
self.send_keys("input.search", "测试关键词")
self.click("button.search-submit")
self.assert_element("div.search-results", timeout=15)