| 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"]) |