1{
2 lib,
3 fetchFromGitHub,
4 buildPythonPackage,
5 selenium-manager,
6 certifi,
7 pytestCheckHook,
8 pythonOlder,
9 trio,
10 trio-websocket,
11 typing-extensions,
12 urllib3,
13 pytest-trio,
14 nixosTests,
15 stdenv,
16 python,
17}:
18
19buildPythonPackage rec {
20 pname = "selenium";
21 version = "4.18.1";
22 format = "setuptools";
23
24 disabled = pythonOlder "3.7";
25
26 src = fetchFromGitHub {
27 owner = "SeleniumHQ";
28 repo = "selenium";
29 # check if there is a newer tag with or without -python suffix
30 rev = "refs/tags/selenium-${version}";
31 hash = "sha256-1C9Epsk9rFlShxHGGzbWl6smrMzPn2h3yCWlzUIMpY8=";
32 };
33
34 preConfigure = ''
35 cd py
36 '';
37
38 postInstall =
39 ''
40 DST_PREFIX=$out/${python.sitePackages}/selenium/webdriver/
41 DST_REMOTE=$DST_PREFIX/remote/
42 DST_FF=$DST_PREFIX/firefox
43 cp ../rb/lib/selenium/webdriver/atoms/getAttribute.js $DST_REMOTE
44 cp ../rb/lib/selenium/webdriver/atoms/isDisplayed.js $DST_REMOTE
45 cp ../rb/lib/selenium/webdriver/atoms/findElements.js $DST_REMOTE
46 cp ../javascript/cdp-support/mutation-listener.js $DST_REMOTE
47 cp ../third_party/js/selenium/webdriver.json $DST_FF/webdriver_prefs.json
48 ''
49 + lib.optionalString stdenv.isDarwin ''
50 mkdir -p $DST_PREFIX/common/macos
51 ln -s ${lib.getExe selenium-manager} $DST_PREFIX/common/macos/
52 ''
53 + lib.optionalString stdenv.isLinux ''
54 mkdir -p $DST_PREFIX/common/linux/
55 ln -s ${lib.getExe selenium-manager} $DST_PREFIX/common/linux/
56 '';
57
58 propagatedBuildInputs = [
59 certifi
60 trio
61 trio-websocket
62 urllib3
63 typing-extensions
64 ] ++ urllib3.optional-dependencies.socks;
65
66 nativeCheckInputs = [
67 pytestCheckHook
68 pytest-trio
69 ];
70
71 __darwinAllowLocalNetworking = true;
72
73 passthru.tests = {
74 testing-vaultwarden = nixosTests.vaultwarden;
75 };
76
77 meta = with lib; {
78 description = "Bindings for Selenium WebDriver";
79 homepage = "https://selenium.dev/";
80 license = licenses.asl20;
81 maintainers = with maintainers; [ jraygauthier ];
82 };
83}