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 ''
43 DST_PREFIX=$out/${python.sitePackages}/selenium/webdriver/
44 DST_REMOTE=$DST_PREFIX/remote/
45 DST_FF=$DST_PREFIX/firefox
46 cp ../rb/lib/selenium/webdriver/atoms/getAttribute.js $DST_REMOTE
47 cp ../rb/lib/selenium/webdriver/atoms/isDisplayed.js $DST_REMOTE
48 cp ../rb/lib/selenium/webdriver/atoms/findElements.js $DST_REMOTE
49 cp ../javascript/cdp-support/mutation-listener.js $DST_REMOTE
50 cp ../third_party/js/selenium/webdriver.json $DST_FF/webdriver_prefs.json
51 ''
52 + lib.optionalString stdenv.hostPlatform.isDarwin ''
53 mkdir -p $DST_PREFIX/common/macos
54 ln -s ${lib.getExe selenium-manager} $DST_PREFIX/common/macos/
55 ''
56 + lib.optionalString stdenv.hostPlatform.isLinux ''
57 mkdir -p $DST_PREFIX/common/linux/
58 ln -s ${lib.getExe selenium-manager} $DST_PREFIX/common/linux/
59 '';
60
61 build-system = [ setuptools ];
62
63 dependencies = [
64 certifi
65 trio
66 trio-websocket
67 urllib3
68 typing-extensions
69 websocket-client
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}