package Ġcom . uit est core . driver utils Ċ Ċ import Ġcom . uit est core . driver utils . Driver Settings . BROWSER Ċ import Ġcom . uit est core . driver utils . Driver Settings . DOMAIN Ċ import Ġcom . uit est core . driver utils . Driver Settings . IMP LICIT _ WAIT Ċ import Ġcom . uit est core . driver utils . Driver Settings . PARAMS Ċ import Ġcom . uit est core . driver utils . Driver Settings . URL Ċ import Ġio . github . bon ig arc ia . wd m . WebDriver Manager Ċ import Ġio . q ame ta . all ure . Step Ċ import Ġorg . openqa . selenium .* Ċ import Ġorg . openqa . selenium . chrome . Chrome Driver Ċ import Ġorg . openqa . selenium . chrome . Chrome Options Ċ import Ġorg . openqa . selenium . logging . Log Type Ċ import Ġorg . openqa . selenium . logging . Logging Preferences Ċ import Ġorg . openqa . selenium . remote . Capability Type Ċ import Ġorg . openqa . selenium . support . ui . Expected Conditions . url ToBe Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . logging . Level Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ object ĠDriver Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstance : ĠWebDriver ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠbaseUrl : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġjs Executor : ĠJavascript Executor ĊĊĠĠĠ Ġfun Ġinit ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġurl ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠDriver Settings . init From Profile () ĊĠĠĠĠĠĠĠ Ġinstance Ġ= Ġcreate Driver ( BROWSER ) ĊĠĠĠĠĠĠĠ Ġjs Executor Ġ= Ġinstance Ġas ĠJavascript Executor ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: baseUrl . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= ĠURL !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Driver ( driver Name : ĠString ): ĠWebDriver Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( driver Name ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" chrome " Ġ-> Ġinit Chrome () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// " ff " Ġ-> Ġreturn Ġinit FF ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Browser Ġname Ġis Ġincorrect !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Chrome (): ĠWebDriver Ġ{ ĊĠĠĠĠĠĠĠ ĠWebDriver Manager . chro med river (). setup () ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠChrome Options () ĊĠĠĠĠĠĠĠ Ġval Ġlog Prefs Ġ= ĠLogging Preferences () ĊĠĠĠĠĠĠĠ Ġlog Prefs . enable ( Log Type . PER FORMANCE , ĠLevel . ALL ) ĊĠĠĠĠĠĠĠ Ġoptions . set Capability ( Capability Type . LOG GING _ PRE FS , Ġlog Prefs ) ĊĠĠĠĠĠĠĠ ĠPARAM S . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add Arguments ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprefs : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġprefs [" profile . default _ content _ setting _ values . notifications "] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġoptions . set Experimental Option (" prefs ", Ġprefs ) ĊĠĠĠĠĠĠĠ Ġval Ġdriver : ĠWebDriver Ġ= ĠChrome Driver ( options ) ĊĠĠĠĠĠĠĠ Ġdriver . manage (). timeout s (). implicit ly Wait ( IMP LICIT _ WAIT , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdriver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget (): ĠWebDriver Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġmax imize () Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . manage (). window (). max imize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Open Ġbase Ġpage ") ĊĠĠĠ Ġfun Ġopen Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . get ( baseUrl ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Open Ġ{ path } Ġpage ") ĊĠĠĠ Ġfun Ġopen Page ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . get ( baseUrl Ġ+ Ġpath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Reload Ġpage ") ĊĠĠĠ Ġfun Ġreload Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . navigate (). refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġpage Ġtitle ") ĊĠĠĠ Ġfun Ġget Page Title (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġ{ id }") ĊĠĠĠ Ġfun Ġget Element ById ( id : ĠString ): ĠWeb Element { ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( By . id ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġ{ css }") ĊĠĠĠ Ġfun Ġget Element By Css ( css : ĠString ): ĠWeb Element { ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( By . css Selector ( css )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġ{ xpath }") ĊĠĠĠ Ġfun Ġget Element By Xpath ( xpath : ĠString ): ĠWeb Element { ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( By . xpath ( xpath )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" get Ġelement Ġ{ name }") ĊĠĠĠ Ġfun Ġget Element ByName ( name : ĠString ): ĠWeb Element { ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( By . name ( name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġwith Ġtext Ġ{ text }") ĊĠĠĠ Ġfun Ġget Element By Text ( text : ĠString ): ĠWeb Element { ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( By . link Text ( text )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġ{ by }") ĊĠĠĠ Ġfun Ġfind Element ( by : ĠBy ): ĠWeb Element Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . findElement ( by ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Check Ġelement Ġ{ by } Ġpresents ") ĊĠĠĠ Ġfun Ġis Element Exists ( by : ĠBy ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . findElement ( by ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelements Ġ{ by }") ĊĠĠĠ Ġfun Ġfind Elements ( by : ĠBy ): ĠList < WebElement > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance . find Elements ( by ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelement Ġwith Ġclass ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġfind Decorated Element ( clazz : ĠK Class < T >, Ġby : ĠBy ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWeb Element Decorator (). decorate ( clazz , Ġthis . findElement ( by )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġelements Ġwith Ġclass ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġfind Decorated Elements ( clazz : ĠK Class < T >, Ġby : ĠBy ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWeb Element Decorator (). decorate ( clazz , Ġthis . find Elements ( by )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Scroll Ġto Ġelement Ġ{ element }") ĊĠĠĠ Ġfun Ġscroll To Element ( element : ĠWeb Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjs Executor . execute Script (" arguments [ 0 ]. scroll Into View ( true ); ", Ġelement ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Browser Ġpause Ġ{ time }") ĊĠĠĠ Ġfun Ġpause ( time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠThread . sleep ( time Ġ* Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Wait Ġto Ġredirect Ġto Ġurl Ġ{ url }") ĊĠĠĠ Ġfun Ġwait To Red irection ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠWait . until ( url ToBe ( url )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Set Ġcookies ") ĊĠĠĠ Ġfun Ġset Cookies ( cookies List : ĠList < Cookie >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcookies List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . instance . manage (). add Cookie ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Set Ġcookies ") ĊĠĠĠ Ġfun Ġset Cookies ( cookie : ĠCookie ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . instance . manage (). add Cookie ( cookie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Set Ġcookies ") ĊĠĠĠ Ġfun Ġset Cookies ( cookie Value : ĠPair < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcookie : ĠCookie Ġ= ĠCookie . Builder ( cookie Value . first , Ġcookie Value . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. domain ( DOMAIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expires On ( G regorian Calendar ( 3 0 0 0 , Ġ 1 0 , Ġ 3 ). time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Http Only ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Secure ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. path ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġthis . instance . manage (). add Cookie ( cookie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Get Ġcookies ") ĊĠĠĠ Ġfun Ġget Cookies (): ĠSet < Cookie >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . instance . manage (). cookies ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Delete Ġcookies ") ĊĠĠĠ Ġfun Ġdelete Cookies () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . instance . manage (). delete All Cookies () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Execute ĠJS ") ĊĠĠĠ Ġfun Ġexecute JS ( script : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjs Executor . execute Script ( script ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Step (" Execute ĠJS ") ĊĠĠĠ Ġfun Ġexecute JS ( script : ĠString , Ġargument : ĠWeb Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjs Executor . execute Script ( script , Ġargument ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtake Full Screenshot ( screenshot Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠScreen shot Utils . take And Save Full Screenshot ( screenshot Name , Ġ" Screenshots ") ĊĠĠĠ Ġ} Ċ }