Skip to content

Commit 50613c2

Browse files
[rust] Improve SM error messages when browser/driver version not found (#17584)
[rust] Improve SM error messages when browser/driver version is not found Add per-browser links to canonical version lists in error messages so users know where to find valid versions when a lookup fails.
1 parent abd7aa2 commit 50613c2

5 files changed

Lines changed: 58 additions & 18 deletions

File tree

rust/src/chrome.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,15 @@ impl ChromeManager {
194194
.filter(|r| r.version.starts_with(version_for_filtering.as_str()))
195195
.collect();
196196
if filtered_versions.is_empty() {
197-
return Err(anyhow!(format_three_args(
198-
UNAVAILABLE_DOWNLOAD_WITH_MIN_VERSION_ERR_MSG,
199-
self.get_driver_name(),
200-
version_for_filtering.as_str(),
201-
&MIN_CHROMEDRIVER_VERSION_CFT.to_string(),
197+
return Err(anyhow!(format!(
198+
"{}. Check available versions at {}",
199+
format_three_args(
200+
UNAVAILABLE_DOWNLOAD_WITH_MIN_VERSION_ERR_MSG,
201+
self.get_driver_name(),
202+
version_for_filtering.as_str(),
203+
&MIN_CHROMEDRIVER_VERSION_CFT.to_string(),
204+
),
205+
CFT_URL
202206
)));
203207
}
204208

@@ -582,6 +586,10 @@ impl SeleniumManager for ChromeManager {
582586
Ok(None)
583587
}
584588

589+
fn get_browser_versions_url(&self) -> &str {
590+
CFT_URL
591+
}
592+
585593
fn is_download_browser(&self) -> bool {
586594
self.download_browser
587595
}

rust/src/edge.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const DRIVER_URL: &str = "https://msedgedriver.microsoft.com/";
4949
const LATEST_STABLE: &str = "LATEST_STABLE";
5050
const LATEST_RELEASE: &str = "LATEST_RELEASE";
5151
const BROWSER_URL: &str = "https://edgeupdates.microsoft.com/api/products/";
52+
const EDGE_VERSIONS_URL: &str = "https://developer.microsoft.com/microsoft-edge/webdriver/";
5253
const MIN_EDGE_VERSION_DOWNLOAD: i32 = 113;
5354
const EDGE_WINDOWS_AND_LINUX_APP_NAME: &str = "msedge";
5455
const EDGE_MACOS_APP_NAME: &str = "Microsoft Edge.app/Contents/MacOS/Microsoft Edge";
@@ -540,6 +541,10 @@ impl SeleniumManager for EdgeManager {
540541
Ok(Some(browser_label))
541542
}
542543

544+
fn get_browser_versions_url(&self) -> &str {
545+
EDGE_VERSIONS_URL
546+
}
547+
543548
fn is_download_browser(&self) -> bool {
544549
self.download_browser
545550
}

rust/src/firefox.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const MIN_DOWNLOADABLE_FIREFOX_VERSION_MAC: i32 = 4;
6565
const MIN_DOWNLOADABLE_FIREFOX_VERSION_LINUX: i32 = 4;
6666
const UNAVAILABLE_DOWNLOAD_ERROR_MESSAGE: &str =
6767
"{} {} not available for downloading (minimum version: {})";
68+
const FIREFOX_RELEASES_URL: &str = "https://www.mozilla.org/en-US/firefox/releases/";
6869
const FIREFOX_SNAP_LINK: &str = "/snap/bin/firefox";
6970
const FIREFOX_SNAP_BINARY: &str = "/snap/firefox/current/usr/lib/firefox/firefox";
7071

@@ -254,8 +255,11 @@ impl SeleniumManager for FirefoxManager {
254255
));
255256
if filtered_versions.is_empty() {
256257
return Err(anyhow!(format!(
257-
"Not valid {} version found for {} {}",
258-
&self.driver_name, &self.browser_name, major_browser_version_int
258+
"Not valid {} version found for {} {}. Check available versions at {}",
259+
&self.driver_name,
260+
&self.browser_name,
261+
major_browser_version_int,
262+
DRIVER_URL
259263
)));
260264
} else {
261265
filtered_versions.first().unwrap().to_string()
@@ -466,11 +470,15 @@ impl SeleniumManager for FirefoxManager {
466470

467471
let min_downloadable_version = self.get_min_browser_version_for_download()?;
468472
if major_browser_version < min_downloadable_version {
469-
return Err(anyhow!(format_three_args(
470-
UNAVAILABLE_DOWNLOAD_ERROR_MESSAGE,
471-
browser_name,
472-
browser_version,
473-
&min_downloadable_version.to_string(),
473+
return Err(anyhow!(format!(
474+
"{}. Check available versions at {}",
475+
format_three_args(
476+
UNAVAILABLE_DOWNLOAD_ERROR_MESSAGE,
477+
browser_name,
478+
browser_version,
479+
&min_downloadable_version.to_string(),
480+
),
481+
FIREFOX_RELEASES_URL
474482
)));
475483
}
476484

@@ -619,6 +627,10 @@ impl SeleniumManager for FirefoxManager {
619627
Ok(Some(browser_label))
620628
}
621629

630+
fn get_browser_versions_url(&self) -> &str {
631+
FIREFOX_RELEASES_URL
632+
}
633+
622634
fn is_download_browser(&self) -> bool {
623635
self.download_browser
624636
}

rust/src/iexplorer.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,9 @@ impl SeleniumManager for IExplorerManager {
183183
Ok(driver_version)
184184
} else {
185185
Err(anyhow!(format!(
186-
"{} release not available",
187-
self.get_driver_name()
186+
"{} release not available. Check available versions at {}",
187+
self.get_driver_name(),
188+
DRIVER_URL
188189
)))
189190
}
190191
}

rust/src/lib.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ pub trait SeleniumManager {
184184
// Shared functions
185185
// ----------------------------------------------------------
186186

187+
fn get_browser_versions_url(&self) -> &str {
188+
""
189+
}
190+
187191
fn download_driver(&mut self) -> Result<(), Error> {
188192
let driver_path_in_cache = self.get_driver_path_in_cache()?;
189193
let driver_name_with_extension = self.get_driver_name_with_extension();
@@ -246,12 +250,17 @@ pub trait SeleniumManager {
246250
&& !self.is_browser_version_empty()
247251
&& major_browser_version_int < min_browser_version_for_download
248252
{
249-
return Err(anyhow!(format_three_args(
253+
let mut message = format_three_args(
250254
UNAVAILABLE_DOWNLOAD_WITH_MIN_VERSION_ERR_MSG,
251255
self.get_browser_name(),
252256
&major_browser_version,
253257
&min_browser_version_for_download.to_string(),
254-
)));
258+
);
259+
let versions_url = self.get_browser_versions_url();
260+
if !versions_url.is_empty() {
261+
message = format!("{}. Check available versions at {}", message, versions_url);
262+
}
263+
return Err(anyhow!(message));
255264
}
256265

257266
if self.is_version_specific(original_browser_version) {
@@ -1285,11 +1294,16 @@ pub trait SeleniumManager {
12851294
} else {
12861295
format!(" {}", browser_version)
12871296
};
1288-
Err(anyhow!(format_two_args(
1297+
let mut message = format_two_args(
12891298
error_message,
12901299
self.get_browser_name(),
12911300
&browser_version_label,
1292-
)))
1301+
);
1302+
let versions_url = self.get_browser_versions_url();
1303+
if !versions_url.is_empty() {
1304+
message = format!("{}. Check available versions at {}", message, versions_url);
1305+
}
1306+
Err(anyhow!(message))
12931307
}
12941308

12951309
// ----------------------------------------------------------

0 commit comments

Comments
 (0)