Skip to content

Commit 0b7e3d8

Browse files
committed
Expose local browser drivers through bazel
1 parent 0107b0e commit 0b7e3d8

File tree

6 files changed

+143
-8
lines changed

6 files changed

+143
-8
lines changed

WORKSPACE

+4
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,7 @@ k8s_defaults(
239239
kind = "deployment",
240240
namespace = "selenium",
241241
)
242+
243+
load("//common:repositories.bzl", "pin_browsers")
244+
245+
pin_browsers()

common/BUILD.bazel

+38-3
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,58 @@
1+
package(default_visibility = ["//visibility:public"])
2+
13
config_setting(
24
name = "linux",
35
constraint_values = ["@platforms//os:linux"],
4-
visibility = ["//visibility:public"],
56
)
67

78
config_setting(
89
name = "macos",
910
constraint_values = ["@platforms//os:macos"],
10-
visibility = ["//visibility:public"],
1111
)
1212

1313
config_setting(
1414
name = "windows",
1515
constraint_values = ["@platforms//os:windows"],
16-
visibility = ["//visibility:public"],
1716
)
1817

1918
# Are we creating a stamped build?
2019
config_setting(
2120
name = "stamp",
2221
values = {"stamp": "true"},
2322
)
23+
24+
alias(
25+
name = "chromedriver",
26+
actual = "@local_drivers//:chromedriver",
27+
)
28+
29+
config_setting(
30+
name = "use_local_chromedriver",
31+
flag_values = {
32+
"@local_drivers//:use_chromedriver": "true",
33+
},
34+
)
35+
36+
alias(
37+
name = "geckodriver",
38+
actual = "@local_drivers//:geckodriver",
39+
)
40+
41+
config_setting(
42+
name = "use_local_geckodriver",
43+
flag_values = {
44+
"@local_drivers//:use_geckodriver": "true",
45+
},
46+
)
47+
48+
alias(
49+
name = "msedgedriver",
50+
actual = "@local_drivers//:msedgedriver",
51+
)
52+
53+
config_setting(
54+
name = "use_local_msedgedriver",
55+
flag_values = {
56+
"@local_drivers//:use_msedgedriver": "true",
57+
},
58+
)

common/private/drivers.bzl

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
def _symlink_if_available(repository_ctx, driver_name):
3+
driver = repository_ctx.which(driver_name)
4+
5+
if driver:
6+
repository_ctx.symlink(driver, driver_name)
7+
else:
8+
repository_ctx.file(driver_name, "")
9+
10+
return "\n".join([
11+
"bool_setting(name = \"use_%s\", build_setting_default = %s)" % (driver_name, driver != None),
12+
"exports_files([\"%s\"])" % driver_name,
13+
"",
14+
])
15+
16+
17+
def _local_drivers_impl(repository_ctx):
18+
contents = [
19+
"load(\"@bazel_skylib//rules:common_settings.bzl\", \"bool_setting\")",
20+
"",
21+
"package(default_visibility = [\"//visibility:public\"])",
22+
_symlink_if_available(repository_ctx, "chromedriver"),
23+
_symlink_if_available(repository_ctx, "msedgedriver"),
24+
_symlink_if_available(repository_ctx, "geckodriver"),
25+
]
26+
27+
repository_ctx.file("BUILD.bazel", "\n".join(contents))
28+
29+
_local_drivers = repository_rule(
30+
_local_drivers_impl,
31+
)
32+
33+
def local_drivers():
34+
_local_drivers(name = "local_drivers")

common/private/selenium_test.bzl

+20-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
load(
2+
"//java:browsers.bzl",
3+
"chrome_data",
4+
"chrome_jvm_flags",
5+
"edge_data",
6+
"edge_jvm_flags",
7+
"firefox_data",
8+
"firefox_jvm_flags")
9+
110
DEFAULT_BROWSER = "firefox"
211

