惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
量子位
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
雷峰网
雷峰网
腾讯CDC
P
Proofpoint News Feed
S
Schneier on Security
S
Secure Thoughts
V
Visual Studio Blog
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy International News Feed
SecWiki News
SecWiki News
S
SegmentFault 最新的问题
T
Threatpost
小众软件
小众软件
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
T
Tailwind CSS Blog
I
Intezer
C
CERT Recently Published Vulnerability Notes
U
Unit 42
V
V2EX
Cyberwarzone
Cyberwarzone
Recorded Future
Recorded Future
O
OpenAI News
Project Zero
Project Zero
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
Know Your Adversary
Know Your Adversary
C
Cybersecurity and Infrastructure Security Agency CISA
Scott Helme
Scott Helme
V2EX - 技术
V2EX - 技术
博客园 - 叶小钗
S
Securelist
A
Arctic Wolf
The Cloudflare Blog
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
博客园 - Franky

博客园 - 狂师

从 LLM 评测到 AI Agent 评测,我的一些思考! 测试开发必备的 AI 技能库:推荐6 个让接口自动化测试效率翻倍的 Skills 推荐一款开源工具:让 AI Agent 替你做 iOS、Android 自动化测试,能平替 Appium? AI 测试必备:多Agent Skill 智能编排,从「脚本执行」到「失败自愈」到「报告生成」,一键跑通全流程! 10万人都在用的 top10 skills,我帮你试了! Agent 工具到底怎么选? 还在手写测试报告?推荐一款 AI 测试Skill:只需一句指令,自动生成专业定制化测试报告! 测试人员必备:推荐一款智能测试数据清理AI Skill,支持db、redis、mq等 AI 测试必备:推荐一款能让自动化失败脚本「自己修好」的 AI skill! 端开发必装 Skill 清单:6 款 AI 技能,让你的开发效率原地起飞 AI 测试提效神器:推荐一款接口自动化测试提效skill! 做一款企业真正敢用的 AI 测试应用,到底难在哪? 新手学 Skills:是什么、怎么找、如何开发?(最通俗易懂版) 2026 最新 AI 学习路线全景图:从零基础到 AI 全栈测试与开发实战(附一站式智能测试平台) 2026 最具幸福感的互联网大厂排名! 聊一聊近年来互联网公司的裁员情况 比 Playwright 更给力,推荐一个AI Agent的浏览器自动化开源项目! 测试工程师的AI 技能库:推荐5个让你效率翻倍的Skills AI测试必学 | AI 赋能接口自动化测试系列(四):接口自动化脚本质量检查与优化Agent Skill AI测试必学 | AI 赋能接口自动化测试系列(三):接口自动化测试脚本生成Agent Skill AI测试必学 | AI 赋能接口自动化测试系列(二):全场景测试数据智能构造Agent Skill AI测试必学 | AI 赋能接口自动化测试系列(一):接口文档智能解析Agent Skill推荐 测试必学:推荐4个测试用例设计最值得掌握的Agent Skill,几乎覆盖所有用例设计场景! 面试官问:你用 AI 编程半年了,那怎么保证 Claude Code 写出来的代码是对的? AI 测试赋能全流程实战 | Agent Skill + AI 赋能「需求分析」 6000 字干货|Coze 智能体实战:搭建需求文档到测试用例自动生成工作流! QA Use:推荐一款AI 原生 E2E 测试平台,自然语言一键跑通用例! 2026学扣子Coze看这篇就够了!(新手入门教程) Codex新手保姆级教程:新手从安装到跑通第一个项目! 做一款企业真正敢用的AI测试应用,到底有多难?究竟难在哪? Claude Code 9 大神级 Skills,开发效率直接翻倍(安装、使用场景、踩坑经验) 别再瞎搞 AI 了!大厂AI业务落地的五个关键环节!(建议新手直接照搬) 有了AI测试工具,还需要掌握Playwright、Pytest、Selenium这些框架吗? 毫不夸张地说,这将是目前最全的AI测试教程!测试必看! 最近面完 30 个想转 AI 测试的人,我麻了:80% 都踩了这 4 个坑! 2026年我做了一个大胆的决定:我要收徒弟了! 程序员逼格拉满!ccstatusline:让你的 Claude Code 状态栏直接封神! AI 测试全场景提效:功能 / 性能 / 安全 / 自动化,用 AI 重塑测试工作流 2026 年 AI 编程实测:6 款顶流大模型对比,效率直接翻倍! 面试必问:公司用AI 赋能自动化,你是怎么用AI 做自动化测试的呢?(附落地全流程) 牛逼!119K star,软微开源神器,一款功能超强大的markdown 文档转换工具! 你说你会AI测试,那你是怎么实现AI+软件测试的呢?(附带5 层AI 质量管理体系) 一道面试题刷掉 90% 的人,测试人必懂:AI 生成用例的3 大陷阱 + 7 项审核指标 零代码 AI 自动化测试神器!Browser‑Use Web UI 保姆级教程,测试人直接上手 不用写脚本!Browser-Use 实操:AI 直接驱动浏览器自动化测试 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 CC‑Switch 原来是这么玩的!90% 的人都没用对 为什么你的OpenClaw做不好自动化测试? AI到底会不会导致大规模失业?一次性把所有问题讲透!(深度好文) 推荐3款必备“测试神器”Skill:用例生成、根因分析一键搞定 为什么现在所有大厂都在做 CLI ?(附Cluade Code接入飞书CLI教程) 自动生成用例:基于OCR+ LLM的设计方案(附落地指南) 太强了!GLM-5.1 第一手实测,平替Claude Opus 4.6? 测试人必备的4个AI Skills(附下载地址和详细用法) 我带学员用 AI 做了个热点监控工具,太好用了! Cursor 生成测试用例实战:一个 Skill,10 分钟产出可评审测试用例 90% 的人都用错了!Playwright vs Chrome DevTools MCP到底该怎么选? 全球首个龙虾模型:GLM-5-Turbo(手把手安装、配置、使用教程)来了! 测试开发效率翻10倍!这10款AI Skills神器,我敢说90%的人没用过 对标OpenClaw,腾讯版国产“小龙虾” WorkBuddy正式上线了! Claude Code+GLM 5 安装配置与10个快速上手技巧 OpenClaw新手必看!推荐10个神器技能包 新手保姆级教程:OpenClaw 自动化操作浏览器!
测试必学:UI 自动化最值得掌握的两个Skills,几乎能覆盖所有UI测试场景!
狂师 · 2026-03-30 · via 博客园 - 狂师

