pip>=25.0.1;python_version<"3.9"
pip>=25.2;python_version>="3.9"
packaging>=25.0
setuptools~=70.2;python_version<"3.10"
setuptools>=80.9.0;python_version>="3.10"
wheel>=0.45.1
attrs~=25.3.0;python_version<"3.9"
attrs>=25.4.0;python_version>="3.9"
certifi>=2025.10.5
exceptiongroup>=1.3.0
websockets~=13.1;python_version<"3.9"
websockets>=15.0.1;python_version>="3.9"
filelock~=3.16.1;python_version<"3.9"
filelock~=3.19.1;python_version>="3.9" and python_version<"3.10"
filelock>=3.20.0;python_version>="3.10"
fasteners>=0.20
mycdp>=1.2.1
pynose>=1.5.5
platformdirs~=4.3.6;python_version<"3.9"
platformdirs~=4.4.0;python_version>="3.9" and python_version<"3.10"
platformdirs>=4.5.0;python_version>="3.10"
typing-extensions~=4.13.2;python_version<"3.9"
typing-extensions>=4.15.0;python_version>="3.9"
sbvirtualdisplay>=1.4.0
MarkupSafe==2.1.5;python_version<"3.9"
MarkupSafe>=3.0.3;python_version>="3.9"
Jinja2>=3.1.6
six>=1.17.0
parse>=1.20.2
parse-type>=0.6.6
colorama>=0.4.6
pyyaml>=6.0.3
pygments>=2.19.2
pyreadline3>=3.5.4;platform_system=="Windows"
tabcompleter>=1.4.0
pdbp>=1.7.1
idna>=3.11
chardet==5.2.0
charset-normalizer>=3.4.4,<4
urllib3>=1.26.20,<2;python_version<"3.10"
urllib3>=1.26.20,<2.6.0;python_version>="3.10"
requests==2.32.4;python_version<"3.9"
requests~=2.32.5;python_version>="3.9"
sniffio==1.3.1
h11==0.16.0
outcome==1.3.0.post0
trio==0.27.0;python_version<"3.9"
trio>=0.31.0,<1;python_version>="3.9"
trio-websocket~=0.12.2
wsproto==1.2.0
websocket-client~=1.8.0;python_version<"3.9"
websocket-client~=1.9.0;python_version>="3.9"
selenium==4.27.1;python_version<"3.9"
selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
selenium==4.37.0;python_version>="3.10"
cssselect==1.2.0;python_version<"3.9"
cssselect==1.3.0;python_version>="3.9"
sortedcontainers==2.4.0
execnet==2.1.1
iniconfig==2.1.0
pluggy==1.5.0;python_version<"3.9"
pluggy==1.6.0;python_version>="3.9"
pytest==8.3.5;python_version<"3.9"
pytest==8.4.2;python_version>="3.9"
pytest-html==4.0.2
pytest-metadata==3.1.1
pytest-ordering==0.6
pytest-rerunfailures==14.0;python_version<"3.9"
pytest-rerunfailures==16.0.1;python_version>="3.9" and python_version<"3.10"
pytest-rerunfailures==16.1;python_version>="3.10"
pytest-xdist==3.6.1;python_version<"3.9"
pytest-xdist==3.8.0;python_version>="3.9"
parameterized==0.9.0
behave==1.2.6
soupsieve==2.7;python_version<"3.9"
soupsieve~=2.8;python_version>="3.9"
beautifulsoup4~=4.14.2
pyotp==2.9.0
python-xlib==0.33;platform_system=="Linux"
PyAutoGUI>=0.9.54;platform_system=="Linux"
markdown-it-py==3.0.0;python_version<"3.10"
markdown-it-py==4.0.0;python_version>="3.10"
mdurl==0.1.2
rich>=14.2.0,<15

# --- Testing Requirements --- #
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)

coverage>=7.6.1;python_version<"3.9"
coverage>=7.10.7;python_version>="3.9" and python_version<"3.10"
coverage>=7.11.0;python_version>="3.10"
pytest-cov>=5.0.0;python_version<"3.9"
pytest-cov>=7.0.0;python_version>="3.9"
flake8==5.0.4;python_version<"3.9"
flake8==7.3.0;python_version>="3.9"
mccabe==0.7.0
pyflakes==2.5.0;python_version<"3.9"
pyflakes==3.4.0;python_version>="3.9"
pycodestyle==2.9.1;python_version<"3.9"
pycodestyle==2.14.0;python_version>="3.9"
