Skip to content

Commit a056044

Browse files
bonigarciadiemol
andauthored
[rust] Include arguments for skipping drivers and browsers in path (#14444)
* [rust] Include arguments for skipping drivers and browsers in path * [rust] Update skip logic with the current codebase --------- Co-authored-by: Diego Molina <[email protected]>
1 parent cdc57b2 commit a056044

File tree

3 files changed

+74
-22
lines changed

3 files changed

+74
-22
lines changed

rust/src/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ pub struct ManagerConfig {
5858
pub language_binding: String,
5959
pub selenium_version: String,
6060
pub avoid_stats: bool,
61+
pub skip_driver_in_path: bool,
62+
pub skip_browser_in_path: bool,
6163
}
6264

6365
impl ManagerConfig {
@@ -117,6 +119,8 @@ impl ManagerConfig {
117119
language_binding: StringKey(vec!["language-binding"], "").get_value(),
118120
selenium_version: StringKey(vec!["selenium-version"], "").get_value(),
119121
avoid_stats: BooleanKey("avoid-stats", false).get_value(),
122+
skip_driver_in_path: BooleanKey("skip-driver-in-path", false).get_value(),
123+
skip_browser_in_path: BooleanKey("skip-browser-in-path", false).get_value(),
120124
}
121125
}
122126
}

rust/src/lib.rs

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,16 @@ pub trait SeleniumManager {
386386
// Check browser in PATH
387387
let browser_in_path = self.find_browser_in_path();
388388
if let Some(path) = &browser_in_path {
389-
self.set_browser_path(path_to_string(path));
389+
if self.is_skip_browser_in_path() {
390+
self.get_logger().debug(format!(
391+
"Skipping {} in path: {}",
392+
self.get_browser_name(),
393+
path.display()
394+
));
395+
return None;
396+
} else {
397+
self.set_browser_path(path_to_string(path));
398+
}
390399
}
391400
browser_in_path
392401
}
@@ -756,32 +765,41 @@ pub trait SeleniumManager {
756765

757766
// Use driver in PATH when the user has not specified any browser version
758767
if use_driver_in_path {
759-
let version = driver_in_path_version.unwrap();
760768
let path = driver_in_path.unwrap();
761-
let major_version = self.get_major_version(&version)?;
762769

763-
// Display warning if the discovered driver version is not the same as the driver in PATH
764-
if !self.get_driver_version().is_empty()
765-
&& (self.is_firefox() && !version.eq(self.get_driver_version()))
766-
|| (!self.is_firefox() && !major_version.eq(&self.get_major_browser_version()))
767-
{
768-
self.get_logger().warn(format!(
769-
"The {} version ({}) detected in PATH at {} might not be compatible with \
770-
the detected {} version ({}); currently, {} {} is recommended for {} {}.*, \
771-
so it is advised to delete the driver in PATH and retry",
772-
self.get_driver_name(),
773-
&version,
774-
path,
775-
self.get_browser_name(),
776-
self.get_browser_version(),
770+
if self.is_skip_driver_in_path() {
771+
self.get_logger().debug(format!(
772+
"Skipping {} in path: {}",
777773
self.get_driver_name(),
778-
self.get_driver_version(),
779-
self.get_browser_name(),
780-
self.get_major_browser_version()
774+
path
781775
));
776+
} else {
777+
let version = driver_in_path_version.unwrap();
778+
let major_version = self.get_major_version(&version)?;
779+
780+
// Display warning if the discovered driver version is not the same as the driver in PATH
781+
if !self.get_driver_version().is_empty()
782+
&& (self.is_firefox() && !version.eq(self.get_driver_version()))
783+
|| (!self.is_firefox() && !major_version.eq(&self.get_major_browser_version()))
784+
{
785+
self.get_logger().warn(format!(
786+
"The {} version ({}) detected in PATH at {} might not be compatible with \
787+
the detected {} version ({}); currently, {} {} is recommended for {} {}.*, \
788+
so it is advised to delete the driver in PATH and retry",
789+
self.get_driver_name(),
790+
&version,
791+
path,
792+
self.get_browser_name(),
793+
self.get_browser_version(),
794+
self.get_driver_name(),
795+
self.get_driver_version(),
796+
self.get_browser_name(),
797+
self.get_major_browser_version()
798+
));
799+
}
800+
self.set_driver_version(version.to_string());
801+
return Ok(PathBuf::from(path));
782802
}
783-
self.set_driver_version(version.to_string());
784-
return Ok(PathBuf::from(path));
785803
}
786804

787805
// If driver was not in the PATH, try to find it in the cache
@@ -1413,6 +1431,26 @@ pub trait SeleniumManager {
14131431
}
14141432
}
14151433

1434+
fn is_skip_driver_in_path(&self) -> bool {
1435+
self.get_config().skip_driver_in_path
1436+
}
1437+
1438+
fn set_skip_driver_in_path(&mut self, skip_driver_in_path: bool) {
1439+
if skip_driver_in_path {
1440+
self.get_config_mut().skip_driver_in_path = true;
1441+
}
1442+
}
1443+
1444+
fn is_skip_browser_in_path(&self) -> bool {
1445+
self.get_config().skip_browser_in_path
1446+
}
1447+
1448+
fn set_skip_browser_in_path(&mut self, skip_browser_in_path: bool) {
1449+
if skip_browser_in_path {
1450+
self.get_config_mut().skip_browser_in_path = true;
1451+
}
1452+
}
1453+
14161454
fn get_cache_path(&self) -> Result<Option<PathBuf>, Error> {
14171455
let path = Path::new(&self.get_config().cache_path);
14181456
match create_path_if_not_exists(path) {

rust/src/main.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ struct Cli {
147147
/// Avoid sends usage statistics to plausible.io
148148
#[clap(long)]
149149
avoid_stats: bool,
150+
151+
/// Not using drivers found in the PATH
152+
#[clap(long)]
153+
skip_driver_in_path: bool,
154+
155+
/// Not using browsers found in the PATH
156+
#[clap(long)]
157+
skip_browser_in_path: bool,
150158
}
151159

152160
fn main() {
@@ -218,6 +226,8 @@ fn main() {
218226
let selenium_version = sm_version.strip_prefix(SM_BETA_LABEL).unwrap_or(sm_version);
219227
selenium_manager.set_selenium_version(selenium_version.to_string());
220228
selenium_manager.set_avoid_stats(cli.avoid_stats);
229+
selenium_manager.set_skip_driver_in_path(cli.skip_driver_in_path);
230+
selenium_manager.set_skip_browser_in_path(cli.skip_browser_in_path);
221231

222232
if cli.clear_cache || BooleanKey("clear-cache", false).get_value() {
223233
clear_cache(selenium_manager.get_logger(), &cache_path);

0 commit comments

Comments
 (0)