做过UI自动化测试的同学,大概率都有过这样的崩溃时刻:

明明手动操作一遍就能成功的场景,写成自动化脚本就频繁报错;元素定位明明没错,却总出现“元素不可见”“超时加载”;想模拟浏览器的特殊操作(比如清除缓存、模拟网络异常),翻遍资料也找不到简洁的实现方式;跨浏览器兼容测试更是麻烦,每个浏览器都要单独调试,耗时又费力。

UI测试本身就繁琐,再加上这些“卡脖子”问题,不仅拖慢测试进度,还会让测试效率大打折扣——很多时候,我们不是在写脚本,就是在调试脚本的路上。

其实不用这么内耗,今天给大家分享UI测试必备的两个Agent Skill技能:chrome-cdpplaywright-cli,能很好的解决上述这些痛点,让我们可以把更多精力放在核心测试场景上。

无论是新手入门,还是老测试优化工作流,掌握这两个技能,都能让你的UI测试效率翻倍,下面就来拆解一下。

一、先说说:当前UI测试的核心痛点

在介绍这两个skill之前,我们得先梳理清楚当前UI测试的核心痛点有哪些,因为只有知道问题在哪,才能明白这两个技能的价值所在,看看你日常工作中是不是也经常遇到这些情况:

  1. 元素定位难,脚本稳定性差:传统UI自动化依赖元素定位工具(如selenium、playwright),但遇到动态元素、隐藏元素、iframe嵌套,就容易定位失败;甚至浏览器渲染延迟,都会导致脚本报错,调试成本极高。
  2. 浏览器操作受限,场景覆盖不全:想模拟浏览器的高级操作(如模拟网络卡顿、清除localStorage、截图录屏、模拟手机端适配),传统工具要么实现复杂,要么根本不支持,导致很多边缘场景无法覆盖。
  3. 跨浏览器兼容测试繁琐:不同浏览器(Chrome、Firefox、Edge)的内核不同,脚本在一个浏览器能跑通,在另一个浏览器就报错,需要单独适配,重复工作量大。
  4. 脚本编写效率低,上手门槛高:传统自动化脚本需要手动编写大量代码,新手入门慢;而且脚本复用性差,换一个测试场景,就要重新编写或大幅修改。
  5. 调试不便,问题定位难:脚本报错后,只能一步步打印日志排查,无法直观看到浏览器的运行状态,很难快速定位是元素问题、环境问题,还是脚本逻辑问题。

