Skip to content

Commit 2dcb39e

Browse files
authored
Merge pull request #2053 from seleniumbase/selenium-upgrade
Upgrade Selenium to 4.12.0
2 parents f76d81d + 593a2cc commit 2dcb39e

File tree

15 files changed

+486
-1205
lines changed

15 files changed

+486
-1205
lines changed

requirements.txt

Lines changed: 37 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,62 @@
1-
pip>=21.3.1;python_version<"3.7"
2-
pip>=23.2.1;python_version>="3.7"
3-
packaging>=21.3;python_version<"3.7"
4-
packaging>=23.1;python_version>="3.7"
5-
setuptools>=59.6.0;python_version<"3.7"
6-
setuptools>=68.0.0;python_version>="3.7" and python_version<"3.8"
1+
pip>=23.2.1
2+
packaging>=23.1
3+
setuptools>=68.0.0;python_version<"3.8"
74
setuptools>=68.1.2;python_version>="3.8"
8-
wheel>=0.37.1;python_version<"3.7"
9-
wheel>=0.41.2;python_version>="3.7"
10-
attrs==22.1.0;python_version<"3.7"
11-
attrs>=23.1.0;python_version>="3.7"
5+
wheel>=0.41.2
6+
attrs>=23.1.0
127
certifi>=2023.7.22
13-
filelock>=3.4.1;python_version<"3.7"
14-
filelock>=3.12.2;python_version>="3.7" and python_version<"3.8"
8+
filelock>=3.12.2;python_version<"3.8"
159
filelock>=3.12.3;python_version>="3.8"
16-
platformdirs>=2.4.0;python_version<"3.7"
17-
platformdirs>=3.10.0;python_version>="3.7"
10+
platformdirs>=3.10.0
1811
parse>=1.19.1
1912
parse-type>=0.6.2
2013
six==1.16.0
2114
idna==3.4
22-
chardet==4.0.0;python_version<"3.7"
23-
chardet==5.2.0;python_version>="3.7"
24-
charset-normalizer==2.0.12;python_version<"3.7"
25-
charset-normalizer==3.2.0;python_version>="3.7"
26-
urllib3==1.26.12;python_version<"3.7"
27-
urllib3>=1.26.16,<2;python_version>="3.7" and python_version<"3.10"
15+
chardet==5.2.0
16+
charset-normalizer==3.2.0
17+
urllib3>=1.26.16,<2;python_version<"3.10"
2818
urllib3>=1.26.16,<2.1.0;python_version>="3.10"
29-
requests==2.27.1;python_version<"3.7"
30-
requests==2.31.0;python_version>="3.7"
19+
requests==2.31.0
3120
pynose==1.4.8
32-
sniffio==1.3.0;python_version>="3.7"
33-
h11==0.14.0;python_version>="3.7"
34-
outcome==1.2.0;python_version>="3.7"
35-
trio==0.22.2;python_version>="3.7"
36-
trio-websocket==0.10.3;python_version>="3.7"
37-
wsproto==1.2.0;python_version>="3.7"
38-
selenium==3.141.0;python_version<"3.7"
39-
selenium==4.11.2;python_version>="3.7"
40-
msedge-selenium-tools==3.141.3;python_version<"3.7"
41-
cssselect==1.1.0;python_version<"3.7"
42-
cssselect==1.2.0;python_version>="3.7"
21+
sniffio==1.3.0
22+
h11==0.14.0
23+
outcome==1.2.0
24+
trio==0.22.2
25+
trio-websocket==0.10.3
26+
wsproto==1.2.0
27+
selenium==4.11.2;python_version<"3.8"
28+
selenium==4.12.0;python_version>="3.8"
29+
cssselect==1.2.0
4330
sortedcontainers==2.4.0
44-
fasteners==0.17.3;python_version<"3.7"
45-
fasteners==0.18;python_version>="3.7"
46-
execnet==1.9.0;python_version<"3.7"
47-
execnet==2.0.2;python_version>="3.7"
48-
iniconfig==1.1.1;python_version<"3.7"
49-
iniconfig==2.0.0;python_version>="3.7"
50-
pluggy==1.0.0;python_version<"3.7"
51-
pluggy==1.2.0;python_version>="3.7" and python_version<"3.8"
31+
fasteners==0.18
32+
execnet==2.0.2
33+
iniconfig==2.0.0
34+
pluggy==1.2.0;python_version<"3.8"
5235
pluggy==1.3.0;python_version>="3.8"
5336
py==1.11.0
54-
pytest==7.0.1;python_version<"3.7"
55-
pytest==7.4.0;python_version>="3.7"
56-
pytest-forked==1.4.0;python_version<"3.7"
37+
pytest==7.4.0
5738
pytest-html==2.0.1
58-
pytest-metadata==1.11.0;python_version<"3.7"
59-
pytest-metadata==3.0.0;python_version>="3.7"
39+
pytest-metadata==3.0.0
6040
pytest-ordering==0.6
61-
pytest-rerunfailures==10.3;python_version<"3.7"
62-
pytest-rerunfailures==12.0;python_version>="3.7"
63-
pytest-xdist==2.5.0;python_version<"3.7"
64-
pytest-xdist==3.3.1;python_version>="3.7"
65-
parameterized==0.8.1;python_version<"3.7"
66-
parameterized==0.9.0;python_version>="3.7"
41+
pytest-rerunfailures==12.0
42+
pytest-xdist==3.3.1
43+
parameterized==0.9.0
6744
sbvirtualdisplay==1.2.0
6845
behave==1.2.6
69-
soupsieve==2.3.2.post1;python_version<"3.7"
70-
soupsieve==2.4.1;python_version>="3.7"
46+
soupsieve==2.4.1
7147
beautifulsoup4==4.12.2
72-
pygments==2.14.0;python_version<"3.7"
73-
pygments==2.16.1;python_version>="3.7"
48+
pygments==2.16.1
7449
pyreadline3==3.4.1;platform_system=="Windows"
7550
tabcompleter==1.2.1
7651
pdbp==1.4.6
77-
colorama==0.4.5;python_version<"3.7"
78-
colorama==0.4.6;python_version>="3.7"
79-
exceptiongroup==1.1.3;python_version>="3.7"
80-
future-breakpoint==2.0.0;python_version<"3.7"
52+
colorama==0.4.6
53+
exceptiongroup==1.1.3
8154
importlib-metadata==4.2.0;python_version<"3.8"
82-
pyotp==2.7.0;python_version<"3.7"
83-
pyotp==2.9.0;python_version>="3.7"
84-
typing-extensions==4.1.1;python_version<"3.7"
85-
commonmark==0.9.1;python_version<"3.7"
55+
pyotp==2.9.0
56+
markdown-it-py==2.2.0;python_version<"3.8"
8657
markdown-it-py==3.0.0;python_version>="3.8"
87-
mdurl==0.1.2;python_version>="3.7"
88-
rich==12.6.0;python_version<"3.7"
89-
rich==13.5.2;python_version>="3.7"
58+
mdurl==0.1.2
59+
rich==13.5.2
9060

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

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.17.14"
2+
__version__ = "4.18.0"

