You've already forked SeleniumHQ.selenium.py
557 lines
14 KiB
Python
557 lines
14 KiB
Python
load("@py_dev_requirements//:requirements.bzl", "requirement")
|
|
load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix")
|
|
load("@rules_pkg//pkg:pkg.bzl", "pkg_tar")
|
|
load("@rules_python//python:defs.bzl", "py_binary", "py_library")
|
|
load("@rules_python//python:packaging.bzl", "py_package", "py_wheel")
|
|
load("@rules_python//python:pip.bzl", "compile_pip_requirements")
|
|
load("//common:defs.bzl", "copy_file")
|
|
load("//py:defs.bzl", "generate_devtools", "py_test_suite")
|
|
load("//py/private:browsers.bzl", "BROWSERS")
|
|
load("//py/private:import.bzl", "py_import")
|
|
|
|
compile_pip_requirements(
|
|
# base name for generated targets, typically "requirements"
|
|
name = "requirements",
|
|
requirements_in = ":requirements.txt",
|
|
requirements_txt = ":requirements_lock.txt",
|
|
tags = [
|
|
"skip-remote", # This test won't run on the RBE because of a lack of network connectivity
|
|
],
|
|
)
|
|
|
|
SE_VERSION = "4.16.0"
|
|
|
|
BROWSER_VERSIONS = [
|
|
"v85",
|
|
"v119",
|
|
"v120",
|
|
"v118",
|
|
]
|
|
|
|
TEST_DEPS = [
|
|
requirement("attrs"),
|
|
requirement("debugpy"),
|
|
requirement("idna"),
|
|
requirement("iniconfig"),
|
|
requirement("importlib_metadata"),
|
|
requirement("h11"),
|
|
requirement("more_itertools"),
|
|
requirement("multidict"),
|
|
requirement("outcome"),
|
|
requirement("pluggy"),
|
|
requirement("py"),
|
|
requirement("pytest"),
|
|
requirement("pytest-instafail"),
|
|
requirement("pytest-trio"),
|
|
requirement("pytest-mock"),
|
|
requirement("sortedcontainers"),
|
|
requirement("sniffio"),
|
|
requirement("zipp"),
|
|
]
|
|
|
|
copy_file(
|
|
name = "manager-linux",
|
|
src = "//common/manager:selenium-manager-linux",
|
|
out = "selenium/webdriver/common/linux/selenium-manager",
|
|
)
|
|
|
|
copy_file(
|
|
name = "manager-macos",
|
|
src = "//common/manager:selenium-manager-macos",
|
|
out = "selenium/webdriver/common/macos/selenium-manager",
|
|
)
|
|
|
|
copy_file(
|
|
name = "manager-windows",
|
|
src = "//common/manager:selenium-manager-windows",
|
|
out = "selenium/webdriver/common/windows/selenium-manager.exe",
|
|
)
|
|
|
|
copy_file(
|
|
name = "get-attribute",
|
|
src = "//javascript/webdriver/atoms:get-attribute.js",
|
|
out = "selenium/webdriver/remote/getAttribute.js",
|
|
)
|
|
|
|
copy_file(
|
|
name = "is-displayed",
|
|
src = "//javascript/atoms/fragments:is-displayed.js",
|
|
out = "selenium/webdriver/remote/isDisplayed.js",
|
|
)
|
|
|
|
copy_file(
|
|
name = "find-elements",
|
|
src = "//javascript/atoms/fragments:find-elements.js",
|
|
out = "selenium/webdriver/remote/findElements.js",
|
|
)
|
|
|
|
copy_file(
|
|
name = "mutation-listener",
|
|
src = "//javascript/cdp-support:mutation-listener.js",
|
|
out = "selenium/webdriver/common/mutation-listener.js",
|
|
)
|
|
|
|
copy_file(
|
|
name = "firefox-driver-prefs",
|
|
src = "//third_party/js/selenium:webdriver_json",
|
|
out = "selenium/webdriver/firefox/webdriver_prefs.json",
|
|
)
|
|
|
|
copy_file(
|
|
name = "webextensions-selenium-example-xpi",
|
|
src = "//common/extensions:webextensions-selenium-example.xpi",
|
|
out = "test/extensions/webextensions-selenium-example.xpi",
|
|
)
|
|
|
|
copy_file(
|
|
name = "webextensions-selenium-example-zip",
|
|
src = "//common/extensions:webextensions-selenium-example.zip",
|
|
out = "test/extensions/webextensions-selenium-example.zip",
|
|
)
|
|
|
|
copy_file(
|
|
name = "webextensions-selenium-example-unsigned-zip",
|
|
src = "//common/extensions:webextensions-selenium-example-unsigned.zip",
|
|
out = "test/extensions/webextensions-selenium-example-unsigned.zip",
|
|
)
|
|
|
|
py_library(
|
|
name = "selenium",
|
|
srcs = glob(
|
|
["selenium/**/*.py"],
|
|
exclude = ["generate.py"],
|
|
),
|
|
data = [
|
|
"selenium/py.typed",
|
|
":find-elements",
|
|
":firefox-driver-prefs",
|
|
":get-attribute",
|
|
":is-displayed",
|
|
":manager-linux",
|
|
":manager-macos",
|
|
":manager-windows",
|
|
":mutation-listener",
|
|
] + [":create-cdp-srcs-" + n for n in BROWSER_VERSIONS],
|
|
imports = ["."],
|
|
visibility = ["//visibility:public"],
|
|
deps = [
|
|
requirement("trio"),
|
|
requirement("trio_websocket"),
|
|
requirement("urllib3"),
|
|
requirement("certifi"),
|
|
],
|
|
)
|
|
|
|
py_package(
|
|
name = "selenium-pkg",
|
|
packages = [
|
|
"py.selenium",
|
|
"py.selenium.common",
|
|
"py.selenium.webdriver",
|
|
"py.selenium.webdriver.chrome",
|
|
"py.selenium.webdriver.chromium",
|
|
"py.selenium.webdriver.common",
|
|
"py.selenium.webdriver.common.devtools",
|
|
"py.selenium.webdriver.edge",
|
|
"py.selenium.webdriver.firefox",
|
|
"py.selenium.webdriver.remote",
|
|
"py.selenium.webdriver.safari",
|
|
],
|
|
deps = [":selenium"],
|
|
)
|
|
|
|
pkg_files(
|
|
name = "selenium-sdist-pkg",
|
|
srcs = [
|
|
"CHANGES",
|
|
"MANIFEST.in",
|
|
"README.rst",
|
|
"setup.py",
|
|
":selenium-pkg",
|
|
":selenium-pkginfo",
|
|
],
|
|
strip_prefix = strip_prefix.from_pkg(),
|
|
)
|
|
|
|
pkg_tar(
|
|
name = "selenium-sdist",
|
|
srcs = [":selenium-sdist-pkg"],
|
|
extension = "tar.gz",
|
|
mode = "0644",
|
|
package_dir = "selenium-%s" % SE_VERSION,
|
|
package_file_name = "selenium-%s.tar.gz" % SE_VERSION,
|
|
)
|
|
|
|
genrule(
|
|
name = "selenium-pkginfo",
|
|
srcs = [":selenium-wheel-lib"],
|
|
outs = ["PKG-INFO"],
|
|
cmd = "cp $(location :selenium-wheel-lib)/selenium-%s.dist-info/METADATA $@" % SE_VERSION,
|
|
)
|
|
|
|
py_import(
|
|
name = "selenium-wheel-lib",
|
|
wheel = ":selenium-wheel",
|
|
)
|
|
|
|
py_wheel(
|
|
name = "selenium-wheel",
|
|
classifiers = [
|
|
"Development Status :: 5 - Production/Stable",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: Apache Software License",
|
|
"Operating System :: POSIX",
|
|
"Operating System :: Microsoft :: Windows",
|
|
"Operating System :: MacOS :: MacOS X",
|
|
"Topic :: Software Development :: Testing",
|
|
"Topic :: Software Development :: Libraries",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python :: 3.8",
|
|
"Programming Language :: Python :: 3.9",
|
|
"Programming Language :: Python :: 3.10",
|
|
],
|
|
description_file = "README.rst",
|
|
distribution = "selenium",
|
|
homepage = "https://www.selenium.dev",
|
|
license = "Apache 2.0",
|
|
python_requires = ">=3.8",
|
|
python_tag = "py3",
|
|
requires = [
|
|
"urllib3[socks]>=1.26,<3",
|
|
"trio~=0.17",
|
|
"trio-websocket~=0.9",
|
|
"certifi>=2021.10.8",
|
|
],
|
|
strip_path_prefixes = [
|
|
"py/",
|
|
],
|
|
version = SE_VERSION,
|
|
visibility = ["//visibility:public"],
|
|
deps = [
|
|
":selenium-pkg",
|
|
],
|
|
)
|
|
|
|
py_library(
|
|
name = "init-tree",
|
|
testonly = True,
|
|
srcs = [
|
|
"conftest.py",
|
|
"test/__init__.py",
|
|
"test/selenium/__init__.py",
|
|
"test/selenium/webdriver/__init__.py",
|
|
"test/selenium/webdriver/chrome/__init__.py",
|
|
"test/selenium/webdriver/common/__init__.py",
|
|
"test/selenium/webdriver/common/conftest.py",
|
|
"test/selenium/webdriver/common/network.py",
|
|
"test/selenium/webdriver/common/webserver.py",
|
|
"test/selenium/webdriver/firefox/__init__.py",
|
|
"test/selenium/webdriver/firefox/conftest.py",
|
|
"test/selenium/webdriver/marionette/__init__.py",
|
|
"test/selenium/webdriver/marionette/conftest.py",
|
|
"test/selenium/webdriver/safari/conftest.py",
|
|
"test/selenium/webdriver/support/__init__.py",
|
|
"test/selenium/webdriver/support/conftest.py",
|
|
],
|
|
data = [
|
|
"pytest.ini",
|
|
"setup.cfg",
|
|
"test/selenium/webdriver/common/test_file.txt",
|
|
"test/selenium/webdriver/common/test_file2.txt",
|
|
":webextensions-selenium-example-unsigned-zip",
|
|
":webextensions-selenium-example-xpi",
|
|
":webextensions-selenium-example-zip",
|
|
],
|
|
imports = ["."],
|
|
deps = [
|
|
":webserver",
|
|
],
|
|
)
|
|
|
|
py_binary(
|
|
name = "generate",
|
|
srcs = ["generate.py"],
|
|
srcs_version = "PY3",
|
|
deps = [requirement("inflection")],
|
|
)
|
|
|
|
[generate_devtools(
|
|
name = "create-cdp-srcs-{}".format(devtools_version),
|
|
browser_protocol = "//common/devtools/chromium/{}:browser_protocol".format(devtools_version),
|
|
generator = ":generate",
|
|
js_protocol = "//common/devtools/chromium/{}:js_protocol".format(devtools_version),
|
|
outdir = "selenium/webdriver/common/devtools/{}".format(devtools_version),
|
|
protocol_version = devtools_version,
|
|
) for devtools_version in BROWSER_VERSIONS]
|
|
|
|
py_test_suite(
|
|
name = "unit",
|
|
size = "small",
|
|
srcs = glob([
|
|
"test/unit/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_library(
|
|
name = "webserver",
|
|
testonly = True,
|
|
srcs = [
|
|
"test/selenium/webdriver/common/network.py",
|
|
"test/selenium/webdriver/common/webserver.py",
|
|
],
|
|
data = [
|
|
"//common/src/web",
|
|
],
|
|
deps = [],
|
|
)
|
|
|
|
[
|
|
py_test_suite(
|
|
name = "common-%s" % browser,
|
|
size = "large",
|
|
srcs = glob(
|
|
[
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
],
|
|
exclude = ["test/selenium/webdriver/common/print_pdf_tests.py"],
|
|
),
|
|
args = [
|
|
"--instafail",
|
|
] + BROWSERS[browser]["args"],
|
|
data = BROWSERS[browser]["data"],
|
|
env_inherit = ["DISPLAY"],
|
|
tags = [
|
|
"no-sandbox",
|
|
] + BROWSERS[browser]["tags"],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
for browser in BROWSERS.keys()
|
|
]
|
|
|
|
py_test_suite(
|
|
name = "test-chrome",
|
|
size = "large",
|
|
srcs = glob(
|
|
[
|
|
"test/selenium/webdriver/chrome/**/*.py",
|
|
],
|
|
exclude = ["test/selenium/webdriver/common/print_pdf_tests.py"],
|
|
),
|
|
args = [
|
|
"--instafail",
|
|
] + BROWSERS["chrome"]["args"],
|
|
data = BROWSERS["chrome"]["data"],
|
|
env_inherit = ["DISPLAY"],
|
|
tags = [
|
|
"no-sandbox",
|
|
] + BROWSERS["chrome"]["tags"],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-chrome-headless",
|
|
size = "large",
|
|
srcs = glob(
|
|
[
|
|
"test/selenium/webdriver/chrome/**/*.py",
|
|
],
|
|
),
|
|
args = [
|
|
"--instafail",
|
|
"--headless=true",
|
|
] + BROWSERS["chrome"]["args"],
|
|
data = BROWSERS["chrome"]["data"],
|
|
env_inherit = ["DISPLAY"],
|
|
tags = [
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
] + BROWSERS["chrome"]["tags"],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-edge",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/edge/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
] + BROWSERS["edge"]["args"],
|
|
data = BROWSERS["edge"]["data"],
|
|
env_inherit = ["DISPLAY"],
|
|
tags = [
|
|
"no-sandbox",
|
|
] + BROWSERS["edge"]["tags"],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-firefox",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/marionette/**/*.py",
|
|
"test/selenium/webdriver/firefox/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
] + BROWSERS["firefox"]["args"],
|
|
data = BROWSERS["firefox"]["data"],
|
|
env_inherit = ["DISPLAY"],
|
|
tags = [
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
] + BROWSERS["firefox"]["tags"],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-remote",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
"--driver=remote",
|
|
],
|
|
data = [
|
|
"//java/src/org/openqa/selenium/grid:selenium_server_deploy.jar",
|
|
],
|
|
tags = [
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-ie",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/ie/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
"--driver=ie",
|
|
],
|
|
tags = [
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-safari",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/safari/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
"--driver=safari",
|
|
],
|
|
tags = [
|
|
"exclusive-if-local",
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-webkitgtk",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
"--driver=webkitgtk",
|
|
"--browser-binary=MiniBrowser",
|
|
"--browser-args=--automation",
|
|
],
|
|
tags = [
|
|
"exclusive-if-local",
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|
|
|
|
py_test_suite(
|
|
name = "test-wpewebkit",
|
|
size = "large",
|
|
srcs = glob([
|
|
"test/selenium/webdriver/common/**/*.py",
|
|
"test/selenium/webdriver/support/**/*.py",
|
|
]),
|
|
args = [
|
|
"--instafail",
|
|
"--driver=WPEWebKit",
|
|
"--browser-binary=MiniBrowser",
|
|
"--browser-args=--automation --headless",
|
|
],
|
|
tags = [
|
|
"exclusive-if-local",
|
|
"no-sandbox",
|
|
"skip-remote",
|
|
],
|
|
deps = [
|
|
":init-tree",
|
|
":selenium",
|
|
":webserver",
|
|
] + TEST_DEPS,
|
|
)
|