这些痛点,本质上是“工具适配性不足”和“操作复杂度高”导致的。

chrome-cdpplaywright-cli,正是针对性解决这些问题的两个测试“神器”——一个专注于Chrome浏览器的深度操控,一个专注于跨浏览器的高效自动化,两者搭配,几乎能覆盖所有UI测试场景。

两个工具的项目地址放在文章末尾,文章较长,建议先点赞收藏,慢慢看

二、chrome-cdp: Chrome浏览器的“底层操控神器”

1. 什么是chrome-cdp?

chrome-cdp 全称 Chrome DevTools Protocol(Chrome开发者工具协议),简单来说,它是Chrome浏览器提供的一套“底层接口”,允许我们通过代码(或命令)直接操控Chrome浏览器的所有行为——包括页面渲染、网络请求、元素操作、调试日志等,相当于直接“接管”Chrome的核心功能。

它不是一个独立工具,而是Chrome内置的协议,我们可以通过Python、JavaScript等语言调用它的接口,实现传统UI测试工具做不到的高级操作。很多知名测试工具(如Playwright、Puppeteer),底层其实都依赖了chrome-cdp。

2. 能解决哪些UI测试痛点?

chrome-cdp 最核心的价值,是“突破传统工具的限制”,可以解决以下几个核心痛点:

  • 解决“元素定位不稳定”:直接通过浏览器底层接口获取元素,不受动态渲染、隐藏元素影响,定位成功率大幅提升;
  • 解决“浏览器高级操作难”:轻松实现模拟网络异常(断网、卡顿)、清除缓存/本地存储、截图录屏、模拟手机端设备等操作;
  • 解决“调试不便”:可实时获取浏览器的运行日志、网络请求详情,报错后能快速定位问题根源,不用再盲目排查。

3. 基础用法(新手友好,快速上手)

chrome-cdp 的用法有两种:一种是通过命令行直接调用(适合快速调试),另一种是通过代码调用(适合集成到自动化脚本)。

3.1 命令行用法(快速调试)

首先,确保你的Chrome浏览器已安装,然后打开命令行,输入以下命令,启动Chrome并开启CDP协议:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir=c:/chrome_data

# Mac/Linux
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome_data

# Linux服务器无头模式
google-chrome-stable --headless=new --remote-debugging-port=9222 --no-sandbox

说明:

  • --remote-debugging-port=9222:指定调试端口为9222,后续通过这个端口连接Chrome;
  • --user-data-dir:指定Chrome的用户数据目录,避免影响本地正常使用的Chrome配置。
  • --headless=new:新版无头模式(支持完整功能)

启动后,打开浏览器访问 http://localhost:9222,就能看到当前Chrome的所有标签页,点击任意标签页,即可进入CDP调试界面,可直接查看网络请求、元素信息、执行JS命令等。

3.2 集成到自动化脚本

场景1:性能指标自动化采集

使用CDP采集Web性能数据,替代手动F12操作

class PerformanceTester:
    def __init__(self, cdp: CDPController):
        self.cdp = cdp
    
    def measure_page_load(self, url: str):
        """测量页面加载性能"""
        # 启用性能监控
        self.cdp.send("Performance.enable")
        self.cdp.send("Network.enable")
        
        # 清除缓存(模拟首次访问)
        self.cdp.send("Network.clearBrowserCache")
        
        # 记录开始时间
        start_time = time.time()
        
        # 导航到页面
        self.cdp.send("Page.navigate", {"url": url})
        self.cdp.wait_event("Page.loadEventFired", timeout_s=30)
        
        # 获取Performance API数据
        timing_result = self.cdp.eval("""
            JSON.stringify(performance.timing)
        """)
        timing = json.loads(timing_result)
        
        # 计算关键指标
        navigation_start = timing["navigationStart"]
        metrics = {
            "DNS查询": timing["domainLookupEnd"] - timing["domainLookupStart"],
            "TCP连接": timing["connectEnd"] - timing["connectStart"],
            "首字节时间(TTFB)": timing["responseStart"] - navigation_start,
            "DOM解析": timing["domContentLoadedEventEnd"] - timing["domInteractive"],
            "完整加载": timing["loadEventEnd"] - navigation_start,
            "总耗时": time.time() - start_time
        }
        
        # 获取资源加载详情
        entries_result = self.cdp.eval("""
            JSON.stringify(performance.getEntriesByType('resource').map(r => ({
                name: r.name,
                duration: r.duration,
                size: r.transferSize
            })))
        """)
        resources = json.loads(entries_result)
        
        return {
            "页面": url,
            "指标(ms)": metrics,
            "资源数": len(resources),
            "慢资源": [r for r in resources if r["duration"] > 1000][:5]  # Top5慢资源
        }