seleniumbase/console_scripts/ReadMe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ sbase get chromedriver -p
7070
```
7171

7272
(Drivers: ``chromedriver``, ``geckodriver``, ``edgedriver``,
73-
``iedriver``, ``operadriver``, ``uc_driver``)
73+
``iedriver``, ``uc_driver``)
7474

7575
(Options: A specific driver version or major version integer.
7676
If not set, the driver version matches the browser.

seleniumbase/console_scripts/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def show_install_usage():
130130
print(" OR: sbase install [DRIVER_NAME] [OPTIONS]")
131131
print(" OR: sbase get [DRIVER_NAME] [OPTIONS]")
132132
print(" (Drivers: chromedriver, geckodriver, edgedriver")
133-
print(" iedriver, operadriver, uc_driver)")
133+
print(" iedriver, uc_driver)")
134134
print(" Options:")
135135
print(" VERSION Specify the version to download.")
136136
print(" Tries to detect the needed version.")

seleniumbase/console_scripts/sb_install.py

Lines changed: 5 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Usage:
55
sbase get {chromedriver|geckodriver|edgedriver|
6-
iedriver|operadriver} [OPTIONS]
6+
iedriver|uc_driver} [OPTIONS]
77
Options:
88
VERSION Specify the version.
99
Tries to detect the needed version.
@@ -16,6 +16,8 @@
1616
sbase get edgedriver
1717
sbase get chromedriver 114
1818
sbase get chromedriver 114.0.5735.90
19+
sbase get chromedriver stable
20+
sbase get chromedriver beta
1921
sbase get chromedriver -p
2022
Output:
2123
Downloads the webdriver to seleniumbase/drivers/
@@ -50,7 +52,6 @@
5052
DEFAULT_CHROMEDRIVER_VERSION = "114.0.5735.90" # (If can't find LATEST_STABLE)
5153
DEFAULT_GECKODRIVER_VERSION = "v0.33.0"
5254
DEFAULT_EDGEDRIVER_VERSION = "115.0.1901.183" # (If can't find LATEST_STABLE)
53-
DEFAULT_OPERADRIVER_VERSION = "v.96.0.4664.45"
5455

5556

5657
def invalid_run_command():
@@ -61,7 +62,7 @@ def invalid_run_command():
6162
exp += " OR seleniumbase get [DRIVER] [OPTIONS]\n"
6263
exp += " OR sbase get [DRIVER] [OPTIONS]\n"
6364
exp += " (Drivers: chromedriver, geckodriver, edgedriver,\n"
64-
exp += " iedriver, operadriver, uc_driver)\n"
65+
exp += " iedriver, uc_driver)\n"
6566
exp += " Options:\n"
6667
exp += " VERSION Specify the version.\n"
6768
exp += " Tries to detect the needed version.\n"
@@ -287,7 +288,6 @@ def main(override=None, intel_for_uc=None, force_uc=None):
287288
downloads_folder = DRIVER_DIR
288289
expected_contents = None
289290
platform_code = None
290-
inner_folder = None
291291
copy_to_path = False
292292
latest_version = ""
293293
use_version = ""
@@ -717,7 +717,7 @@ def main(override=None, intel_for_uc=None, force_uc=None):
717717
else:
718718
raise Exception(
719719
"Sorry! IEDriver is only for "
720-
"Windows-based operating systems!"
720+
"Windows-based systems!"
721721
)
722722
download_url = (
723723
"https://selenium-release.storage.googleapis.com/"
@@ -736,71 +736,6 @@ def main(override=None, intel_for_uc=None, force_uc=None):
736736
msg = c2 + "HeadlessIEDriver to download" + cr
737737
p_version = c3 + headless_ie_version + cr
738738
log_d("\n*** %s = %s" % (msg, p_version))
739-
elif name == "operadriver" or name == "operachromiumdriver":
740-
name = "operadriver"
741-
use_version = DEFAULT_OPERADRIVER_VERSION
742-
get_latest = False
743-
if num_args == 4 or num_args == 5:
744-
if "-p" not in sys.argv[3].lower():
745-
use_version = sys.argv[3]
746-
if use_version.lower() == "latest":
747-
use_version = DEFAULT_OPERADRIVER_VERSION
748-
else:
749-
copy_to_path = True
750-
if num_args == 5:
751-
if "-p" in sys.argv[4].lower():
752-
copy_to_path = True
753-
else:
754-
invalid_run_command()
755-
if IS_MAC:
756-
file_name = "operadriver_mac64.zip"
757-
platform_code = "mac64"
758-
inner_folder = "operadriver_%s/" % platform_code
759-
expected_contents = [
760-
"operadriver_mac64/",
761-
"operadriver_mac64/operadriver",
762-
"operadriver_mac64/sha512_sum",
763-
]
764-
elif IS_LINUX:
765-
file_name = "operadriver_linux64.zip"
766-
platform_code = "linux64"
767-
inner_folder = "operadriver_%s/" % platform_code
768-
expected_contents = [
769-
"operadriver_linux64/",
770-
"operadriver_linux64/operadriver",
771-
"operadriver_linux64/sha512_sum",
772-
]
773-
elif IS_WINDOWS and "64" in ARCH:
774-
file_name = "operadriver_win64.zip"
775-
platform_code = "win64"
776-
inner_folder = "operadriver_%s/" % platform_code
777-
expected_contents = [
778-
"operadriver_win64/",
779-
"operadriver_win64/operadriver.exe",
780-
"operadriver_win64/sha512_sum",
781-
]
782-
elif IS_WINDOWS:
783-
file_name = "operadriver_win32.zip"
784-
platform_code = "win32"
785-
inner_folder = "operadriver_%s/" % platform_code
786-
expected_contents = [
787-
"operadriver_win32/",
788-
"operadriver_win32/operadriver.exe",
789-
"operadriver_win32/sha512_sum",
790-
]
791-
else:
792-
raise Exception(
793-
"Cannot determine which version of Operadriver to download!"
794-
)
795-
796-
download_url = (
797-
"https://github.com/operasoftware/operachromiumdriver/"
798-
"releases/download/"
799-
"%s/%s" % (use_version, file_name)
800-
)
801-
msg = c2 + "operadriver to download" + cr
802-
p_version = c3 + use_version + cr
803-
log_d("\n*** %s = %s" % (msg, p_version))
804739
else:
805740
invalid_run_command()
806741

@@ -1095,60 +1030,6 @@ def main(override=None, intel_for_uc=None, force_uc=None):
10951030
make_executable(path_file)
10961031
log_d("Also copied to: %s%s%s" % (c3, path_file, cr))
10971032
log_d("")
1098-
elif name == "operadriver":
1099-
if len(contents) > 3:
1100-
raise Exception("Unexpected content in OperaDriver Zip file!")
1101-
# Zip file is valid. Proceed.
1102-
driver_path = None
1103-
driver_file = None
1104-
for f_name in contents:
1105-
# Remove existing version if exists
1106-
str_name = str(f_name).split(inner_folder)[1]
1107-
new_file = os.path.join(downloads_folder, str_name)
1108-
if str_name == "operadriver" or str_name == "operadriver.exe":
1109-
driver_file = str_name
1110-
driver_path = new_file
1111-
if os.path.exists(new_file):
1112-
os.remove(new_file)
1113-
if not driver_file or not driver_path:
1114-
raise Exception("Operadriver missing from Zip file!")
1115-
log_d("Extracting %s from %s ..." % (contents, file_name))
1116-
zip_ref.extractall(downloads_folder)
1117-
zip_ref.close()
1118-
os.remove(zip_file_path)
1119-
log_d("%sUnzip Complete!%s\n" % (c2, cr))
1120-
inner_driver = os.path.join(
1121-
downloads_folder, inner_folder, driver_file
1122-
)
1123-
inner_sha = os.path.join(
1124-
downloads_folder, inner_folder, "sha512_sum"
1125-
)
1126-
shutil.copyfile(inner_driver, driver_path)
1127-
pr_driver_path = c3 + driver_path + cr
1128-
log_d(
1129-
"The file [%s] was saved to:\n%s\n"
1130-
% (driver_file, pr_driver_path)
1131-
)
1132-
log_d("Making [%s %s] executable ..." % (driver_file, use_version))
1133-
make_executable(driver_path)
1134-
log_d(
1135-
"%s[%s %s] is now ready for use!%s"
1136-
% (c1, driver_file, use_version, cr)
1137-
)
1138-
if copy_to_path and os.path.exists(LOCAL_PATH):
1139-
path_file = LOCAL_PATH + driver_file
1140-
shutil.copyfile(driver_path, path_file)
1141-
make_executable(path_file)
1142-
log_d("Also copied to: %s%s%s" % (c3, path_file, cr))
1143-
# Clean up extra files
1144-
if os.path.exists(inner_driver):
1145-
os.remove(inner_driver)
1146-
if os.path.exists(inner_sha):
1147-
os.remove(inner_sha)
1148-
if os.path.exists(os.path.join(downloads_folder, inner_folder)):
1149-
# Only works if the directory is empty
1150-
os.rmdir(os.path.join(downloads_folder, inner_folder))
1151-
log_d("")
11521033
elif len(contents) == 0:
11531034
raise Exception("Zip file %s is empty!" % zip_file_path)
11541035
else:

0 commit comments

Comments
 (0)