Bazel 5.2.0使用rules_webtesting报.bzl无对应包如何解决
问题根因
报错由两处配置错误共同导致:
http_archive中填写的rules_webtesting下载地址路径拼接错误,且未配置strip_prefix参数。GitHub自动生成的源码压缩包解压后,所有仓库文件都存放在带提交哈希前缀的子目录下,未指定strip_prefix时,Bazel会将压缩包顶层目录识别为外部仓库根目录,该目录下不存在BUILD文件,因此触发找不到.bzl文件所属包的错误。- 配置遗漏了浏览器依赖仓库的初始化步骤,即使修复路径问题,后续构建也会出现浏览器相关目标不存在的报错。
可正常运行的配置方案
1. WORKSPACE.bazel配置
替换原有rules_webtesting相关配置为以下内容:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_webtesting", sha256 = "e9b1bb60bd1b9ef9ea4a2d4e0e4f08c12b8a86f0a7f83e35c027c0a40312a16b", strip_prefix = "rules_webtesting-581b1557e382f93419da6a03b91a45c2ac9a9ec8", urls = [ "https://github.com/bazelbuild/rules_webtesting/archive/581b1557e382f93419da6a03b91a45c2ac9a9ec8.tar.gz", ], ) load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") web_test_repositories() # 初始化Chromium浏览器相关依赖 load("@io_bazel_rules_webtesting//browsers:repositories.bzl", "browser_repositories") browser_repositories(chromium = True)
注:若首次拉取时提示sha256校验不匹配,可直接根据Bazel输出的实际校验值替换配置中的sha256字段内容。
2. BUILD.bazel配置
原有BUILD.bazel配置无需修改,保持如下内容即可:
load("@io_bazel_rules_webtesting//web:py.bzl", "py_web_test_suite") py_web_test_suite( name = "browser_test", srcs = ["browser_test.py"], browsers = [ "@io_bazel_rules_webtesting//browsers:chromium-local", ], local = True, deps = ["@io_bazel_rules_webtesting//testing/web"], )
3. 测试脚本
原有browser_test.py脚本结构正确,可在注释位置补充具体测试逻辑。
执行验证
- 先清理本地缓存的错误外部仓库:执行命令
bazel clean --expunge - 重新执行构建命令
bazel build //...,原有包加载错误会消失 - 执行测试命令
bazel test //:browser_test即可启动基于Chromium的Web自动化测试,首次运行会自动拉取适配版本的Chromium浏览器二进制文件,无需手动全局安装浏览器。
内容的提问来源于stack exchange,提问作者Vertexwahn
相关产品推荐
相关产品推荐