# 批量性能测试
def test_batch_performance(urls: list):
    cdp = CDPController(ws_url)
    tester = PerformanceTester(cdp)
    
    results = []
    for url in urls:
        result = tester.measure_page_load(url)
        results.append(result)
        print(f"📊 {url}: 加载耗时 {result['指标(ms)']['完整加载']}ms")
    
    # 生成性能报告
    with open("performance_report.json", "w") as f:
        json.dump(results, f, indent=2, ensure_ascii=False)
    
    return results
场景2:与Selenium 4集成(增强现有框架)

Selenium 4原生支持CDP,可以无缝集成

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 启动浏览器
driver = webdriver.Chrome(service=Service("./chromedriver"))

# 获取CDP会话
dev_tools = driver.devtools

# 创建CDP会话
dev_tools.create_session()

# ===== 示例1:模拟地理位置 =====
def test_geo_location():
    # 设置地理位置为上海
    driver.execute_cdp_cmd("Emulation.setGeolocationOverride", {
        "latitude": 31.2304,
        "longitude": 121.4737,
        "accuracy": 100
    })
    
    driver.get("https://map.baidu.com")
    # 验证地图是否定位到上海

# ===== 示例2:模拟弱网环境 =====
def test_slow_network():
    # 启用网络监控
    dev_tools.send(dev_tools.network.enable())
    
    # 模拟3G网络
    driver.execute_cdp_cmd("Network.emulateNetworkConditions", {
        "offline": False,
        "latency": 200,  # 200ms延迟
        "downloadThroughput": 780 * 1024 / 8,  # 780 Kbps
        "uploadThroughput": 330 * 1024 / 8     # 330 Kbps
    })
    
    driver.get("https://your-app.com")
    # 测试在弱网下的加载表现

# ===== 示例3:拦截并修改请求 =====
def test_request_interception():
    # 启用Fetch域
    driver.execute_cdp_cmd("Fetch.enable", {
        "patterns": [{"urlPattern": "*api*", "requestStage": "Request"}]
    })
    
    # 添加监听器(需要通过WebSocket或Selenium的EventListener)
    driver.get("https://your-app.com")
    
    # 验证特定API请求是否携带了正确参数

# ===== 示例4:性能指标采集 =====
def test_performance_metrics():
    # 启用性能监控
    driver.execute_cdp_cmd("Performance.enable")
    
    driver.get("https://your-app.com")
    
    # 获取性能指标
    metrics = driver.execute_cdp_cmd("Performance.getMetrics", {})
    print("性能指标:", metrics)
    
    # 获取页面加载时间
    timing = driver.execute_script("""
        return JSON.stringify(performance.timing)
    """)
场景3:与Playwright集成(深度控制)

Playwright底层基于CDP,可以直接访问原始CDP会话

from playwright.sync_api import sync_playwright

