Skip to content

Commit 7d8417f

Browse files
committed
Revert "Replace webdriver with halonium"
1 parent b2932e9 commit 7d8417f

File tree

7 files changed

+87
-25
lines changed

7 files changed

+87
-25
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 "halonium#f54c83f"
24+
requires "webdriver#429933a"
2525

2626
# Tasks
2727

tests/browsertester.nim

Lines changed: 11 additions & 2 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 halonium
3+
import webdriver
44

55
proc runProcess(cmd: string) =
66
let p = startProcess(
@@ -46,13 +46,22 @@ 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+
4955
# Create a fresh DB for the tester.
5056
doAssert(execCmd("nimble testdb") == QuitSuccess)
5157

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

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

5766
withBackend:
5867
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 halonium
2+
import webdriver
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 .plus-btn"
50+
checkIsNone "#add-category"
5151

5252
test "no category add available category page":
5353
with session:
5454
click "#categories-btn"
55-
checkIsNone "#add-category .plus-btn"
55+
checkIsNone "#add-category"
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.text == "Unsorted"
142+
assert element.getProperty("innerText") == "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.text == "Announcements"
147+
assert element.getProperty("innerText") == "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.text == "Fun"
152+
assert element.getProperty("innerText") == "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 .plus-btn"
171+
ensureExists "#add-category"
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 .plus-btn"
198+
ensureExists "#add-category"
199199
logout()
200200

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

204204
login "admin", "admin"

tests/browsertests/common.nim

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import os, options, unittest, strutils
2-
import halonium
2+
import webdriver
33
import macros
44

5-
export waitForElement
6-
export waitForElements
5+
const actionDelayMs {.intdefine.} = 0
6+
## Inserts a delay in milliseconds between automated actions. Useful for debugging tests
77

88
macro with*(obj: typed, code: untyped): untyped =
99
## Execute a set of statements with an object
@@ -24,6 +24,14 @@ 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+
2735
proc click*(session: Session, element: string, strategy=CssSelector) =
2836
let el = session.waitForElement(element, strategy)
2937
el.get().click()
@@ -36,33 +44,78 @@ proc clear*(session: Session, element: string) =
3644
let el = session.waitForElement(element)
3745
el.get().clear()
3846

39-
proc sendKeys*(session: Session, element: string, keys: varargs[string, convertKeyRuneString]) =
47+
proc sendKeys*(session: Session, element: string, keys: varargs[Key]) =
4048
let el = session.waitForElement(element)
4149

42-
el.get().sendKeys(keys)
50+
# focus
51+
el.get().click()
52+
for key in keys:
53+
session.press(key)
4354

4455
proc ensureExists*(session: Session, element: string, strategy=CssSelector) =
4556
discard session.waitForElement(element, strategy)
4657

4758
template check*(session: Session, element: string, function: untyped) =
4859
let el = session.waitForElement(element)
49-
doAssert function(el)
60+
check function(el)
5061

5162
template check*(session: Session, element: string,
5263
strategy: LocationStrategy, function: untyped) =
5364
let el = session.waitForElement(element, strategy)
54-
doAssert function(el)
65+
check function(el)
5566

5667
proc setColor*(session: Session, element, color: string, strategy=CssSelector) =
5768
let el = session.waitForElement(element, strategy)
58-
discard session.executeScript("arguments[0].setAttribute('value', '" & color & "')", el.get())
69+
discard session.execute("arguments[0].setAttribute('value', '" & color & "')", el.get())
5970

6071
proc checkIsNone*(session: Session, element: string, strategy=CssSelector) =
6172
discard session.waitForElement(element, strategy, waitCondition=elementIsNone)
6273

6374
proc checkText*(session: Session, element, expectedValue: string) =
6475
let el = session.waitForElement(element)
65-
doAssert el.get().text.strip() == expectedValue
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"
66119

67120
proc setUserRank*(session: Session, baseUrl, user, rank: string) =
68121
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 halonium
3+
import webdriver
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 halonium
3+
import webdriver
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 halonium
3+
import webdriver
44

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

0 commit comments

Comments
 (0)