312
_COMMON_TAGS = [
@@ -9,12 +18,14 @@ _COMMON_TAGS = [
918
BROWSERS = {
1019
"chrome": {
1120
"deps": ["//java/client/src/org/openqa/selenium/chrome"],
12-
"jvm_flags": ["-Dselenium.browser=chrome"],
21+
"jvm_flags": ["-Dselenium.browser=chrome"] + chrome_jvm_flags,
22+
"data": chrome_data,
1323
"tags": _COMMON_TAGS + ["chrome"],
1424
},
1525
"edge": {
1626
"deps": ["//java/client/src/org/openqa/selenium/edge"],
17-
"jvm_flags": ["-Dselenium.browser=edge"],
27+
"jvm_flags": ["-Dselenium.browser=edge"] + edge_jvm_flags,
28+
"data": edge_data,
1829
"tags": _COMMON_TAGS + ["edge"],
1930
},
2031
"edgehtml": {
@@ -24,11 +35,13 @@ BROWSERS = {
2435
"//common:windows": ["-Dselenium.skiptest=false"],
2536
"//conditions:default": ["-Dselenium.skiptest=true"],
2637
}),
38+
"data": [],
2739
"tags": _COMMON_TAGS + ["exclusive", "edgehtml"],
2840
},
2941
"firefox": {
3042
"deps": ["//java/client/src/org/openqa/selenium/firefox"],
31-
"jvm_flags": ["-Dselenium.browser=ff"],
43+
"jvm_flags": ["-Dselenium.browser=ff"] + firefox_jvm_flags,
44+
"data": firefox_data,
3245
"tags": _COMMON_TAGS + ["firefox"],
3346
},
3447
"ie": {
@@ -38,6 +51,7 @@ BROWSERS = {
3851
"//common:windows": ["-Dselenium.skiptest=false"],
3952
"//conditions:default": ["-Dselenium.skiptest=true"],
4053
}),
54+
"data": [],
4155
"tags": _COMMON_TAGS + ["exclusive", "ie"],
4256
},
4357
"safari": {
@@ -47,6 +61,7 @@ BROWSERS = {
4761
"//common:macos": ["-Dselenium.skiptest=false"],
4862
"//conditions:default": ["-Dselenium.skiptest=true"],
4963
}),
64+
"data": [],
5065
"tags": _COMMON_TAGS + ["exclusive", "safari"],
5166
},
5267
}
@@ -83,7 +98,7 @@ def selenium_test(name, test_class, size = "medium", browsers = None, **kwargs):
8398
size = size,
8499
jvm_flags = BROWSERS[browser]["jvm_flags"] + jvm_flags,
85100
tags = BROWSERS[browser]["tags"] + tags,
86-
data = data,
101+
data = BROWSERS[browser]["data"] + data,
87102
**stripped_args
88103
)
89104

@@ -97,7 +112,7 @@ def selenium_test(name, test_class, size = "medium", browsers = None, **kwargs):
97112
"-Dselenium.browser.remote.path=$(location //java/server/src/org/openqa/selenium/grid:selenium_server_deploy.jar)",
98113
],
99114
tags = BROWSERS[browser]["tags"] + tags + ["remote"],
100-
data = data + [
115+
data = BROWSERS[browser]["data"] + data + [
101116
"//java/server/src/org/openqa/selenium/grid:selenium_server_deploy.jar",
102117
],
103118
**stripped_args

common/repositories.bzl

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
2+
load("//common/private:drivers.bzl", "local_drivers")
3+
4+
def pin_browsers():
5+
local_drivers()
6+

java/browsers.bzl

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
chrome_data = select({
2+
"//common:use_local_chromedriver": ["//common:chromedriver"],
3+
"//conditions:default": []
4+
})
5+
6+
chrome_jvm_flags = select({
7+
"//common:use_local_chromedriver": [
8+
"-Dwebdriver.chrome.driver=$(location //common:chromedriver)",
9+
],
10+
"//conditions:default": [
11+
"-Dselenium.skiptest=true",
12+
],
13+
})
14+
15+
firefox_data = select({
16+
"//common:use_local_geckodriver": ["//common:geckodriver"],
17+
"//conditions:default": []
18+
})
19+
20+
firefox_jvm_flags = select({
21+
"//common:use_local_geckodriver": [
22+
"-Dwebdriver.gecko.driver=$(location //common:geckodriver)",
23+
],
24+
"//conditions:default": [
25+
"-Dselenium.skiptest=true",
26+
],
27+
})
28+
29+
edge_data = select({
30+
"//common:use_local_msedgedriver": ["//common:msedgedriver"],
31+
"//conditions:default": []
32+
})
33+
34+
edge_jvm_flags = select({
35+
"//common:use_local_msedgedriver": [
36+
"-Dwebdriver.edge.driver=$(location //common:msedgedriver)",
37+
],
38+
"//conditions:default": [
39+
"-Dselenium.skiptest=true",
40+
],
41+
})

0 commit comments

Comments
 (0)