莫方教程网

专业程序员编程教程与实战案例分享

UI自动化测试框架:Playwright 官方教程(三)—— 架构与通信机制

一、Playwright 架构

  1. 浏览器和驱动程序的连接: Playwright 通过与浏览器的 DevTools 协议(Chrome DevTools Protocol,CDP)进行通信,控制浏览器的行为。每个浏览器实例(如 Chromium、Firefox 和 WebKit)都有一个对应的驱动程序,用于与 Playwright 的 API 交互。
  2. 当启动一个浏览器实例时,Playwright 启动并连接到浏览器的调试协议,通过这一协议,它能够控制浏览器的行为。
  3. 与浏览器页面的交互: Playwright 通过创建页面(Page 对象)来控制浏览器窗口。这些页面模拟的是浏览器中的一个 tab 或浏览器上下文。你可以在页面上执行操作。
  4. 页面操作会通过 DevTools 协议传递给浏览器,浏览器根据命令进行响应,然后 Playwright 会接收浏览器的反馈并继续执行后续操作。

二、Playwright通信机制

Playwright 通过直接与浏览器的 DevTools 协议 进行通信。DevTools 是浏览器内置的调试和自动化接口,允许外部工具直接控制浏览器的行为。Playwright 不依赖于中间的 WebDriver,而是直接与浏览器的 DevTools API 进行通信。

客户端代码 (Python/JavaScript) <----WebSocket----> Playwright <----DevTools Protocol----> 浏览器

import asyncio
from playwright.async_api import async_playwright

async def run():
    # 启动 Chromium 浏览器
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()

        # 打开一个网页
        await page.goto("https://www.google.com")

        # 查找页面上的元素并与之交互
        await page.fill("input[name='q']", "Playwright communication mechanism")
        await page.press("input[name='q']", "Enter")

        # 关闭浏览器
        await browser.close()

# 运行 Playwright 脚本
asyncio.run(run())

Playwright 的通信步骤:

  • 客户端代码调用 p.chromium.launch(),这会启动 Chromium 并通过 DevTools 协议与浏览器建立 WebSocket 连接。
  • page.goto() 直接通过 DevTools 协议发送指令到浏览器,要求加载指定的 URL。
  • page.fill() 和 page.press() 通过 DevTools 协议发送指令,要求与页面上的元素交互(如输入文本、按下键盘)。
  • 浏览器执行这些指令,并通过 WebSocket 连接将结果返回给 Playwright,最终返回到客户端代码。

总结:

Playwright 直接与浏览器的 DevTools 协议 进行通信,绕过了外部的 WebDriver,减少了中间层的延迟。

WebSocket 连接用于客户端与浏览器之间的双向通信,允许实时发送和接收指令以及浏览器状态。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    滇ICP备2024046894号-1