load( "//common:browsers.bzl", "COMMON_TAGS", "chrome_data", "edge_data", "firefox_beta_data", "firefox_data", ) load( "//java:browsers.bzl", "chrome_jvm_flags", "edge_jvm_flags", "firefox_beta_jvm_flags", "firefox_jvm_flags", ) load(":junit5_test.bzl", "junit5_test") DEFAULT_BROWSER = "firefox" BROWSERS = { "chrome": { "deps": ["//java/src/org/openqa/selenium/chrome"], "jvm_flags": ["-Dselenium.browser=chrome"] + chrome_jvm_flags, "data": chrome_data, "tags": COMMON_TAGS + ["chrome"], }, "edge": { "deps": ["//java/src/org/openqa/selenium/edge"], "jvm_flags": ["-Dselenium.browser=edge"] + edge_jvm_flags, "data": edge_data, "tags": COMMON_TAGS + ["edge"], }, "firefox": { "deps": ["//java/src/org/openqa/selenium/firefox"], "jvm_flags": ["-Dselenium.browser=ff"] + firefox_jvm_flags, "data": firefox_data, "tags": COMMON_TAGS + ["firefox"], }, "firefox-beta": { "deps": ["//java/src/org/openqa/selenium/firefox"], "jvm_flags": ["-Dselenium.browser=ff"] + firefox_beta_jvm_flags, "data": firefox_beta_data, "tags": COMMON_TAGS + ["firefox", "firefox-beta"], }, "ie": { "deps": ["//java/src/org/openqa/selenium/ie"], "jvm_flags": ["-Dselenium.browser=ie"] + select({ "@selenium//common:windows": ["-Dselenium.skiptest=false"], "@selenium//conditions:default": ["-Dselenium.skiptest=true"], }), "data": [], "tags": COMMON_TAGS + ["exclusive-if-local", "ie", "skip-rbe"], }, "safari": { "deps": ["//java/src/org/openqa/selenium/safari"], "jvm_flags": ["-Dselenium.browser=safari"] + select({ "@selenium//common:macos": ["-Dselenium.skiptest=false"], "@selenium//conditions:default": ["-Dselenium.skiptest=true"], }), "data": [], "tags": COMMON_TAGS + ["exclusive-if-local", "safari", "skip-rbe"], }, } DEFAULT_BROWSERS = [b for b in BROWSERS.keys() if b != "ie"] def selenium_test(name, test_class, size = "medium", browsers = DEFAULT_BROWSERS, **kwargs): if len(browsers) == 0: fail("At least one browser must be specified.") default_browser = DEFAULT_BROWSER if DEFAULT_BROWSER in browsers else browsers[0] test_name = test_class.rpartition(".")[2] data = kwargs["data"] if "data" in kwargs else [] jvm_flags = kwargs["jvm_flags"] if "jvm_flags" in kwargs else [] tags = kwargs["tags"] if "tags" in kwargs else [] remote = False if "selenium-remote" in tags: tags.remove("selenium-remote") remote = True stripped_args = dict(**kwargs) stripped_args.pop("data", None) stripped_args.pop("jvm_flags", None) stripped_args.pop("tags", None) inherited_env = stripped_args.pop("env_inherit", []) + ["REMOTE_BUILD"] all_tests = [] for browser in browsers: if not browser in BROWSERS: fail("Unrecognized browser: " + browser) test = name if browser == default_browser else "%s-%s" % (name, browser) junit5_test( name = test, test_class = test_class, size = size, jvm_flags = BROWSERS[browser]["jvm_flags"] + jvm_flags, # Only allow linting on the default test tags = BROWSERS[browser]["tags"] + tags + ([] if test == name else ["no-lint"]), data = BROWSERS[browser]["data"] + data, env_inherit = inherited_env, **stripped_args ) if browser == default_browser: native.alias( name = "%s-%s" % (name, browser), actual = test, ) all_tests.append(":%s" % test) if remote: junit5_test( name = "%s-remote" % test, test_class = test_class, size = size, jvm_flags = BROWSERS[browser]["jvm_flags"] + jvm_flags + [ "-Dselenium.browser.remote=true", ], # No need to lint remote tests as the code for non-remote is the same and they get linted tags = BROWSERS[browser]["tags"] + tags + ["remote-browser", "no-lint"], data = BROWSERS[browser]["data"] + data + [ "@selenium//java/src/org/openqa/selenium/grid:selenium_server", ], **stripped_args ) all_tests.append(":%s-remote" % test) # Handy way to run everything native.test_suite(name = "%s-all-browsers" % name, tests = all_tests, tags = tags + ["manual"])