|
14 | 14 |
|
15 | 15 | from webdriver_manager.core.driver_cache import DriverCacheManager |
16 | 16 | from webdriver_manager.core.os_manager import OperationSystemManager, ChromeType |
17 | | -from webdriver_manager.drivers.chrome import CHROME_FOR_TESTING_LATEST_PATCH_VERSIONS_PER_BUILD_URL, \ |
18 | | - CHROME_FOR_TESTING_KNOWN_GOOD_VERSIONS_URL |
| 17 | +from webdriver_manager.drivers.chrome import ( |
| 18 | + CHROMEDRIVER_STORAGE_LATEST_RELEASE_URL, |
| 19 | + CHROME_FOR_TESTING_LATEST_PATCH_VERSIONS_PER_BUILD_URL, |
| 20 | + CHROME_FOR_TESTING_KNOWN_GOOD_VERSIONS_URL, |
| 21 | +) |
19 | 22 |
|
20 | 23 | os.environ.setdefault("WDM_LOCAL", "false") |
21 | 24 |
|
@@ -156,6 +159,130 @@ def test_chrome_118_resolves_cft_driver_version_and_download_url(): |
156 | 159 | assert CHROME_FOR_TESTING_KNOWN_GOOD_VERSIONS_URL in http_client.requested_urls |
157 | 160 |
|
158 | 161 |
|
| 162 | +def test_chrome_102_uses_legacy_storage_url_and_win32_archive_for_win64(): |
| 163 | + driver, http_client = chrome_driver_for( |
| 164 | + browser_version="102.0.5005.63", |
| 165 | + driver_version="102.0.5005.61", |
| 166 | + chrome_type=ChromeType.GOOGLE, |
| 167 | + responses={}, |
| 168 | + ) |
| 169 | + |
| 170 | + assert driver.get_driver_download_url("win64") == ( |
| 171 | + "https://chromedriver.storage.googleapis.com/" |
| 172 | + "102.0.5005.61/chromedriver_win32.zip" |
| 173 | + ) |
| 174 | + assert http_client.requested_urls == [] |
| 175 | + |
| 176 | + |
| 177 | +def test_chrome_102_detected_version_uses_legacy_latest_release_url(): |
| 178 | + expected_url = f"{CHROMEDRIVER_STORAGE_LATEST_RELEASE_URL}_102.0.5005" |
| 179 | + driver, http_client = chrome_driver_for( |
| 180 | + browser_version="102.0.5005.63", |
| 181 | + chrome_type=ChromeType.GOOGLE, |
| 182 | + responses={ |
| 183 | + expected_url: "102.0.5005.61", |
| 184 | + }, |
| 185 | + ) |
| 186 | + |
| 187 | + assert driver.get_latest_release_version() == "102.0.5005.61" |
| 188 | + assert http_client.requested_urls == [expected_url] |
| 189 | + |
| 190 | + |
| 191 | +def test_chrome_download_url_boundary_switches_from_legacy_to_cft(): |
| 192 | + legacy_driver, legacy_http_client = chrome_driver_for( |
| 193 | + browser_version="114.0.5735.199", |
| 194 | + driver_version="114.0.5735.90", |
| 195 | + chrome_type=ChromeType.GOOGLE, |
| 196 | + responses={}, |
| 197 | + ) |
| 198 | + cft_url = ( |
| 199 | + "https://storage.googleapis.com/chrome-for-testing-public/" |
| 200 | + "115.0.5790.170/win64/chromedriver-win64.zip" |
| 201 | + ) |
| 202 | + cft_driver, cft_http_client = chrome_driver_for( |
| 203 | + browser_version="115.0.5790.99", |
| 204 | + driver_version="115.0.5790.170", |
| 205 | + chrome_type=ChromeType.GOOGLE, |
| 206 | + responses={ |
| 207 | + CHROME_FOR_TESTING_KNOWN_GOOD_VERSIONS_URL: { |
| 208 | + "versions": [ |
| 209 | + { |
| 210 | + "version": "115.0.5790.170", |
| 211 | + "downloads": { |
| 212 | + "chromedriver": [ |
| 213 | + {"platform": "win64", "url": cft_url}, |
| 214 | + ], |
| 215 | + }, |
| 216 | + }, |
| 217 | + ], |
| 218 | + }, |
| 219 | + }, |
| 220 | + ) |
| 221 | + |
| 222 | + assert legacy_driver.get_driver_download_url("win64") == ( |
| 223 | + "https://chromedriver.storage.googleapis.com/" |
| 224 | + "114.0.5735.90/chromedriver_win32.zip" |
| 225 | + ) |
| 226 | + assert legacy_http_client.requested_urls == [] |
| 227 | + assert cft_driver.get_driver_download_url("win64") == cft_url |
| 228 | + assert cft_http_client.requested_urls == [ |
| 229 | + CHROME_FOR_TESTING_KNOWN_GOOD_VERSIONS_URL, |
| 230 | + ] |
| 231 | + |
| 232 | + |
| 233 | +def test_chrome_manager_downloads_legacy_chrome_102_url_for_win64(tmp_path): |
| 234 | + class CacheManagerMock: |
| 235 | + def find_driver(self, _driver): |
| 236 | + return None |
| 237 | + |
| 238 | + def get_driver_lock_path(self, _driver_name, _os_type): |
| 239 | + return str(tmp_path / ".wdm-lock") |
| 240 | + |
| 241 | + def save_file_to_cache(self, _driver, _file): |
| 242 | + driver_path = tmp_path / "chromedriver.exe" |
| 243 | + driver_path.write_text("") |
| 244 | + return str(driver_path) |
| 245 | + |
| 246 | + class DownloadManagerMock: |
| 247 | + http_client = None |
| 248 | + |
| 249 | + def __init__(self): |
| 250 | + self.requested_urls = [] |
| 251 | + |
| 252 | + def download_file(self, url): |
| 253 | + self.requested_urls.append(url) |
| 254 | + return object() |
| 255 | + |
| 256 | + class Windows64OSManagerMock: |
| 257 | + def get_os_type(self): |
| 258 | + return "win64" |
| 259 | + |
| 260 | + def get_os_architecture(self): |
| 261 | + return 64 |
| 262 | + |
| 263 | + def is_mac_os(self, _os_type): |
| 264 | + return False |
| 265 | + |
| 266 | + def get_browser_version_from_os(self, _browser_type=None): |
| 267 | + return "102.0.5005.63" |
| 268 | + |
| 269 | + download_manager = DownloadManagerMock() |
| 270 | + manager = ChromeDriverManager( |
| 271 | + driver_version="102.0.5005.61", |
| 272 | + download_manager=download_manager, |
| 273 | + cache_manager=CacheManagerMock(), |
| 274 | + os_system_manager=Windows64OSManagerMock(), |
| 275 | + ) |
| 276 | + |
| 277 | + driver_path = manager.install() |
| 278 | + |
| 279 | + assert os.path.exists(driver_path) |
| 280 | + assert download_manager.requested_urls == [ |
| 281 | + "https://chromedriver.storage.googleapis.com/" |
| 282 | + "102.0.5005.61/chromedriver_win32.zip" |
| 283 | + ] |
| 284 | + |
| 285 | + |
159 | 286 | def test_chrome_115_plus_prefers_win64_download_when_available(): |
160 | 287 | expected_url = ( |
161 | 288 | "https://storage.googleapis.com/chrome-for-testing-public/" |
|
0 commit comments