11import os, options, unittest, strutils
2- import webdriver
2+ import halonium
33import macros
44
5- const actionDelayMs {. intdefine .} = 0
6- # # Inserts a delay in milliseconds between automated actions. Useful for debugging tests
5+ export waitForElement
6+ export waitForElements
77
88macro with * (obj: typed , code: untyped ): untyped =
99 # # Execute a set of statements with an object
@@ -24,14 +24,6 @@ macro with*(obj: typed, code: untyped): untyped =
2424
2525 result = getAst (checkCompiles (result , code))
2626
27- proc elementIsSome (element: Option [Element ]): bool =
28- return element.isSome
29-
30- proc elementIsNone (element: Option [Element ]): bool =
31- return element.isNone
32-
33- proc waitForElement * (session: Session , selector: string , strategy= CssSelector , timeout= 20000 , pollTime= 50 , waitCondition= elementIsSome): Option [Element ]
34-
3527proc click * (session: Session , element: string , strategy= CssSelector ) =
3628 let el = session.waitForElement (element, strategy)
3729 el.get ().click ()
@@ -44,78 +36,33 @@ proc clear*(session: Session, element: string) =
4436 let el = session.waitForElement (element)
4537 el.get ().clear ()
4638
47- proc sendKeys * (session: Session , element: string , keys: varargs [Key ]) =
39+ proc sendKeys * (session: Session , element: string , keys: varargs [string , convertKeyRuneString ]) =
4840 let el = session.waitForElement (element)
4941
50- # focus
51- el.get ().click ()
52- for key in keys:
53- session.press (key)
42+ el.get ().sendKeys (keys)
5443
5544proc ensureExists * (session: Session , element: string , strategy= CssSelector ) =
5645 discard session.waitForElement (element, strategy)
5746
5847template check * (session: Session , element: string , function: untyped ) =
5948 let el = session.waitForElement (element)
60- check function (el)
49+ doAssert function (el)
6150
6251template check * (session: Session , element: string ,
6352 strategy: LocationStrategy , function: untyped ) =
6453 let el = session.waitForElement (element, strategy)
65- check function (el)
54+ doAssert function (el)
6655
6756proc setColor * (session: Session , element, color: string , strategy= CssSelector ) =
6857 let el = session.waitForElement (element, strategy)
69- discard session.execute (" arguments[0].setAttribute('value', '" & color & " ')" , el.get ())
58+ discard session.executeScript (" arguments[0].setAttribute('value', '" & color & " ')" , el.get ())
7059
7160proc checkIsNone * (session: Session , element: string , strategy= CssSelector ) =
7261 discard session.waitForElement (element, strategy, waitCondition= elementIsNone)
7362
7463proc checkText * (session: Session , element, expectedValue: string ) =
7564 let el = session.waitForElement (element)
76- check el.get ().getText () == expectedValue
77-
78- proc waitForElement * (
79- session: Session , selector: string , strategy= CssSelector ,
80- timeout= 20000 , pollTime= 50 ,
81- waitCondition= elementIsSome
82- ): Option [Element ] =
83- var waitTime = 0
84-
85- when actionDelayMs > 0 :
86- sleep (actionDelayMs)
87-
88- while true :
89- try :
90- let loading = session.findElement (selector, strategy)
91- if waitCondition (loading):
92- return loading
93- finally :
94- discard
95- sleep (pollTime)
96- waitTime += pollTime
97-
98- if waitTime > timeout:
99- doAssert false , " Wait for load time exceeded"
100-
101- proc waitForElements * (
102- session: Session , selector: string , strategy= CssSelector ,
103- timeout= 20000 , pollTime= 50
104- ): seq [Element ] =
105- var waitTime = 0
106-
107- when actionDelayMs > 0 :
108- sleep (actionDelayMs)
109-
110- while true :
111- let loading = session.findElements (selector, strategy)
112- if loading.len > 0 :
113- return loading
114- sleep (pollTime)
115- waitTime += pollTime
116-
117- if waitTime > timeout:
118- doAssert false , " Wait for load time exceeded"
65+ doAssert el.get ().text.strip () == expectedValue
11966
12067proc setUserRank * (session: Session , baseUrl, user, rank: string ) =
12168 with session:
0 commit comments