Hello Playwright:简化部署方式

Posted MyIO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hello Playwright:简化部署方式相关的知识,希望对你有一定的参考价值。

前言

​上次的文章​​发表后,有网友留言问,有不有简化部署的方式:

Hello

下面,提供 2 种可行的方案。

方案 1. Copy

其实 Playwright 默认是到​​C:\\Users\\用户名\\AppData\\Local\\ms-playwright​​文件夹下查找依赖的浏览器,我们只需将本机文件夹复制到部署机器的对应文件夹即可。

但更简便的方式,是将浏览器也放到发布文件夹下一起部署。

具体做法如下:

  • 修改代码,设置查找依赖浏览器路径的环境变量:
static async Task Main(string[] args)

Environment.SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ms-playwright"));

var playwright = await Playwright.CreateAsync();

...
  • 修改项目文件,设置发布时执行 Task,复制 ms-playwright 文件夹到发布文件夹下:
<Target Name="PublishPlaywright" AfterTargets="Publish">
<ItemGroup>
<PlaywrightFiles Include="$(LOCALAPPDATA)\\ms-playwright\\**\\*.*" />

</ItemGroup>
<Copy
SourceFiles="@(PlaywrightFiles)"
DestinationFiles="$(PublishDir)\\ms-playwright\\%(RecursiveDir)%(Filename)%(Extension)"
/>
</Target>
  • 按照正常流程发布

现在将发布文件夹复制到另一台机器上,无需运行浏览器安装命令,直接运行控制台程序。

控制台程序将读取 EXE 当前所在文件夹下的​​ms-playwright​​文件夹,获取依赖的浏览器。

但是,这种方式有个明显的缺点——开发和部署的计算机的操作系统必须一致,比如, Windows 开发机上的浏览器文件不能发布到 Linux 上运行。

这时,可以采用方案 2。

方案 2. 自动安装

方案 2 还是需要运行浏览器安装命令,但是从手工运行改成由代码运行:

static async Task Main(string[] args)

Console.WriteLine("Start download chromium");
var exitCode = Microsoft.Playwright.Program.Main(new[] "install", "chromium" );
if (exitCode != 0)

throw new Exception($"Playwright exited with code exitCode");


var playwright = await Playwright.CreateAsync();

...

需要注意的是,部署模式一定要选“独立”,否则对应操作系统的安装脚本不会复制到发布文件夹。(我发现 v1.21 存在此 bug,已提交 issue 并修复)

按照正常流程发布,直接运行控制台程序。

控制台程序将自动执行浏览器安装命令:

Hello

结论

2 种简化部署方案,是否能够满足你的需要?欢迎留言反馈!

以上是关于Hello Playwright:简化部署方式的主要内容,如果未能解决你的问题,请参考以下文章

Hello Playwright:基本概念

Hello Playwright:执行 JavaScript 代码

Hello Playwright:与元素交互

Hello Playwright:等待页面加载

Hello Playwright:自动化测试

Hello Playwright:查找元素