Skip to content

Commit ae0f704

Browse files
committed
[rust] Selenium Manager support nightly Grid (#13384)
1 parent c29317c commit ae0f704

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

Diff for: rust/src/grid.rs

+20-10
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,16 @@ impl SeleniumManager for GridManager {
106106
}
107107

108108
fn request_driver_version(&mut self) -> Result<String, Error> {
109-
let major_browser_version_binding = self.get_major_browser_version();
110-
let major_browser_version = major_browser_version_binding.as_str();
109+
let is_nightly = self.is_nightly(self.get_driver_version());
110+
let major_driver_version_binding = self.get_major_driver_version();
111+
let major_driver_version = major_driver_version_binding.as_str();
111112
let cache_path = self.get_cache_path()?;
112113
let mut metadata = get_metadata(self.get_logger(), &cache_path);
113114

114115
match get_driver_version_from_metadata(
115116
&metadata.drivers,
116117
self.driver_name,
117-
major_browser_version,
118+
major_driver_version,
118119
) {
119120
Some(driver_version) => {
120121
self.log.trace(format!(
@@ -135,8 +136,12 @@ impl SeleniumManager for GridManager {
135136
.into_iter()
136137
.filter(|r| {
137138
r.assets.iter().any(|url| {
138-
url.browser_download_url.contains(GRID_RELEASE)
139-
&& !url.browser_download_url.contains(SNAPSHOT)
139+
if is_nightly {
140+
url.browser_download_url.contains(SNAPSHOT)
141+
} else {
142+
url.browser_download_url.contains(GRID_RELEASE)
143+
&& !url.browser_download_url.contains(SNAPSHOT)
144+
}
140145
})
141146
})
142147
.collect();
@@ -155,15 +160,20 @@ impl SeleniumManager for GridManager {
155160

156161
let index_release =
157162
driver_url.rfind(GRID_RELEASE).unwrap() + GRID_RELEASE.len() + 1;
158-
let driver_version = parse_version(
159-
driver_url.as_str()[index_release..].to_string(),
160-
self.get_logger(),
161-
)?;
163+
let driver_version = if is_nightly {
164+
let index_jar = driver_url.rfind(GRID_EXTENSION).unwrap() - 1;
165+
driver_url.as_str()[index_release..index_jar].to_string()
166+
} else {
167+
parse_version(
168+
driver_url.as_str()[index_release..].to_string(),
169+
self.get_logger(),
170+
)?
171+
};
162172

163173
let driver_ttl = self.get_ttl();
164174
if driver_ttl > 0 {
165175
metadata.drivers.push(create_driver_metadata(
166-
major_browser_version,
176+
major_driver_version,
167177
self.driver_name,
168178
&driver_version,
169179
driver_ttl,

Diff for: rust/src/lib.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,9 @@ pub trait SeleniumManager {
798798
}
799799

800800
// With the discovered browser version, discover the proper driver version using online endpoints
801-
if self.get_driver_version().is_empty() {
801+
if self.get_driver_version().is_empty()
802+
|| (self.is_grid() && self.is_nightly(self.get_driver_version()))
803+
{
802804
match self.discover_driver_version() {
803805
Ok(driver_version) => {
804806
self.set_driver_version(driver_version);
@@ -1030,7 +1032,7 @@ pub trait SeleniumManager {
10301032
}
10311033

10321034
let mut release_version = driver_version.to_string();
1033-
if !driver_version.ends_with('0') {
1035+
if !driver_version.ends_with('0') && !self.is_nightly(driver_version) {
10341036
// E.g.: version 4.8.1 is shipped within release 4.8.0
10351037
let error_message = format!(
10361038
"Wrong {} version: '{}'",

Diff for: rust/tests/grid_tests.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use crate::common::{assert_output, get_selenium_manager, get_stdout};
2020
use exitcode::DATAERR;
2121
use rstest::rstest;
2222
use selenium_manager::logger::JsonOutput;
23+
use selenium_manager::{NIGHTLY, SNAPSHOT};
2324
use std::path::Path;
2425
use std::str;
2526

@@ -51,6 +52,7 @@ fn grid_latest_test() {
5152
#[case("4.8.0")]
5253
#[case("4.9.0")]
5354
#[case("4.10.0")]
55+
#[case("nightly")]
5456
fn grid_version_test(#[case] grid_version: &str) {
5557
let mut cmd = get_selenium_manager();
5658
cmd.args(["--grid", grid_version, "--output", "json"])
@@ -63,7 +65,12 @@ fn grid_version_test(#[case] grid_version: &str) {
6365
let json: JsonOutput = serde_json::from_str(&stdout).unwrap();
6466
let jar = Path::new(&json.result.driver_path);
6567
let jar_name = jar.file_name().unwrap().to_str().unwrap();
66-
assert!(jar_name.contains(grid_version));
68+
let version_label = if grid_version.eq_ignore_ascii_case(NIGHTLY) {
69+
SNAPSHOT
70+
} else {
71+
grid_version
72+
};
73+
assert!(jar_name.contains(version_label));
6774
}
6875

6976
#[rstest]

0 commit comments

Comments
 (0)