def test_with_cdp_session():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        context = browser.new_context()
        page = context.new_page()
        
        # 创建CDP会话(直接访问Chrome DevTools Protocol)
        cdp_session = context.new_cdp_session(page)
        
        # ===== 高级网络控制 =====
        # 启用网络监控
        cdp_session.send("Network.enable")
        
        # 模拟特定网络条件
        cdp_session.send("Network.emulateNetworkConditions", {
            "offline": False,
            "downloadThroughput": 1.5 * 1024 * 1024 / 8,  # 1.5 Mbps
            "uploadThroughput": 750 * 1024 / 8,            # 750 Kbps
            "latency": 150                                 # 150ms延迟
        })
        
        # ===== 性能监控 =====
        cdp_session.send("Performance.enable")
        
        page.goto("https://example.com")
        
        # 获取性能指标
        metrics = cdp_session.send("Performance.getMetrics")
        print("Chrome性能指标:", metrics)
        
        # ===== 模拟设备 =====
        cdp_session.send("Emulation.setDeviceMetricsOverride", {
            "width": 390,
            "height": 844,
            "deviceScaleFactor": 3,
            "mobile": True,
            "screenOrientation": {"angle": 0, "type": "portraitPrimary"}
        })
        
        # 截图验证移动端渲染
        page.screenshot(path="mobile_view.png", full_page=True)
        
        browser.close()
场景4:视觉回归测试(结合截图对比)
class VisualRegressionTester:
    def __init__(self, cdp: CDPController):
        self.cdp = cdp
        self.baseline_dir = "./visual_baselines"
        self.current_dir = "./visual_current"
    
    def capture_full_page(self, name: str):
        """捕获完整页面截图(包含视口外内容)"""
        # 获取页面完整尺寸
        metrics = self.cdp.send("Page.getLayoutMetrics")
        content_width = metrics["contentSize"]["width"]
        content_height = metrics["contentSize"]["height"]
        
        # 设置视口为页面完整尺寸
        self.cdp.send("Emulation.setDeviceMetricsOverride", {
            "width": content_width,
            "height": content_height,
            "deviceScaleFactor": 1,
            "mobile": False
        })
        
        # 截图
        self.cdp.screenshot(f"{self.current_dir}/{name}.png")
        
        # 恢复默认视口
        self.cdp.send("Emulation.clearDeviceMetricsOverride")
    
    def compare_with_baseline(self, name: str):
        """对比当前截图与基线"""
        from PIL import Image
        import pixelmatch
        
        baseline = Image.open(f"{self.baseline_dir}/{name}.png")
        current = Image.open(f"{self.current_dir}/{name}.png")
        
        diff = pixelmatch(baseline, current, threshold=0.1)
        if diff > 100:  # 差异像素数阈值
            raise AssertionError(f"❌ 视觉回归测试失败: {name}, 差异像素: {diff}")
        print(f"✅ 视觉测试通过: {name}")

# 使用示例
def test_ui_regression():
    cdp = CDPController(ws_url)
    tester = VisualRegressionTester(cdp)
    
    # 测试关键页面
    pages = [
        ("首页", "https://app.com/home"),
        ("商品详情", "https://app.com/product/123"),
        ("购物车", "https://app.com/cart")
    ]
    
    for name, url in pages:
        cdp.send("Page.navigate", {"url": url})
        cdp.wait_event("Page.loadEventFired")
        time.sleep(2)  # 等待动画完成
        
        tester.capture_full_page(name)
        tester.compare_with_baseline(name)

4. 在UI自动化测试中的应用场景

chrome-cdp 通常更适合“Chrome浏览器专属场景”的自动化,尤其是需要高级操作的场景,比如:

  • 异常场景测试:模拟网络断连、网络延迟、弱网环境,测试页面的异常提示和恢复机制;
  • 缓存相关测试:清除localStorage、sessionStorage,测试页面的缓存逻辑是否正常;
  • 截图录屏自动化:测试过程中自动截图、录屏,用于测试报告留存或问题复现;
  • 复杂元素操作:处理iframe嵌套、动态加载元素,避免传统定位工具的报错问题;
  • 调试优化:实时获取浏览器日志、网络请求,快速定位自动化脚本的报错原因。

三、playwright-cli: 跨浏览器UI自动化“神器”

1. 什么是playwright-cli?

playwright-cli 是 Microsoft 推出的 Playwright 自动化测试工具的命令行版本,Playwright 本身是一个跨浏览器自动化工具,支持Chrome、Firefox、Edge、Safari等所有主流浏览器,而playwright-cli 则是它的“命令行简化版”——无需编写复杂代码,通过命令就能快速实现UI自动化,同时也支持代码集成,兼顾新手友好和实用性。

它的核心优势是“跨浏览器兼容”和“脚本自动生成”,能大幅降低UI自动化的上手门槛,提升脚本编写效率,解决传统自动化工具“跨浏览器适配难”的痛点。

