Skip to content

Commit 878dbab

Browse files
authored
Merge branch 'trunk' into close-bidi-socket-connection
2 parents dfa8f8f + 0d42674 commit 878dbab

File tree

5 files changed

+75
-25
lines changed

5 files changed

+75
-25
lines changed

rust/src/config.rs

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ pub const CACHE_PATH_KEY: &str = "cache-path";
4242

4343
pub struct ManagerConfig {
4444
pub cache_path: String,
45+
pub fallback_driver_from_cache: bool,
4546
pub browser_version: String,
4647
pub driver_version: String,
4748
pub browser_path: String,
@@ -99,6 +100,7 @@ impl ManagerConfig {
99100

100101
ManagerConfig {
101102
cache_path,
103+
fallback_driver_from_cache: true,
102104
browser_version: StringKey(vec!["browser-version", &browser_version_label], "")
103105
.get_value(),
104106
driver_version: StringKey(vec!["driver-version", &driver_version_label], "")

rust/src/firefox.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,11 @@ impl SeleniumManager for FirefoxManager {
223223
_ => {
224224
self.assert_online_or_err(OFFLINE_REQUEST_ERR_MSG)?;
225225

226+
let driver_version_url =
227+
self.get_driver_mirror_versions_url_or_default(DRIVER_VERSIONS_URL);
226228
let driver_version = match parse_json_from_url::<GeckodriverReleases>(
227229
self.get_http_client(),
228-
DRIVER_VERSIONS_URL,
230+
&driver_version_url,
229231
) {
230232
Ok(driver_releases) => {
231233
let major_browser_version_int =

rust/src/lib.rs

+34
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,12 @@ pub trait SeleniumManager {
10831083
if let Some(path) = self.detect_browser_path() {
10841084
browser_path = path_to_string(&path);
10851085
}
1086+
} else if !Path::new(&browser_path).exists() {
1087+
self.set_fallback_driver_from_cache(false);
1088+
return Err(anyhow!(format_one_arg(
1089+
"Browser path does not exist: {}",
1090+
&browser_path,
1091+
)));
10861092
}
10871093
let escaped_browser_path = self.get_escaped_path(browser_path.to_string());
10881094

@@ -1288,6 +1294,26 @@ pub trait SeleniumManager {
12881294
}
12891295
}
12901296

1297+
fn get_driver_mirror_versions_url_or_default<'a>(&'a self, default_url: &'a str) -> String {
1298+
let driver_mirror_url = self.get_driver_mirror_url();
1299+
if !driver_mirror_url.is_empty() {
1300+
let driver_versions_path = default_url.rfind('/').map(|i| &default_url[i + 1..]);
1301+
if let Some(path) = driver_versions_path {
1302+
let driver_mirror_versions_url = if driver_mirror_url.ends_with('/') {
1303+
format!("{}{}", driver_mirror_url, path)
1304+
} else {
1305+
format!("{}/{}", driver_mirror_url, path)
1306+
};
1307+
self.get_logger().debug(format!(
1308+
"Using mirror URL to discover driver versions: {}",
1309+
driver_mirror_versions_url
1310+
));
1311+
return driver_mirror_versions_url;
1312+
}
1313+
}
1314+
default_url.to_string()
1315+
}
1316+
12911317
fn get_driver_mirror_url_or_default<'a>(&'a self, default_url: &'a str) -> String {
12921318
self.get_url_or_default(self.get_driver_mirror_url(), default_url)
12931319
}
@@ -1504,6 +1530,14 @@ pub trait SeleniumManager {
15041530
self.get_config_mut().avoid_stats = true;
15051531
}
15061532
}
1533+
1534+
fn is_fallback_driver_from_cache(&self) -> bool {
1535+
self.get_config().fallback_driver_from_cache
1536+
}
1537+
1538+
fn set_fallback_driver_from_cache(&mut self, fallback_driver_from_cache: bool) {
1539+
self.get_config_mut().fallback_driver_from_cache = fallback_driver_from_cache;
1540+
}
15071541
}
15081542

15091543
// ----------------------------------------------------------

rust/src/main.rs

+22-19
Original file line numberDiff line numberDiff line change
@@ -253,25 +253,28 @@ fn main() {
253253
})
254254
.unwrap_or_else(|err| {
255255
let log = selenium_manager.get_logger();
256-
if let Some(best_driver_from_cache) =
257-
selenium_manager.find_best_driver_from_cache().unwrap()
258-
{
259-
log.debug_or_warn(
260-
format!(
261-
"There was an error managing {} ({}); using driver found in the cache",
262-
selenium_manager.get_driver_name(),
263-
err
264-
),
265-
selenium_manager.is_offline(),
266-
);
267-
log_driver_and_browser_path(
268-
log,
269-
&best_driver_from_cache,
270-
&selenium_manager.get_browser_path_or_latest_from_cache(),
271-
selenium_manager.get_receiver(),
272-
);
273-
flush_and_exit(OK, log, Some(err));
274-
} else if selenium_manager.is_offline() {
256+
if selenium_manager.is_fallback_driver_from_cache() {
257+
if let Some(best_driver_from_cache) =
258+
selenium_manager.find_best_driver_from_cache().unwrap()
259+
{
260+
log.debug_or_warn(
261+
format!(
262+
"There was an error managing {} ({}); using driver found in the cache",
263+
selenium_manager.get_driver_name(),
264+
err
265+
),
266+
selenium_manager.is_offline(),
267+
);
268+
log_driver_and_browser_path(
269+
log,
270+
&best_driver_from_cache,
271+
&selenium_manager.get_browser_path_or_latest_from_cache(),
272+
selenium_manager.get_receiver(),
273+
);
274+
flush_and_exit(OK, log, Some(err));
275+
}
276+
}
277+
if selenium_manager.is_offline() {
275278
log.warn(&err);
276279
flush_and_exit(OK, log, Some(err));
277280
} else {

rust/tests/browser_tests.rs

+14-5
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,6 @@ fn invalid_geckodriver_version_test() {
128128
r"C:\Program Files\Google\Chrome\Application\chrome.exe"
129129
)]
130130
#[case("linux", "chrome", "/usr/bin/google-chrome")]
131-
#[case(
132-
"macos",
133-
"chrome",
134-
r"/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
135-
)]
136131
#[case(
137132
"macos",
138133
"chrome",
@@ -151,3 +146,17 @@ fn browser_path_test(#[case] os: String, #[case] browser: String, #[case] browse
151146
assert!(!stdout.contains("WARN"));
152147
}
153148
}
149+
150+
#[test]
151+
fn invalid_browser_path_test() {
152+
let mut cmd = get_selenium_manager();
153+
cmd.args([
154+
"--browser",
155+
"chrome",
156+
"--browser-path",
157+
"/bad/path/google-chrome-wrong",
158+
])
159+
.assert()
160+
.code(DATAERR)
161+
.failure();
162+
}

0 commit comments

Comments
 (0)