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