2. 能解决哪些UI测试痛点?

如果说chrome-cdp 专注于Chrome的深度操控,那么playwright-cli 就是“全能型选手”。

它重点解决了以下几个痛点:

  • 解决“跨浏览器兼容测试繁琐”:一套脚本,可直接运行在Chrome、Firefox、Edge等所有主流浏览器,无需单独适配;
  • 解决“脚本编写效率低”:支持“录制脚本”,手动操作一遍,自动生成自动化脚本,新手也能快速上手;
  • 解决“元素定位难”:内置强大的元素定位引擎,自动识别动态元素、隐藏元素,无需手动编写定位表达式;
  • 解决“脚本稳定性差”:自动等待页面加载、元素渲染,避免因渲染延迟导致的报错,脚本成功率极高。

3. 在UI自动化测试中的应用场景

playwright-cli 适合“全场景、跨浏览器”的UI自动化,尤其是需要规模化、高效执行的场景,比如:

  • 跨浏览器兼容测试:一套脚本,批量运行在所有主流浏览器,快速排查浏览器兼容问题;
  • 常规UI自动化脚本编写:通过录制功能,快速生成脚本,减少手动编码工作量,适合新手或高频场景;
  • 回归测试:将常用测试场景录制为脚本,每次版本更新后,一键运行,快速完成回归测试;
  • 多环境测试:支持指定环境(开发、测试、生产),一键切换,无需修改脚本;
  • 并行测试:支持多浏览器、多用例并行执行,大幅缩短测试时间,提升测试效率。

4. 基础用法(新手友好,3步上手)

playwright-cli 的用法非常简单,核心分为“安装→录制→运行”三步,全程无需复杂配置,新手也能快速上手。

# 1. 安装Playwright CLI
npm install -g @playwright/cli@latest
npx playwright install  # 安装浏览器

# 2. 体验UI模式(强烈推荐)
npx playwright test --ui

# 3. 录制你的第一个测试
npx playwright codegen https://testfather.cn

常用命令一览

命令 功能
npx playwright test 运行所有测试
npx playwright test --ui UI模式交互式运行
npx playwright codegen 录制生成测试代码
npx playwright show-trace 查看测试追踪
npx playwright test --debug 调试模式运行

问题1:调试困难

传统方式:测试挂了,看日志猜原因,复现靠运气。

解决方案

  • Playwright CLI的UI模式:每一步操作都有前后截图,鼠标悬停就能看到DOM状态变化
  • CDP的Debugger Domain:可以在特定代码行设置断点,精确控制执行流程
# 开启UI模式,像看视频一样看测试执行
npx playwright test --ui

问题2:元素定位不稳定

传统方式Thread.sleep(3000)硬等,或者XPath一写就失效。

解决方案

  • Playwright的自动等待:内置智能等待机制,元素可操作时才执行
  • CDP的DOM查询:通过Runtime.evaluate直接执行JS获取元素,绕过复杂的Selector
# Playwright CLI直接执行JS获取元素
playwright-cli eval "document.querySelector('#app').innerText"

问题3:多浏览器兼容性

传统方式:Chrome一套、Firefox一套、Safari又一套。

解决方案

  • Playwright CLI的Project配置:一份配置,指定Chromium/Firefox/WebKit
  • CDP的通用性:Edge、Opera等Chromium内核浏览器都支持CDP
# 同时跑三个浏览器
npx playwright test --project=chromium --project=firefox --project=webkit

问题4:性能测试工具割裂

传统方式:Lighthouse、PageSpeed、WebPageTest来回切换。

解决方案

  • CDP的Performance Domain:浏览器原生指标采集,直接获取Chrome性能时间线、内存堆快照
  • Playwright的Tracing:自动生成性能追踪文件,可视化分析
# 生成性能追踪文件
npx playwright test --trace=on
npx playwright show-trace trace.zip

5. 实战用法

场景1:快速验证页面功能(零代码)

需求:测试登录流程是否正常,不写一行代码。

# 1. 录制操作生成代码
npx playwright codegen https://your-app.com/login

# 2. 直接在命令行执行测试
npx playwright test --headed --grep "login"

效果:Playwright自动打开浏览器,执行操作,生成可复用的测试脚本。

场景2:AI驱动的智能测试(自然语言转自动化)

