@@ -133,7 +133,7 @@ pub trait SeleniumManager {
133133 // ----------------------------------------------------------
134134
135135 fn download_driver ( & mut self ) -> Result < ( ) , Box < dyn Error > > {
136- let driver_url = Self :: get_driver_url ( self ) ?;
136+ let driver_url = self . get_driver_url ( ) ?;
137137 self . get_logger ( )
138138 . debug ( format ! ( "Driver URL: {}" , driver_url) ) ;
139139 let ( _tmp_folder, driver_zip_file) =
@@ -159,9 +159,10 @@ pub trait SeleniumManager {
159159 let mut browser_version = self . get_browser_version ( ) ;
160160 if browser_version. eq_ignore_ascii_case ( CANARY ) {
161161 browser_version = NIGHTLY ;
162- } else if browser_version . is_empty ( ) {
162+ } else if ! self . is_browser_version_unstable ( ) {
163163 browser_version = STABLE ;
164164 }
165+
165166 let browser_path = self
166167 . get_browser_path_map ( )
167168 . get ( & BrowserPath :: new ( str_to_os ( self . get_os ( ) ) , browser_version) )
@@ -247,11 +248,11 @@ pub trait SeleniumManager {
247248 }
248249
249250 fn discover_driver_version ( & mut self ) -> Result < String , Box < dyn Error > > {
250- if self . is_force_browser_download ( ) {
251- self . download_browser ( ) ? ;
252- }
253- let browser_version = self . get_major_browser_version ( ) ;
254- if browser_version . is_empty ( ) || self . is_browser_version_unstable ( ) {
251+ let mut download_browser = self . is_force_browser_download ( ) ;
252+ let major_browser_version = self . get_major_browser_version ( ) ;
253+
254+ // First, we try to discover the browser version
255+ if !download_browser {
255256 match self . discover_browser_version ( ) {
256257 Some ( version) => {
257258 if !self . is_safari ( ) {
@@ -260,6 +261,20 @@ pub trait SeleniumManager {
260261 self . get_browser_name( ) ,
261262 version
262263 ) ) ;
264+ }
265+ let discovered_major_browser_version =
266+ self . get_major_version ( & version) . unwrap_or_default ( ) ;
267+ if !major_browser_version. is_empty ( )
268+ && !self . is_browser_version_unstable ( )
269+ && !major_browser_version. eq ( & discovered_major_browser_version)
270+ {
271+ self . get_logger ( ) . debug ( format ! (
272+ "Discovered browser version ({}) different to specified browser version ({})" ,
273+ discovered_major_browser_version,
274+ major_browser_version,
275+ ) ) ;
276+ download_browser = true ;
277+ } else {
263278 self . set_browser_version ( version) ;
264279 }
265280 }
@@ -268,25 +283,31 @@ pub trait SeleniumManager {
268283 "{} has not been discovered in the system" ,
269284 self . get_browser_name( )
270285 ) ) ;
271- let browser_path = self . download_browser ( ) ?;
272- if browser_path. is_some ( ) {
273- self . get_logger ( ) . debug ( format ! (
274- "{} {} has been downloaded at {}" ,
275- self . get_browser_name( ) ,
276- self . get_browser_version( ) ,
277- browser_path. unwrap( ) . display( )
278- ) ) ;
279- } else if self . is_browser_version_unstable ( ) {
280- return Err ( format ! ( "Browser version '{browser_version}' not found" ) . into ( ) ) ;
281- } else if !self . is_iexplorer ( ) && !self . is_grid ( ) {
282- self . get_logger ( ) . warn ( format ! (
283- "The version of {} cannot be detected. Trying with latest driver version" ,
284- self . get_browser_name( )
285- ) ) ;
286- }
286+ download_browser = true ;
287287 }
288288 }
289289 }
290+
291+ if download_browser {
292+ let browser_path = self . download_browser ( ) ?;
293+ if browser_path. is_some ( ) {
294+ self . get_logger ( ) . debug ( format ! (
295+ "{} {} has been downloaded at {}" ,
296+ self . get_browser_name( ) ,
297+ self . get_browser_version( ) ,
298+ browser_path. unwrap( ) . display( )
299+ ) ) ;
300+ } else if self . is_browser_version_unstable ( ) {
301+ return Err ( format ! ( "Browser version '{major_browser_version}' not found" ) . into ( ) ) ;
302+ } else if !self . is_iexplorer ( ) && !self . is_grid ( ) {
303+ self . get_logger ( ) . warn ( format ! (
304+ "The version of {} cannot be detected. Trying with latest driver version" ,
305+ self . get_browser_name( )
306+ ) ) ;
307+ }
308+ }
309+
310+ // Second, we request the driver version using online metadata
290311 let driver_version = self . request_driver_version ( ) ?;
291312 if driver_version. is_empty ( ) {
292313 Err ( format ! (
@@ -557,8 +578,12 @@ pub trait SeleniumManager {
557578 }
558579
559580 fn get_major_browser_version ( & self ) -> String {
560- self . get_major_version ( self . get_browser_version ( ) )
561- . unwrap_or_default ( )
581+ if self . is_browser_version_unstable ( ) {
582+ self . get_browser_version ( ) . to_string ( )
583+ } else {
584+ self . get_major_version ( self . get_browser_version ( ) )
585+ . unwrap_or_default ( )
586+ }
562587 }
563588
564589 fn set_browser_version ( & mut self , browser_version : String ) {
0 commit comments