package Ġcom . a ui um . driver Ċ Ċ import Ġcom . a ui um . remote .* Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Point Ċ Ċ class ĠDriver ( driver Url : ĠString Ġ= Ġ" http :// localhost : 8 1 0 0 ") Ġ: ĠCommand Execution Helper () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĠĠĠ Ġvar ĠsessionId : ĠString Ġ= Ġ"" ĊĠĠĠ Ġval Ġempty Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠ Ġval Ġwindow Size Ġby Ġlazy Ġ{ Ġwindow Size () Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Driver Agent Url Ġ= ĠgetUrl ( driver Url ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" åĪĿå§ĭåĮĸ é©±åĬ¨ ï¼ļ $ web Driver Agent Url ") ĊĠĠĠĠĠĠĠ Ġif Ġ( locked ()) Ġunlock () ĊĠĠĠĠĠĠĠ Ġstatus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ Url ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetUrl ( driver Url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhttp Url Ġ= Ġdriver Url ĊĠĠĠĠĠĠĠ Ġval Ġsep Index : ĠInt Ġ= Ġhttp Url . indexOf (" :// ") ĊĠĠĠĠĠĠĠ Ġif Ġ( sep Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Url Ġ= Ġ" http ://" Ġ+ Ġhttp Url . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhttp Url ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ éĶģ å±ı ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue ĠOr ĠFalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlocked (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute ( Mobile Command . LOCK ED ) ĊĠĠĠĠĠĠĠ Ġget Session ( response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . convert () Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è§£ éĶģ å±ı å¹ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunlock () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute ( Mobile Command . UNLOCK ) ĊĠĠĠĠĠĠĠ Ġif Ġ( response . status Ġ== Ġ 5 0 0 ) Ġthrow ĠWebDriver Agent Exception (" è§£ éĶģ è®¾å¤ĩ å¤±è´¥ !") ĊĠĠĠĠĠĠĠ Ġlogger . info (" è§£ éĶģ å±ı å¹ķ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥è¯¢ çĬ¶æĢģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstatus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute ( Mobile Command . STATUS ) ĊĠĠĠĠĠĠĠ Ġget Session ( response ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresponse . convert < Driver Status >() ĊĠĠĠĠĠĠĠ Ġif Ġ( status ?. ready Ġ== Ġfalse ) Ġthrow ĠWebDriver Agent Exception (" WebDriver Agent çĬ¶æĢģ ä¸º [ ready ]") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º ä¼ļ è¯Ŀ , Ġå½ĵ åºĶçĶ¨ Id ä¸ºç©º æĹ¶ ä¼ļ èĩªåĬ¨ åĪĽå»º SessionId , Ġ åºĶçĶ¨ Id ä¸į ä¸ºç©º æĹ¶ å¹¶ä¸Ķ åºĶçĶ¨ å·²ç»ı æīĵå¼Ģ åĪĻ ä¼ļ éĩįæĸ° æīĵå¼Ģ ĊĠĠĠĠ Ġ* Ġ@ param Ġbundle Id Ġ åºĶçĶ¨ Id ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġ åºĶçĶ¨ è¯Ńè¨Ģ ĊĠĠĠĠ Ġ* Ġ@ param Ġalert Action ĠAlert ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsession ( bundle Id : ĠString Ġ= Ġ"", Ġlanguage : ĠString Ġ= Ġ"", Ġalert Action : ĠAlert Action ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Session ( bundle Id , Ġlanguage , Ġalert Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ App , Ġå¦Ĥæŀľ åĲ¯çĶ¨ åĲ¯åĬ¨ åĪĻ ä¸įä¼ļ æīĵå¼Ģ æĸ°çļĦ ĊĠĠĠĠ Ġ* Ġ@ param Ġbundle Id Ġ åºĶçĶ¨ ID ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġ åºĶçĶ¨ è¯Ńè¨Ģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlaunch ( bundle Id : ĠString , Ġlanguage : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġcapabilities [" bundle Id "] Ġ= Ġbundle Id ĊĠĠĠĠĠĠĠ Ġcapabilities [" arguments "] Ġ= Ġbuild Language ( language ) ĊĠĠĠĠĠĠĠ Ġcapabilities [" environment "] Ġ= Ġempty ĊĠĠĠĠĠĠĠ Ġcapabilities [" should WaitFor Qu ies c ence "] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġexecute ( Mobile Command . LA UNCH , Ġwild cards , Ġcapabilities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»Ī æŃ¢ App ĊĠĠĠĠ Ġ* Ġ@ param Ġbundle Id Ġ åºĶçĶ¨ Id ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġterminate ( bundle Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( Mobile Command . TERMIN ATE , Ġwild cards , Ġmutable Map Of (" bundle Id " Ġto Ġbundle Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į Home æĮīéĴ® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhome () Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( Mobile Command . HOME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ Session ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( Mobile Command . CLOSE , Ġwild cards ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠéľĢè¦ģ çĤ¹åĩ» å½ĵ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtap ( location : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( Mobile Command . T AP , Ġwild cards , Ġlocation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį å±ı å¹ķ å¤§å°ı ĊĠĠĠĠ Ġ* Ġ@ return ĠDimension ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwindow Size (): ĠDimension Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute ( Mobile Command . GET _ CURRENT _ WINDOW _ SIZE , Ġwild cards ). convert < Dimension >() Ġ?: ĠDimension ( 3 7 5 , Ġ 8 7 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º ä¼ļ è¯Ŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġbundle Id Ġ åºĶçĶ¨ ç¼ĸåı· ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġ åºĶçĶ¨ è¯Ńè¨Ģ ĊĠĠĠĠ Ġ* Ġ@ param Ġalert Action Ġ åĲ¯åĬ¨ æĹ¶ æĺ¯åĲ¦ å¤ĦçĲĨ å¼¹ çªĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Session ( bundle Id : ĠString Ġ= Ġ"", Ġlanguage : ĠString Ġ= Ġ"", Ġalert Action : ĠAlert Action ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġif Ġ( bundle Id . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalways Match Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalways Match [" bundle Id "] Ġ= Ġbundle Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalways Match [" arguments "] Ġ= Ġbuild Language ( language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalways Match [" environment "] Ġ= Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalways Match [" should WaitFor Qu ies c ence "] Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alert Action Ġ!= Ġnull ) Ġcapabilities [" default Alert Action "] Ġ= Ġalert Action . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities [" always Match "] Ġ= Ġalways Match ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" capabilities " Ġto Ġcapabilities , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" desired Capabilities " Ġto Ġcapabilities . get OrDefault (" always Match ", Ġempty ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute ( Mobile Command . NEW _ SESSION , Ġmutable Map Of (), Ġpayload ) ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Result Ġ= Ġresponse . convert < Capabilities Result >() ĊĠĠĠĠĠĠĠ Ġif Ġ( capabilities Result ?. sessionId ?. isNotBlank () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sessionId Ġ= Ġcapabilities Result . sessionId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwild cards [ Wildcard . SESSION _ ID ] Ġ= Ġcapabilities Result . sessionId ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠWebDriver Agent Exception (" åĪĽå»º Session å¤±è´¥ : Ġ$ response ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æŀĦå»º App ä½¿çĶ¨çļĦ è¯Ńè¨Ģ ĊĠĠĠĠ Ġ* Ġ@ param Ġlanguage Ġ è¯Ńè¨Ģ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è¯Ńè¨Ģ åıĤæķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Language ( language : ĠString ): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( language . isBlank ()) Ġmutable ListOf () Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- Apple Languages ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ($ language )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- NS Languages ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ($ language )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¼ļ è¯Ŀ ä¿¡æģ¯ ĊĠĠĠĠ Ġ* Ġ@ param Ġresponse ĠWebDriver Agent ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Session ( response : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠsessionId Ġ= Ġresponse . sessionId ĊĠĠĠĠĠĠĠ Ġif Ġ( sessionId Ġ!= Ġnull Ġ&& ĠsessionId . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sessionId Ġ= ĠsessionId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwild cards [ Wildcard . SESSION _ ID ] Ġ= ĠsessionId ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcreate Session () ĊĠĠĠ Ġ} Ċ Ċ }