Skip to content

Commit fe5b198

Browse files
authored
[rust] Selenium Manager honors full browser version (#13419) (#14619)
* [rust] Selenium Manager honors full browser version (#13419) * [rust] Minor change related to variable name
1 parent 0d2dda1 commit fe5b198

File tree

3 files changed

+61
-46
lines changed

3 files changed

+61
-46
lines changed

rust/src/chrome.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -521,18 +521,18 @@ impl SeleniumManager for ChromeManager {
521521
let good_versions_url = self.create_cft_url_for_browsers(GOOD_VERSIONS_ENDPOINT);
522522
let all_versions =
523523
self.request_versions_from_online::<VersionsWithDownloads>(&good_versions_url)?;
524-
let filtered_versions: Vec<Version> = all_versions
525-
.versions
526-
.into_iter()
527-
.filter(|r| r.version.starts_with(major_browser_version.as_str()))
528-
.collect();
524+
let iter_versions = all_versions.versions.into_iter();
525+
let filtered_versions: Vec<Version> = if self.is_browser_version_specific() {
526+
iter_versions
527+
.filter(|r| r.version.eq(browser_version.as_str()))
528+
.collect()
529+
} else {
530+
iter_versions
531+
.filter(|r| r.version.starts_with(major_browser_version.as_str()))
532+
.collect()
533+
};
529534
if filtered_versions.is_empty() {
530-
return Err(anyhow!(format_three_args(
531-
UNAVAILABLE_DOWNLOAD_WITH_MIN_VERSION_ERR_MSG,
532-
browser_name,
533-
&major_browser_version,
534-
&MIN_CHROME_VERSION_CFT.to_string(),
535-
)));
535+
return self.unavailable_download();
536536
}
537537
let last_browser = filtered_versions.last().unwrap();
538538
let platform_url: Vec<&PlatformUrl> = last_browser

rust/src/lib.rs

Lines changed: 47 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -237,43 +237,47 @@ pub trait SeleniumManager {
237237
)));
238238
}
239239

240-
// Browser version is checked in the local metadata
241-
match get_browser_version_from_metadata(
242-
&metadata.browsers,
243-
self.get_browser_name(),
244-
&major_browser_version,
245-
) {
246-
Some(version) => {
247-
self.get_logger().trace(format!(
248-
"Browser with valid TTL. Getting {} version from metadata",
249-
self.get_browser_name()
250-
));
251-
browser_version = version;
252-
self.set_browser_version(browser_version.clone());
253-
}
254-
_ => {
255-
// If not in metadata, discover version using online metadata
256-
if self.is_browser_version_stable() || self.is_browser_version_empty() {
257-
browser_version =
258-
self.request_latest_browser_version_from_online(original_browser_version)?;
259-
} else {
260-
browser_version =
261-
self.request_fixed_browser_version_from_online(original_browser_version)?;
240+
if self.is_version_specific(original_browser_version) {
241+
browser_version = original_browser_version.to_string();
242+
} else {
243+
// Browser version is checked in the local metadata
244+
match get_browser_version_from_metadata(
245+
&metadata.browsers,
246+
self.get_browser_name(),
247+
&major_browser_version,
248+
) {
249+
Some(version) => {
250+
self.get_logger().trace(format!(
251+
"Browser with valid TTL. Getting {} version from metadata",
252+
self.get_browser_name()
253+
));
254+
browser_version = version;
255+
self.set_browser_version(browser_version.clone());
262256
}
263-
self.set_browser_version(browser_version.clone());
257+
_ => {
258+
// If not in metadata, discover version using online metadata
259+
if self.is_browser_version_stable() || self.is_browser_version_empty() {
260+
browser_version = self
261+
.request_latest_browser_version_from_online(original_browser_version)?;
262+
} else {
263+
browser_version = self
264+
.request_fixed_browser_version_from_online(original_browser_version)?;
265+
}
266+
self.set_browser_version(browser_version.clone());
264267

265-
let browser_ttl = self.get_ttl();
266-
if browser_ttl > 0
267-
&& !self.is_browser_version_empty()
268-
&& !self.is_browser_version_stable()
269-
{
270-
metadata.browsers.push(create_browser_metadata(
271-
self.get_browser_name(),
272-
&major_browser_version,
273-
&browser_version,
274-
browser_ttl,
275-
));
276-
write_metadata(&metadata, self.get_logger(), cache_path);
268+
let browser_ttl = self.get_ttl();
269+
if browser_ttl > 0
270+
&& !self.is_browser_version_empty()
271+
&& !self.is_browser_version_stable()
272+
{
273+
metadata.browsers.push(create_browser_metadata(
274+
self.get_browser_name(),
275+
&major_browser_version,
276+
&browser_version,
277+
browser_ttl,
278+
));
279+
write_metadata(&metadata, self.get_logger(), cache_path);
280+
}
277281
}
278282
}
279283
}
@@ -715,6 +719,14 @@ pub trait SeleniumManager {
715719
self.is_stable(self.get_browser_version())
716720
}
717721

722+
fn is_version_specific(&self, version: &str) -> bool {
723+
version.contains(".")
724+
}
725+
726+
fn is_browser_version_specific(&self) -> bool {
727+
self.is_version_specific(self.get_browser_version())
728+
}
729+
718730
fn setup(&mut self) -> Result<PathBuf, Error> {
719731
let mut driver_in_path = None;
720732
let mut driver_in_path_version = None;

rust/tests/browser_download_tests.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,13 @@ fn browser_latest_download_test(#[case] browser: String) {
4848

4949
#[rstest]
5050
#[case("chrome", "113")]
51+
#[case("chrome", "131.0.6725.0")]
5152
#[case("chrome", "beta")]
5253
#[case("firefox", "116")]
54+
#[case("firefox", "121.0.1")]
5355
#[case("firefox", "beta")]
5456
#[case("firefox", "esr")]
57+
#[case("edge", "129.0.2792.79")]
5558
#[case("edge", "beta")]
5659
fn browser_version_download_test(#[case] browser: String, #[case] browser_version: String) {
5760
if OS.eq("windows") && browser.eq("edge") {

0 commit comments

Comments
 (0)