[microsoft/playwright][问题] 解决 Playwright 版本和 Docker 镜像匹配时抱怨浏览器不匹配的问题。

2024-05-09 975 views
6

当我使用新版本的 Playwright Docker 映像时,我被告知需要运行npx playwright install以使浏览器与我正在使用的新版本 Playwright 相匹配,即使我使用的是匹配的 Docker 映像。我认为 Docker 镜像附带了所需的浏览器,因此在更新 Playwright 版本时需要更新 Docker 镜像。我在这方面有错吗? Playwright Docker 镜像没有预装浏览器吗?与这个问题相关的是现在已关闭的问题,我被告知我不需要安装任何 deps,因为 Docker 映像已经拥有所需的一切同样相关的是这个已关闭的问题,我被告知这可能是因为我可以有多个Playwright 打包在我的 package.json 文件中。我只有"@playwright/test": "^1.26.0",我的开发依赖,没有其他剧作家的依赖。它在我的本地计算机上运行良好,但在 Docker 映像(映像 mcr.microsoft.com/playwright:v1.26.0-focal)上存在此问题。

注意 - 我暂时不寻求解决此问题。我没有准备好可以分享的存储库(因此这是一个问题而不是问题)。我正在寻找答案的问题是,“Playwright Docker 映像是否需要安装浏览器,或者是否已预安装”?

谢谢你!

回答

4

写完这篇文章后,我在 Playwright 文档中看到以下内容:“ Dockerfile.focal可用于在 Docker 环境中运行 Playwright 脚本。这些映像包含在 Docker 容器中运行浏览器所需的所有依赖项,还包含浏览器本身”。那么我可以得出结论,浏览器应该在那里,但它们没有被识别。那么,新问题。我该如何解决这个问题?

0

看来删除npm ci解决了这个问题。我不确定为什么这会解决它,因为没有它导致了这个问题。如果能确切地知道在 Docker 中运行 Playwright for CI 时需要什么最低限度的 shell 脚本,那就太好了。 CI 页面提供了 shell 脚本,但它是在没有 Docker 映像的情况下使用的脚本。我们可以把它写进手册吗?

4

如果能确切地知道在 Docker 中运行 Playwright for CI 时需要什么最低限度的 shell 脚本,那就太好了。

我不明白这个问题。你是在谈论记录 Bash 的最低版本还是其他什么?这里的shell脚本是什么意思?

9

当升级到 v1.26.0@playwright/test以及 CI 中匹配的 Docker 镜像时,我们也遇到了奇怪的“缺少浏览器”的情况。

目前正在尝试在我们的 CI 环境 (Circle CI) 中进行故障排除,但运气不佳。任何帮助将不胜感激。

1

将 npm 包和 Docker 镜像降级到 v1.25.2,发现版本不匹配。该映像包含以下预安装内容:

  • 铬1015
  • 火狐-1335
  • webkit-1683

然而,测试执行正在寻求以下内容:

  • 铬-1019
  • 火狐-1344
  • webkit-1699

为什么版本不匹配和缺失?

6

@rwoll 类似于此处给出的步骤 2 和 3 的说明:

# Install NPM packages
npm ci
# or
npm install

# Install Playwright browsers and dependencies
npx playwright install --with-deps

npx playwright test

基本上是第 2 步和第 3 步,但面向使用 Docker 映像。

5

谢谢,@eatonjl!我们可以添加一些文档,但是您的问题已经解决了吗?

npx playwright install --with-deps如果您满足以下条件,则在 Docker 中不需要:

  1. 有一个package.json + package-lock.json
  2. 运行npm ci/npm i所以他们使用 (1) 中的所述版本
  3. 使用固定/标记到与 (1) 中引用的 Playwright 主要版本相匹配的 Playwright 主要版本的官方图像。
  4. 不要运行npx playwright install(官方图像预装了特定版本的浏览器和依赖项)

如果上述情况不全部成立,您可能会遇到版本不匹配的情况。

@fredboyle 这可能也是你遇到的情况。 (随意用您的 Dockerfile、package.json 和 package-lock.json 打开一个新问题,可以更直接地对其进行评论。)

4

@rwoll 感谢您的反馈。我确实有一个 package.json + package-lock.json。为了让它工作,我没有跑步npm ci / npm I。我正在使用 Playwright 版本 1.26 和 Docker build mcr.microsoft.com/playwright:v1.26.0-focal。我没有跑步npx playwright install

这是我更新到 1.26 时遇到的情况,它导致了不匹配:

npm ci
npx playwright test tests/SmokeTests --project=webkit

通过将其切换到这个,我能够让它工作: npx playwright test tests/SmokeTests --project=webkit

我对此感到不舒服,因为我npm ci 过去曾经历过退出的问题

3

@eatonjl 听起来好像容器中的 Dockerfile、package.json/package-lock.json (或者它们不在正确的位置)中的某些内容未对齐。

运行npm ci不应产生任何不匹配。我已经验证它在这里工作:https://github.com/rwoll/playwright-docker-repro

您能否分叉该存储库并更改它,使其以您观察到的方式损坏?在添加更多文档之前,我想确保我了解问题的根源。

谢谢!

2

会做。你让我思考,所以我检查了升级到 1.26 时对文件所做的更改。节点模块文件夹和根目录中是否应该有一个 package-lock.json 文件?这就是我所看到的(以及根目录中的 package.json )。

9

node_modules 文件夹和根目录中是否应该有一个 package-lock.json 文件?

我不知道。您可以尝试node_modules完全删除文件夹并进行全新操作npm i,看看会发生什么。

0

会做。

9

@rwoll 我恢复了我的更改,因此我的代码回到了 1.24.2。我删除了node_modules文件夹以及根文件夹中的package.json和package-lock.json文件。然后我运行 npm init playwright@latest。它安装了 Playwright 1.26。但是,我注意到 package.json 和 package-lock.json 文件中仍然提到了版本 1.24.2。很有意思。

3

然后我运行 npm init playwright@latest。它安装了 Playwright 1.26。但是,我注意到 package.json 和 package-lock.json 文件中仍然提到了版本 1.24.2。很有意思。

npm init是初始化命令,不是升级命令。要更新 npm 包,您应该使用npm update https://docs.npmjs.com/cli/v8/commands/npm-updatenpm install @playwright/test@latest.如果您已经有一个 Playwright 测试项目,则不需要使用命令npm init playwright

按照上述,结束。请改为提交https://github.com/microsoft/create-playwright/issues/43

5

很高兴知道。没有关于运行什么来更新 Playwright 的文档,因此这很有帮助。我想我解决了这个问题(感谢您的帮助,@rwoll)。我相信问题出在 node_modules 文件夹上。我认为该文件夹一度被推送到存储库,然后被添加到 gitignore。因此,我认为该文件夹导致了问题。为了解决这个问题,我删除了 gitignore 并删除了该文件夹。我将其推送到存储库,以便它删除该文件夹。然后我(回到我的本地计算机上)将该文件夹重新添加到 gitignore 并升级。我必须重新安装其他依赖项,但它有效。不知道到底为什么,但它确实有效。谢谢你! @fredboyle你可能想检查一下你的问题是否是出于同样的原因。