diff --git a/rust/src/main.rs b/rust/src/main.rs index c2a2a406f83bc..43c9cf8b9b909 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -249,6 +249,7 @@ fn main() { &driver_path, &selenium_manager.get_browser_path_or_latest_from_cache(), selenium_manager.get_receiver(), + selenium_manager.is_offline(), ); flush_and_exit(OK, log, None); }) @@ -271,12 +272,20 @@ fn main() { &best_driver_from_cache, &selenium_manager.get_browser_path_or_latest_from_cache(), selenium_manager.get_receiver(), + selenium_manager.is_offline(), ); flush_and_exit(OK, log, Some(err)); } } if selenium_manager.is_offline() { log.warn(&err); + log_driver_and_browser_path( + log, + &Path::new(""), + &selenium_manager.get_browser_path_or_latest_from_cache(), + selenium_manager.get_receiver(), + selenium_manager.is_offline(), + ); flush_and_exit(OK, log, Some(err)); } else { let error_msg = log @@ -294,13 +303,15 @@ fn log_driver_and_browser_path( driver_path: &Path, browser_path: &str, receiver: &Receiver, + is_offline: bool, ) { if let Ok(err) = receiver.try_recv() { log.warn(err); } - if driver_path.exists() { + + if !driver_path.as_os_str().is_empty() && driver_path.exists() { log.info(format!("{}{}", DRIVER_PATH, driver_path.display())); - } else { + } else if !is_offline { log.error(format!("Driver unavailable: {}", driver_path.display())); flush_and_exit(UNAVAILABLE, log, None); } diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index 2d1020a4532f3..466b832937d61 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -31,3 +31,44 @@ fn offline_test() { assert!(stdout.contains("offline mode")); } + +#[test] +fn offline_json_output_includes_browser_path_test() { + use serde_json::Value; + + let mut cmd = get_selenium_manager(); + cmd.args([ + "--debug", + "--browser", + "chrome", + "--offline", + "--output", + "json", + ]) + .assert() + .success() + .code(0); + + let stdout = get_stdout(&mut cmd); + + let json: Value = serde_json::from_str(&stdout).expect("Should be valid JSON"); + + assert!(json["result"].is_object(), "Result should be an object"); + assert!( + json["result"]["code"].is_number(), + "Code should be a number" + ); + assert_eq!(json["result"]["code"], 0, "Code should be 0 for success"); + + assert!( + json["result"]["browser_path"].is_string(), + "browser_path should be a string" + ); + + assert!(json["logs"].is_array(), "Logs should be an array"); + let logs_str = json["logs"].to_string(); + assert!( + logs_str.contains("offline mode"), + "Should mention offline mode in logs" + ); +}