需求:用自然语言描述,让AI自动执行测试。

结合Playwright CLI与AI Skills

# 用户输入:"打开百度,搜索'UI自动化',截图保存"
# AI自动生成并执行:

playwright-cli open https://www.baidu.com
playwright-cli type "#kw" "UI自动化"
playwright-cli click "#su"
playwright-cli screenshot --full-page

核心价值:测试人员用自然语言描述场景,AI自动转换为可执行命令

场景3:深度网络层测试(CDP高级用法)

需求:验证前端错误监控是否上报,拦截并分析上报请求。

// 通过CDP监听网络请求
const CDP = require('chrome-remote-interface');

async function testErrorReporting() {
  const client = await CDP();
  const { Network, Page } = client;
  
  // 开启网络监控
  await Network.enable();
  
  // 拦截所有请求
  Network.requestWillBeSent((params) => {
    if (params.request.url.includes('error-report')) {
      console.log('✅ 错误上报请求已捕获:', params.request);
    }
  });
  
  // 导航到测试页面
  await Page.navigate({ url: 'https://your-app.com' });
}

效果:可以验证错误监控、性能上报、埋点数据等前端"黑盒"行为。

场景4:移动端适配测试(视口模拟)

需求:测试页面在不同手机上的显示效果。

# Playwright CLI调整视口模拟iPhone
playwright-cli resize 375 667  # iPhone SE尺寸
playwright-cli screenshot --full-page mobile-view.png

# 或者使用内置设备配置
npx playwright test --project="Mobile Safari"

场景5:CI/CD集成(无头模式+报告)

需求:在Jenkins/GitHub Actions中自动运行测试。

# 无头模式运行,生成HTML报告
npx playwright test --reporter=html

# 查看报告
npx playwright show-report

# 多Worker并行,提速
npx playwright test --workers=4

四、实战建议:两个Skills搭配使用

chrome-cdpplaywright-cli 不是对立的,而是互补的——将两者搭配使用,chrome-cdp给了你浏览器底层的"上帝视角",playwright-cli给了你高效便捷的"操作界面"。两者结合,既能应对复杂的底层协议操作,又能享受现代自动化工具的便捷性。

能覆盖几乎所有UI测试场景,实现效率最大化,给大家一个实战搭配建议:

  1. 常规自动化场景:用 playwright-cli 录制脚本,实现跨浏览器兼容测试、常规回归测试,快速生成脚本,减少编码工作量;
  2. Chrome专属高级场景:用 chrome-cdp 补充高级操作,比如模拟网络异常、清除缓存、复杂元素调试等,解决playwright-cli 无法实现的细节场景;
  3. 脚本优化:用 playwright-cli 生成基础脚本,再用 chrome-cdp 的接口优化脚本细节(如提升定位稳定性、添加异常处理),让脚本更健壮;
  4. 调试排错:遇到脚本报错,先用 chrome-cdp 查看浏览器底层日志、网络请求,快速定位问题根源,再用playwright-cli 调整脚本。

五、新手入门建议

UI自动化测试的终极形态,不是写更多的代码,而是让工具理解你的意图。

chrome-cdpplaywright-cli,一个代表深度,一个代表广度。装上它们,你会发现:原来UI测试可以这么丝滑。

名称 项目地址
chrome-cdp https://github.com/pasky/chrome-cdp-skill
playwright-cli https://github.com/microsoft/playwright-cli

如果是UI测试新手,建议先从 playwright-cli 入手——它的录制功能能让你快速上手,感受到自动化测试的便捷,建立信心;等熟悉了基础操作后,再学习 chrome-cdp,补充高级操作能力,两者结合,就能轻松应对所有UI测试场景。

如果是有一定经验的测试同学,建议直接掌握两者的搭配用法——用playwright-cli 提升效率,用chrome-cdp 解决难点,能大幅优化你的工作流,摆脱重复劳动,把精力放在更有价值的测试设计上。

UI测试的核心是“高效、稳定、全面”,而chrome-cdpplaywright-cli,正是帮你实现这一目标的两个关键技能。赶紧动手尝试起来,相信你会发现,UI测试其实可以很轻松~

更多、更详细、全面的AI测试、AI编程、AI技能进阶系统化实战教程,欢迎加入:「狂师. AI进化社」一起探讨学习!