/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAutom ate ĠThe ĠPlan et ĠLtd . Ċ Ġ* ĠAuthor : ĠAnt on ĠAnge lov Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġsolutions . bell at rix . web . services Ċ Ċ import Ġorg . openqa . selenium . support . ui . WebDriver Wait Ċ import Ġsolutions . bell at rix . core . configuration . Configuration Service Ċ import Ġsolutions . bell at rix . core . plugins . EventListener Ċ import Ġsolutions . bell at rix . web . configuration . Web Settings Ċ Ċ object ĠNavigation Service Ġ: ĠWeb Service () Ġ{ ĊĠĠĠ Ġfun Ġto ( url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped Driver . navigate (). to ( url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate ToLocal Page ( filePath : ĠString ) Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġassembly Ġ= ĠAssembly . Get Executing Assembly (); Ċ // ĠĠĠĠĠĠĠ Ġstring Ġpath Ġ= ĠPath . Get DirectoryName ( assembly . Location ); Ċ // Ċ // ĠĠĠĠĠĠĠ Ġstring Ġpage FilePath Ġ= ĠPath . Combine ( path Ġ?? Ġthrow Ġnew ĠInvalidOperationException (), ĠfilePath ); Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Wrapped WebDriver Create Service . Browser Configuration . Browser Type . Equals ( Browser Type . S afari ) Ġ|| ĠWr apped WebDriver Create Service . Browser Configuration . Browser Type . Equals ( Browser Type . Firefox ) Ġ|| ĠWr apped WebDriver Create Service . Browser Configuration . Browser Type . Equals ( Browser Type . Firefox Head less )) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpage FilePath Ġ= Ġstring . Concat (" file :// /", Ġpage FilePath ); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Runtime Information . Is OS Platform ( OS Platform . OSX )) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpage FilePath Ġ= Ġpage FilePath . Replace ('\\ ', Ġ'/ '). Replace (" file :// // ", Ġ" file :// //// "). Replace (" Ġ", Ġ"% 2 0 "); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! Wrapped WebDriver Create Service . Browser Configuration . Browser Type . Equals ( Browser Type . S afari )) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠNavigate ( new ĠUri ( page FilePath , Ġuri Kind : ĠUri Kind . Absolute )); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠNavigate ( page FilePath ); Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠwaitFor Partial Url ( partial Url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwaitFor Partial Timeout Ġ= ĠConfiguration Service . get < Web Settings >(). timeout Settings . waitFor Partial Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsleep Interval Ġ= ĠConfiguration Service . get < Web Settings >(). timeout Settings . sleep Interval ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Driver Wait Ġ= ĠWebDriver Wait ( wrapped Driver , ĠwaitFor Partial Timeout , Ġsleep Interval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Driver Wait . until Ġ{ Ġwrapped Driver . current Url . contains ( partial Url ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL _ NOT _ NAV IG ATED . broadcast ( WebService EventArgs ( this , Ġpartial Url , Ġex . message Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Throws ( Malformed URLException :: class ) Ċ // ĠĠĠ Ġfun Ġget QueryParameter ( parameter Name : ĠString ): ĠList < String > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġsplit Query ( wrapped Driver . current Url )[ parameter Name ] !! Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Throws ( Malformed URLException :: class ) Ċ // ĠĠĠ Ġprivate Ġfun Ġsplit Query ( url : ĠString ): ĠMap < String , ĠList < String >> Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Strings . isNull OrEmpty ( URL ( url ). query )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġempty Map () Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse ĠArrays . stream ( URL ( url ). query . split ("& ". to Regex ()). to Typed Array ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit : ĠString Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġsplit QueryParameter ( it ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupported EncodingException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . grouping By < Simple Immutable Entry < String , ĠString > ?, ĠString , ĠList < String >, ĠAny , ĠLinkedHashMap < String , ĠList < String >> >( Function < Simple Immutable Entry < String , ĠString > ?, ĠString > Ġ{ ĠSimple Immutable Entry . Ġ}, ĠSupplier Ġ{ ĠLinkedHashMap () Ġ}, ĠCollect ors . mapping < Simple Immutable Entry < String , ĠString > ?, ĠString , ĠAny , ĠList < String >>( Function < Simple Immutable Entry < String , ĠString > ?, ĠString > Ġ{ Ġjava . util . Map . Entry . value Ġ}, ĠCollect ors . toList ()))) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Throws ( Unsupported EncodingException :: class ) Ċ // ĠĠĠ Ġprivate Ġfun Ġsplit QueryParameter ( it : ĠString ): ĠSimple Immutable Entry < String , ĠString > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġit . indexOf (" =") Ċ // ĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġif Ġ( idx Ġ> Ġ 0 ) Ġit . substring ( 0 , Ġidx ) Ġelse Ġit Ċ // ĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġif Ġ( idx Ġ> Ġ 0 Ġ&& Ġit . length Ġ> Ġidx Ġ+ Ġ 1 ) Ġit . substring ( idx Ġ+ Ġ 1 ) Ġelse Ġnull Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠSimple Immutable Entry ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( key , Ġ" UTF - 8 "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( value , Ġ" UTF - 8 ") Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠURL _ NOT _ NAV IG ATED Ġ= ĠEvent Listener < WebService EventArgs >() Ċ }