| load("@rules_ruby//ruby:defs.bzl", "rb_library", "rb_test") |
| load( |
| "//common:browsers.bzl", |
| "COMMON_TAGS", |
| "chrome_beta_data", |
| "chrome_data", |
| "edge_data", |
| "firefox_beta_data", |
| "firefox_data", |
| ) |
| |
| BROWSERS = { |
| "chrome": { |
| "data": chrome_data, |
| "deps": ["//rb/lib/selenium/webdriver:chrome"], |
| "tags": [], |
| "target_compatible_with": [], |
| "env": { |
| "WD_REMOTE_BROWSER": "chrome", |
| "WD_SPEC_DRIVER": "chrome", |
| } | select({ |
| "@selenium//common:use_pinned_linux_chrome": { |
| "CHROME_BINARY": "$(location @linux_chrome//:chrome-linux64/chrome)", |
| "CHROMEDRIVER_BINARY": "$(location @linux_chromedriver//:chromedriver)", |
| }, |
| "@selenium//common:use_pinned_macos_chrome": { |
| "CHROME_BINARY": "$(location @mac_chrome//:Chrome.app)/Contents/MacOS/Chrome", |
| "CHROMEDRIVER_BINARY": "$(location @mac_chromedriver//:chromedriver)", |
| }, |
| "//conditions:default": {}, |
| }) | select({ |
| "@selenium//common:use_headless_browser": {"HEADLESS": "true"}, |
| "//conditions:default": {}, |
| }), |
| }, |
| "chrome-beta": { |
| "data": chrome_beta_data, |
| "deps": ["//rb/lib/selenium/webdriver:chrome"], |
| "tags": [], |
| "target_compatible_with": [], |
| "env": { |
| "WD_REMOTE_BROWSER": "chrome", |
| "WD_SPEC_DRIVER": "chrome", |
| "WD_BROWSER_VERSION": "beta", |
| } | select({ |
| "@selenium//common:use_pinned_linux_chrome": { |
| "CHROME_BINARY": "$(location @linux_beta_chrome//:chrome-linux64/chrome)", |
| "CHROMEDRIVER_BINARY": "$(location @linux_beta_chromedriver//:chromedriver)", |
| }, |
| "@selenium//common:use_pinned_macos_chrome": { |
| "CHROME_BINARY": "$(location @mac_beta_chrome//:Chrome.app)/Contents/MacOS/Chrome", |
| "CHROMEDRIVER_BINARY": "$(location @mac_beta_chromedriver//:chromedriver)", |
| }, |
| "//conditions:default": {}, |
| }) | select({ |
| "@selenium//common:use_headless_browser": {"HEADLESS": "true"}, |
| "//conditions:default": {}, |
| }), |
| }, |
| "edge": { |
| "data": edge_data, |
| "deps": ["//rb/lib/selenium/webdriver:edge"], |
| "tags": [], |
| "target_compatible_with": [], |
| "env": { |
| "WD_REMOTE_BROWSER": "edge", |
| "WD_SPEC_DRIVER": "edge", |
| } | select({ |
| "@selenium//common:use_pinned_linux_edge": { |
| "EDGE_BINARY": "$(location @linux_edge//:opt/microsoft/msedge/microsoft-edge)", |
| "MSEDGEDRIVER_BINARY": "$(location @linux_edgedriver//:msedgedriver)", |
| }, |
| "@selenium//common:use_pinned_macos_edge": { |
| "EDGE_BINARY": "$(location @mac_edge//:Edge.app)/Contents/MacOS/Microsoft\\ Edge", |
| "MSEDGEDRIVER_BINARY": "$(location @mac_edgedriver//:msedgedriver)", |
| }, |
| "//conditions:default": {}, |
| }) | select({ |
| "@selenium//common:use_headless_browser": {"HEADLESS": "true"}, |
| "//conditions:default": {}, |
| }), |
| }, |
| "firefox": { |
| "data": firefox_data, |
| "deps": ["//rb/lib/selenium/webdriver:firefox"], |
| "tags": [], |
| "target_compatible_with": [], |
| "env": { |
| "WD_REMOTE_BROWSER": "firefox", |
| "WD_SPEC_DRIVER": "firefox", |
| } | select({ |
| "@selenium//common:use_pinned_linux_firefox": { |
| "FIREFOX_BINARY": "$(location @linux_firefox//:firefox/firefox)", |
| "GECKODRIVER_BINARY": "$(location @linux_geckodriver//:geckodriver)", |
| }, |
| "@selenium//common:use_pinned_macos_firefox": { |
| "FIREFOX_BINARY": "$(location @mac_firefox//:Firefox.app)/Contents/MacOS/firefox", |
| "GECKODRIVER_BINARY": "$(location @mac_geckodriver//:geckodriver)", |
| }, |
| "//conditions:default": {}, |
| }) | select({ |
| "@selenium//common:use_headless_browser": {"HEADLESS": "true"}, |
| "//conditions:default": {}, |
| }), |
| }, |
| "firefox-beta": { |
| "data": firefox_beta_data, |
| "deps": ["//rb/lib/selenium/webdriver:firefox"], |
| "tags": [], |
| "target_compatible_with": [], |
| "env": { |
| "WD_REMOTE_BROWSER": "firefox", |
| "WD_SPEC_DRIVER": "firefox", |
| } | select({ |
| "@selenium//common:use_pinned_linux_firefox": { |
| "FIREFOX_BINARY": "$(location @linux_beta_firefox//:firefox/firefox)", |
| "GECKODRIVER_BINARY": "$(location @linux_geckodriver//:geckodriver)", |
| }, |
| "@selenium//common:use_pinned_macos_firefox": { |
| "FIREFOX_BINARY": "$(location @mac_beta_firefox//:Firefox.app)/Contents/MacOS/firefox", |
| "GECKODRIVER_BINARY": "$(location @mac_geckodriver//:geckodriver)", |
| }, |
| "//conditions:default": {}, |
| }) | select({ |
| "@selenium//common:use_headless_browser": {"HEADLESS": "true"}, |
| "//conditions:default": {}, |
| }), |
| }, |
| "ie": { |
| "data": [], |
| "deps": ["//rb/lib/selenium/webdriver:ie"], |
| "tags": [ |
| "skip-rbe", # RBE is Linux-only. |
| ], |
| "target_compatible_with": ["@platforms//os:windows"], |
| "env": { |
| "WD_REMOTE_BROWSER": "ie", |
| "WD_SPEC_DRIVER": "ie", |
| }, |
| }, |
| "safari": { |
| "data": [], |
| "deps": ["//rb/lib/selenium/webdriver:safari"], |
| "tags": [ |
| "exclusive-if-local", # Safari cannot run in parallel. |
| "skip-rbe", # RBE is Linux-only. |
| ], |
| "target_compatible_with": ["@platforms//os:macos"], |
| "env": { |
| "WD_REMOTE_BROWSER": "safari", |
| "WD_SPEC_DRIVER": "safari", |
| }, |
| }, |
| "safari-preview": { |
| "data": [], |
| "deps": ["//rb/lib/selenium/webdriver:safari"], |
| "tags": [ |
| "exclusive-if-local", # Safari cannot run in parallel. |
| "skip-rbe", # RBE is Linux-only. |
| ], |
| "target_compatible_with": ["@platforms//os:macos"], |
| "env": { |
| "WD_REMOTE_BROWSER": "safari-preview", |
| "WD_SPEC_DRIVER": "safari-preview", |
| }, |
| }, |
| } |
| |
| def rb_integration_test(name, srcs, deps = [], data = [], browsers = BROWSERS.keys(), tags = []): |
| # Generate a library target that is used by //rb/spec:spec to expose all tests to //rb:lint. |
| rb_library( |
| name = name, |
| srcs = srcs, |
| visibility = ["//rb:__subpackages__"], |
| ) |
| |
| for browser in browsers: |
| # Generate a test target for local browser execution. |
| rb_test( |
| name = "{}-{}".format(name, browser), |
| size = "large", |
| srcs = srcs, |
| args = ["rb/spec/"], |
| data = BROWSERS[browser]["data"] + data + ["//common/src/web"], |
| env = BROWSERS[browser]["env"], |
| main = "@bundle//bin:rspec", |
| tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + [browser], |
| deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps, |
| visibility = ["//rb:__subpackages__"], |
| target_compatible_with = BROWSERS[browser]["target_compatible_with"], |
| ) |
| |
| # Generate a test target for remote browser execution (Grid). |
| rb_test( |
| name = "{}-{}-remote".format(name, browser), |
| size = "large", |
| srcs = srcs, |
| args = ["rb/spec/"], |
| data = BROWSERS[browser]["data"] + data + [ |
| "//common/src/web", |
| "//java/src/org/openqa/selenium/grid:selenium_server_deploy.jar", |
| "//rb/spec:java-location", |
| "@bazel_tools//tools/jdk:current_java_runtime", |
| ], |
| env = BROWSERS[browser]["env"] | { |
| "WD_BAZEL_JAVA_LOCATION": "$(rootpath //rb/spec:java-location)", |
| "WD_SPEC_DRIVER": "remote", |
| }, |
| main = "@bundle//bin:rspec", |
| tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-remote".format(browser)], |
| deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps, |
| visibility = ["//rb:__subpackages__"], |
| target_compatible_with = BROWSERS[browser]["target_compatible_with"], |
| ) |
| |
| # Generate a test target for bidi browser execution. |
| rb_test( |
| name = "{}-{}-bidi".format(name, browser), |
| size = "large", |
| srcs = srcs, |
| args = ["rb/spec/"], |
| data = BROWSERS[browser]["data"] + data + ["//common/src/web"], |
| env = BROWSERS[browser]["env"] | {"WEBDRIVER_BIDI": "true"}, |
| main = "@bundle//bin:rspec", |
| tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-bidi".format(browser)], |
| deps = depset( |
| ["//rb/spec/integration/selenium/webdriver:spec_helper", "//rb/lib/selenium/webdriver:bidi"] + |
| BROWSERS[browser]["deps"] + |
| deps, |
| ), |
| visibility = ["//rb:__subpackages__"], |
| target_compatible_with = BROWSERS[browser]["target_compatible_with"], |
| ) |
| |
| def rb_unit_test(name, srcs, deps, data = []): |
| rb_test( |
| name = name, |
| size = "small", |
| srcs = srcs, |
| args = ["rb/spec/"], |
| main = "@bundle//bin:rspec", |
| data = data, |
| tags = ["no-sandbox"], # TODO: Do we need this? |
| deps = ["//rb/spec/unit/selenium/webdriver:spec_helper"] + deps, |
| visibility = ["//rb:__subpackages__"], |
| ) |