You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mac端基于C#后端运行Playwright Safari自动化测试

迁移Mac/Safari Selenium远程测试到Playwright(C#/Reqnroll/MSTest)

一、Mac Mini端准备

先在你的Mac Mini上配置Playwright Server,替代原有的Selenium Server:

  1. 安装Node.js(要求版本16及以上)
  2. 全局安装Playwright:
    npm install -g playwright
    
  3. 安装Safari对应的Playwright驱动:
    playwright install safari
    
  4. 启用Safari远程自动化:打开Safari偏好设置→高级→勾选「显示开发菜单」,再在顶部菜单「开发」中选择「允许远程自动化」
  5. 启动Playwright Server,允许外部设备访问:
    playwright server --host 0.0.0.0 --port 4444
    

二、Windows端测试代码改造

替换原有的Selenium RemoteWebDriver逻辑,改用Playwright的远程连接方案:

1. 依赖准备

确保测试项目已安装以下NuGet包:

  • Microsoft.Playwright
  • Reqnroll
  • MSTest.TestFramework 和 MSTest.TestAdapter

2. 替换Driver定义

把原有的RemoteWebDriver替换为Playwright核心对象:

using Microsoft.Playwright;
using Reqnroll;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
[Binding]
public class Hooks
{
    protected static IPlaywright Playwright { get; set; }
    protected static IBrowser Browser { get; set; }
    protected static IPage Page { get; set; }
    private readonly string _macMiniWsEndpoint = "ws://00.000.0.00:4444/playwright/safari"; // 替换为你的Mac Mini实际IP

3. 修改BeforeScenario逻辑

替换原Selenium初始化代码为Playwright远程连接逻辑:

[BeforeScenario]
public async Task BeforeScenario()
{
    // 初始化Playwright实例
    Playwright = await Playwright.CreateAsync();

    // 连接到Mac Mini上的Playwright Server
    Browser = await Playwright.Safari.ConnectAsync(new BrowserConnectOptions
    {
        WsEndpoint = _macMiniWsEndpoint
    });

    // 创建最大化窗口的页面(对应原Selenium的窗口最大化操作)
    Page = await Browser.NewPageAsync(new BrowserNewPageOptions
    {
        Args = new[] { "--start-maximized" },
        // 匹配原Selenium的PageLoadStrategy.Normal,对应Playwright的Load状态
        DefaultNavigationWaitUntil = WaitUntilState.Load
    });
}

4. 添加AfterScenario清理逻辑

测试结束后释放Playwright资源:

[AfterScenario]
public async Task AfterScenario()
{
    await Page.CloseAsync();
    await Browser.CloseAsync();
    Playwright.Dispose();
}

关键注意事项

  • Playwright使用WebSocket连接远程Server,端点格式为ws://<mac-ip>:<port>/playwright/safari,和Selenium的HTTP端点格式不同
  • 确保Mac Mini的防火墙允许4444端口的WebSocket流量
  • 若需单独调整某个页面的加载策略,可在Page.GotoAsync时通过WaitUntil参数指定,例如:
    await Page.GotoAsync("https://your-test-url.com", new PageGotoOptions
    {
        WaitUntil = WaitUntilState.Load
    });
    

内容的提问来源于stack exchange,提问作者Kev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:07:34