package Ġcom . cisco web ex . android sdk . k itch ens ink . utils Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġandroidx . test . espress o . web . model . Atom Ċ import Ġandroidx . test . espress o . web . model . Element Reference Ċ import Ġandroidx . test . espress o . web . webdriver . Driver Atoms Ċ import Ġandroidx . test . espress o . web . webdriver . Locator Ċ import Ġjunit . framework . Assert . fail Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ object ĠWait Utils Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Wait Utils " ĊĠĠĠ Ġinternal Ġfun Ġsleep ( millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( millis ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwait Element To Ap pear ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmax T ries Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( max T ries Ġ!= Ġ 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Driver Atoms . findElement ( Locator . ID , Ġid ) Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠTimeout Exception ){ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax T ries ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠwaitFor Condition ( time : ĠLong , Ġunit : ĠTimeUnit , Ġcondition : Ġ() Ġ-> ĠBoolean , Ġfailure Message : Ġ() Ġ-> ĠString , Ġwarn After : ĠLong Ġ= Ġ 0 ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠwaitFor Condition ( unit . to Millis ( time ), Ġcondition , Ġfailure Message , Ġwarn After ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠwaitFor Condition ( timeout : ĠLong , Ġcondition : Ġ() Ġ-> ĠBoolean , Ġfailure Message : Ġ() Ġ-> ĠString , Ġwarn After : ĠLong Ġ= Ġ 0 ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= ĠstartTime Ġ+ Ġtimeout ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimed Out Ġ= ĠSystem Clock . uptime Millis () Ġ> ĠendTime ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timed Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġ" Condition Ġnot Ġs atis ified Ġafter Ġ$ timeout Ġms " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" waitFor Condition Ġtimed Out , Ġ$ format Ġ- Ġ${ failure Message () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( failure Message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep ( 5 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠSystem Clock . uptime Millis () Ġ- ĠstartTime ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( warn After Ġ> Ġ 0 ) Ġ&& Ġ( duration Ġ> Ġwarn After )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Condition Ġtook Ġ$ duration Ġms , Ġlonger Ġthan Ġ$ warn After Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Condition Ġtook Ġ$ duration Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }