Skip to content

Commit b2932e9

Browse files
authored
Merge pull request #263 from jyapayne/change-to-halonium
Replace webdriver with halonium
2 parents 108aeda + 3d975e8 commit b2932e9

File tree

7 files changed

+25
-87
lines changed

7 files changed

+25
-87
lines changed

nimforum.nimble

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ requires "sass#649e0701fa5c"
2121

2222
requires "karax#5f21dcd"
2323

24-
requires "webdriver#429933a"
24+
requires "halonium#f54c83f"
2525

2626
# Tasks
2727

tests/browsertester.nim

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import options, osproc, streams, threadpool, os, strformat, httpclient
22

3-
import webdriver
3+
import halonium
44

55
proc runProcess(cmd: string) =
66
let p = startProcess(
@@ -46,22 +46,13 @@ template withBackend(body: untyped): untyped =
4646
import browsertests/[scenario1, threads, issue181, categories]
4747

4848
proc main() =
49-
# Kill any already running instances
50-
discard execCmd("killall geckodriver")
51-
spawn runProcess("geckodriver -p 4444 --log config")
52-
defer:
53-
discard execCmd("killall geckodriver")
54-
5549
# Create a fresh DB for the tester.
5650
doAssert(execCmd("nimble testdb") == QuitSuccess)
5751

5852
doAssert(execCmd("nimble -y frontend") == QuitSuccess)
59-
echo("Waiting for geckodriver to startup...")
60-
sleep(5000)
6153

6254
try:
63-
let driver = newWebDriver()
64-
let session = driver.createSession()
55+
let session = createSession(Firefox)
6556

6657
withBackend:
6758
scenario1.test(session, baseUrl)

tests/browsertests/categories.nim

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import unittest, common
2-
import webdriver
2+
import halonium
33

44
import karaxutils
55

@@ -47,12 +47,12 @@ proc categoriesUserTests(session: Session, baseUrl: string) =
4747
with session:
4848
click "#new-thread-btn"
4949

50-
checkIsNone "#add-category"
50+
checkIsNone "#add-category .plus-btn"
5151

5252
test "no category add available category page":
5353
with session:
5454
click "#categories-btn"
55-
checkIsNone "#add-category"
55+
checkIsNone "#add-category .plus-btn"
5656

5757
test "can create category thread":
5858
with session:
@@ -139,17 +139,17 @@ proc categoriesUserTests(session: Session, baseUrl: string) =
139139
checkText "#threads-list .thread-title a", "Post 3"
140140
for element in session.waitForElements("#threads-list .category-name"):
141141
# Have to user "innerText" because elements are hidden on this page
142-
assert element.getProperty("innerText") == "Unsorted"
142+
assert element.text == "Unsorted"
143143

144144
selectCategory "announcements"
145145
checkText "#threads-list .thread-title a", "Post 2"
146146
for element in session.waitForElements("#threads-list .category-name"):
147-
assert element.getProperty("innerText") == "Announcements"
147+
assert element.text == "Announcements"
148148

149149
selectCategory "fun"
150150
checkText "#threads-list .thread-title a", "Post 1"
151151
for element in session.waitForElements("#threads-list .category-name"):
152-
assert element.getProperty("innerText") == "Fun"
152+
assert element.text == "Fun"
153153

154154
session.logout()
155155

@@ -168,7 +168,7 @@ proc categoriesAdminTests(session: Session, baseUrl: string) =
168168
with session:
169169
click "#new-thread-btn"
170170

171-
ensureExists "#add-category"
171+
ensureExists "#add-category .plus-btn"
172172

173173
click "#add-category .plus-btn"
174174

@@ -195,10 +195,10 @@ proc categoriesAdminTests(session: Session, baseUrl: string) =
195195
test "category adding disabled on admin logout":
196196
with session:
197197
navigate(baseUrl & "c/0")
198-
ensureExists "#add-category"
198+
ensureExists "#add-category .plus-btn"
199199
logout()
200200

201-
checkIsNone "#add-category"
201+
checkIsNone "#add-category .plus-btn"
202202
navigate baseUrl
203203

204204
login "admin", "admin"

tests/browsertests/common.nim

Lines changed: 9 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import os, options, unittest, strutils
2-
import webdriver
2+
import halonium
33
import 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

88
macro 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-
3527
proc 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

5544
proc ensureExists*(session: Session, element: string, strategy=CssSelector) =
5645
discard session.waitForElement(element, strategy)
5746

5847
template check*(session: Session, element: string, function: untyped) =
5948
let el = session.waitForElement(element)
60-
check function(el)
49+
doAssert function(el)
6150

6251
template 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

6756
proc 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

7160
proc checkIsNone*(session: Session, element: string, strategy=CssSelector) =
7261
discard session.waitForElement(element, strategy, waitCondition=elementIsNone)
7362

7463
proc 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

12067
proc setUserRank*(session: Session, baseUrl, user, rank: string) =
12168
with session:

tests/browsertests/issue181.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import unittest, common
22

3-
import webdriver
3+
import halonium
44

55
proc test*(session: Session, baseUrl: string) =
66
session.navigate(baseUrl)

tests/browsertests/scenario1.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import unittest, common
22

3-
import webdriver
3+
import halonium
44

55
proc test*(session: Session, baseUrl: string) =
66
session.navigate(baseUrl)
@@ -40,4 +40,4 @@ proc test*(session: Session, baseUrl: string) =
4040
register "TEst1", "test1", verify = false
4141

4242
ensureExists "#signup-form .has-error"
43-
navigate baseUrl
43+
navigate baseUrl

tests/browsertests/threads.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import unittest, common
22

3-
import webdriver
3+
import halonium
44

55
let
66
userTitleStr = "This is a user thread!"

0 commit comments

Comments
 (0)