build: add webdriver build rule

Sets up a build rule to use Selenium Webdriver for e2e tests.

(cherry picked from commit 4d2dc1fb08)
This commit is contained in:
Kristiyan Kostadinov
2026-08-14 09:07:04 +02:00
committed by Jessica Janiuk
parent efbe456748
commit 31c624e203
3 changed files with 53 additions and 29 deletions
-27
View File
@@ -1,27 +0,0 @@
load("@devinfra//bazel/spec-bundling:index.bzl", _spec_bundle = "spec_bundle")
load("@rules_browsers//protractor_test:index.bzl", _protractor_test = "protractor_test")
def protractor_web_test_suite(name, deps, **kwargs):
_spec_bundle(
name = "%s_bundle" % name,
deps = deps,
external = ["protractor", "selenium-webdriver"],
)
_protractor_test(
name = name,
deps = [":%s_bundle" % name],
extra_config = {
"useAllAngular2AppRoots": True,
"allScriptsTimeout": 120000,
"getPageTimeout": 120000,
"jasmineNodeOpts": {
"defaultTimeoutInterval": 120000,
},
},
data = [
"//:node_modules/protractor",
"//:node_modules/selenium-webdriver",
],
**kwargs
)
+51
View File
@@ -0,0 +1,51 @@
load("@devinfra//bazel/spec-bundling:index.bzl", "spec_bundle")
load("@rules_browsers//server_test:index.bzl", "server_test")
load("//tools/bazel:jasmine_test.bzl", "jasmine_test")
def webdriver_test(name, deps, server, tags = [], data = [], external = [], **kwargs):
spec_bundle(
name = "%s_bundle" % name,
deps = deps,
external = ["selenium-webdriver"] + external,
platform = "node",
config = {
"banner": {
"js": """import {createRequire as __cjsCompatRequire} from 'module';
const require = __cjsCompatRequire(import.meta.url);
const __filename = import.meta.filename;
const __dirname = import.meta.dirname;""",
},
"target": ["ES2022"],
"format": "esm",
},
)
jasmine_test(
name = "%s_jasmine_test" % name,
tags = tags + ["manual"],
data = data + [
":%s_bundle" % name,
"@rules_browsers//browsers/chromium",
"//:node_modules/selenium-webdriver",
],
env = {
"CHROME_HEADLESS_BIN": "$(CHROME-HEADLESS-SHELL)",
"CHROMEDRIVER": "$(CHROMEDRIVER)",
},
toolchains = ["@rules_browsers//browsers/chromium:toolchain_alias"],
**kwargs
)
server_test(
name = "%s_chromium" % name,
server = server,
test = ":%s_jasmine_test" % name,
tags = tags + ["e2e"],
)
native.test_suite(
name = name,
tests = [
":%s_chromium" % name,
],
)
+2 -2
View File
@@ -14,7 +14,7 @@ load("//tools/bazel:esbuild.bzl", _esbuild = "esbuild", _esbuild_checked_in = "e
load("//tools/bazel:jasmine_test.bzl", _angular_jasmine_test = "angular_jasmine_test", _jasmine_test = "jasmine_test", _zone_compatible_jasmine_test = "zone_compatible_jasmine_test", _zoneless_jasmine_test = "zoneless_jasmine_test")
load("//tools/bazel:js_defs.bzl", _js_binary = "js_binary", _js_run_binary = "js_run_binary", _js_test = "js_test")
load("//tools/bazel:npm_packages.bzl", _ng_package = "ng_package", _npm_package = "npm_package")
load("//tools/bazel:protractor_test.bzl", _protractor_web_test_suite = "protractor_web_test_suite")
load("//tools/bazel:webdriver_test.bzl", _webdriver_test = "webdriver_test")
load("//tools/bazel:tsec.bzl", _tsec_test = "tsec_test")
load("//tools/bazel:web_test.bzl", _ng_web_test_suite = "ng_web_test_suite", _web_test = "web_test", _zoneless_web_test_suite = "zoneless_web_test_suite")
@@ -36,7 +36,7 @@ web_test = _web_test
sass_binary = _sass_binary
sass_library = _sass_library
npm_sass_library = _npm_sass_library
protractor_web_test_suite = _protractor_web_test_suite
webdriver_test = _webdriver_test
esbuild_checked_in = _esbuild_checked_in
http_server = _http_server
api_golden_test = _api_golden_test