git.iko.soy/rowtype-yoga/purescript-lunapark
on main help sign in
runified
aa9b4d6Maxim Zimaliev
src/Lunapark.pursdeleted−9
@@ -1,9 +0,0 @@
1−module Lunapark where
2−
3−import Prelude
4−
5−import Control.Monad.Aff (Aff)
6−import Lunapark.Affjax as LA
7−import Lunapark.Error as LE
8−import Lunapark.Types as LT
9−import Network.HTTP.Affjax (AJAX)
src/Lunapark/.#Helpers.pursdeleted−1
@@ -1 +0,0 @@
1−User@DESKTOP-4VI4KLM.5216:1523467741
src/Lunapark/Affjax.pursdeleted−378
@@ -1,378 +0,0 @@
1−module Lunapark.Affjax where
2−
3−import Prelude
4−
5−import Control.Monad.Aff (Aff)
6−import Data.Argonaut (Json)
7−import Data.Argonaut as J
8−import Data.Bifunctor (lmap)
9−import Data.Either (Either(..))
10−import Data.Maybe (Maybe(..))
11−import Network.HTTP.Affjax (AJAX)
12−import Network.HTTP.Affjax as N
13−import Network.HTTP.StatusCode (StatusCode(..))
14−import Lunapark.Error as LE
15−
16−-- | This two type synonims are used only here
17−-- | this is the lowest level of bindings this lib provides
18−type URI = String
19−type SessionId = String
20−type ElementId = String
21−type WindowHandle = String
22−
23−handleAPIError ∷ N.AffjaxResponse Json → Either LE.Error Json
24−handleAPIError r = case r.status of
25− StatusCode 200 → lmap LE.unknownError do
26− obj ← J.decodeJson r.response
27− obj J..? "value"
28− code → Left $ LE.fromJson r.response
29−
30−init ∷ ∀ e. URI → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
31−init uri obj =
32− map handleAPIError $ N.post (uri <> "/session") obj
33−
34−quit ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
35−quit uri sessId =
36− map handleAPIError $ N.delete (uri <> "/session/" <> sessId)
37−
38−status ∷ ∀ e. URI → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
39−status uri =
40− map handleAPIError $ N.get (uri <> "/status")
41−
42−getTimeouts ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
43−getTimeouts uri sessId =
44− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/timeouts")
45−
46−setTimeouts ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
47−setTimeouts uri sessId timeouts =
48− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/timeouts") timeouts
49−
50−go ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
51−go uri sessId obj =
52− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/url") obj
53−
54−getCurrentUrl ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
55−getCurrentUrl uri sessId =
56− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/url")
57−
58−back ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
59−back uri sessId =
60− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/back") (Nothing ∷ Maybe Unit)
61−
62−forward ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
63−forward uri sessId =
64− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/forward") (Nothing ∷ Maybe Unit)
65−
66−refresh ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
67−refresh uri sessId =
68− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/refresh") (Nothing ∷ Maybe Unit)
69−
70−getTitle ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
71−getTitle uri sessId =
72− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/title")
73−
74−getWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
75−getWindow uri sessId =
76− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window")
77−
78−closeWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
79−closeWindow uri sessId =
80− map handleAPIError $ N.delete (uri <> "/session/" <> sessId)
81−
82−switchToWindow ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
83−switchToWindow uri sessId obj =
84− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/window") obj
85−
86−getWindowHandles ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
87−getWindowHandles uri sessId =
88− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window/handles")
89−
90−switchToFrame ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
91−switchToFrame uri sessId obj =
92− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/frame") obj
93−
94−switchToParentFrame ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
95−switchToParentFrame uri sessId =
96− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/frame/parent") (Nothing ∷ Maybe Unit)
97−
98−getWindowRect ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
99−getWindowRect uri sessId =
100− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window/rect")
101−
102−setWindowRect ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
103−setWindowRect uri sessId obj =
104− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/window/rect") obj
105−
106−maximizeWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
107−maximizeWindow uri sessId =
108− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/window/maximize") (Nothing ∷ Maybe Unit)
109−
110−minimizeWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
111−minimizeWindow uri sessId =
112− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/window/minimize") (Nothing ∷ Maybe Unit)
113−
114−fullscreenWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
115−fullscreenWindow uri sessId =
116− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/window/fullscreen") (Nothing ∷ Maybe Unit)
117−
118−findElement ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
119−findElement uri sessId obj =
120− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/element") obj
121−
122−findElements ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
123−findElements uri sessId obj =
124− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/elements") obj
125−
126−findElementFromElement ∷ ∀ e. URI → SessionId → ElementId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
127−findElementFromElement uri sessId elId obj =
128− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/element") obj
129−
130−findElementsFromElement ∷ ∀ e. URI → SessionId → ElementId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
131−findElementsFromElement uri sessId elId obj =
132− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/elements") obj
133−
134−getActiveElement ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
135−getActiveElement uri sessId = map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/active")
136−
137−isElementSelected ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
138−isElementSelected uri sessId elId =
139− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/selected")
140−
141−getElementAttribute ∷ ∀ e. URI → SessionId → ElementId → String → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
142−getElementAttribute uri sessId elId attrName =
143− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/attribute/" <> attrName)
144−
145−getElementProperty ∷ ∀ e. URI → SessionId → ElementId → String → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
146−getElementProperty uri sessId elId propName =
147− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/property/" <> propName)
148−
149−getElementCSSValue ∷ ∀ e. URI → SessionId → ElementId → String → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
150−getElementCSSValue uri sessId elId cssName =
151− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/css/" <> cssName)
152−
153−getElementText ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
154−getElementText uri sessId elId =
155− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/text")
156−
157−getElementTagName ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
158−getElementTagName uri sessId elId =
159− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/name")
160−
161−getElementRect ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
162−getElementRect uri sessId elId =
163− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/rect")
164−
165−isElementEnabled ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
166−isElementEnabled uri sessId elId =
167− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/enabled")
168−
169−elementClick ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
170−elementClick uri sessId elId =
171− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/click") (Nothing ∷ Maybe Unit)
172−
173−elementClear ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
174−elementClear uri sessId elId =
175− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/clear") (Nothing ∷ Maybe Unit)
176−
177−elementSendKeys ∷ ∀ e. URI → SessionId → ElementId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
178−elementSendKeys uri sessId elId obj =
179− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/value") obj
180−
181−getPageSource ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
182−getPageSource uri sessId =
183− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/source")
184−
185−executeScript ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
186−executeScript uri sessId obj =
187− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/execute/sync") obj
188−
189−executeAsyncScript ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
190−executeAsyncScript uri sessId obj =
191− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/execute/async") obj
192−
193−getAllCookies ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
194−getAllCookies uri sessId =
195− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/cookie")
196−
197−getNamedCookie ∷ ∀ e. URI → SessionId → String → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
198−getNamedCookie uri sessId name =
199− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/cookie/" <> name)
200−
201−addCookie ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
202−addCookie uri sessId obj =
203− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/cookie") obj
204−
205−deleteCookie ∷ ∀ e. URI → SessionId → String → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
206−deleteCookie uri sessId name =
207− map handleAPIError $ N.delete (uri <> "/session/" <> sessId <> "/cookie/" <> name)
208−
209−deleteAllCookies ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
210−deleteAllCookies uri sessId =
211− map handleAPIError $ N.delete (uri <> "/session/" <> sessId <> "/cookie")
212−
213−performActions ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
214−performActions uri sessId obj =
215− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/actions") obj
216−
217−releaseActions ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
218−releaseActions uri sessId =
219− map handleAPIError $ N.delete (uri <> "/session/" <> sessId <> "/actions")
220−
221−dismissAlert ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
222−dismissAlert uri sessId =
223− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/alert/dismiss") (Nothing ∷ Maybe Unit)
224−
225−acceptAlert ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
226−acceptAlert uri sessId =
227− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/alert/accept") (Nothing ∷ Maybe Unit)
228−
229−getAlertText ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
230−getAlertText uri sessId =
231− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/alert/text")
232−
233−sendAlertText ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
234−sendAlertText uri sessId obj =
235− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/alert/text") obj
236−
237−takeScreenshot ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
238−takeScreenshot uri sessId =
239− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/screenshot")
240−
241−takeElementScreenshot ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
242−takeElementScreenshot uri sessId elId =
243− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/screenshot")
244−
245−-- Recomended by W3C
246−isDisplayed ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
247−isDisplayed uri sessId elId = do
248− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/displayed")
249−
250−-- JsonWire legacy, note this wouldn't envolve thing like local storage or geolocation
251−-- because you always could do it via async script _OR_ you couldn't do it via W3C
252−getSession ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
253−getSession uri sessId =
254− map handleAPIError $ N.get (uri <> "/session/" <> sessId)
255−
256−getSessions ∷ ∀ e. URI → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
257−getSessions uri =
258− map handleAPIError $ N.get (uri <> "/sessions")
259−
260−setAsyncScriptTimeout ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
261−setAsyncScriptTimeout uri sessId obj =
262− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/timeouts/async_script") obj
263−
264−getWindowHandle ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
265−getWindowHandle uri sessId =
266− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window_handle")
267−
268−getWindowHandlesLegacy ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
269−getWindowHandlesLegacy uri sessId =
270− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window_handles")
271−
272−execute ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
273−execute uri sessId obj =
274− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/execute") obj
275−
276−executeAsync ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
277−executeAsync uri sessId obj =
278− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/execute_async") obj
279−
280−setWindowSize ∷ ∀ e. URI → SessionId → WindowHandle → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
281−setWindowSize uri sessId win obj =
282− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/window/" <> win <> "/size") obj
283−
284−getWindowSize ∷ ∀ e. URI → SessionId → WindowHandle → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
285−getWindowSize uri sessId win =
286− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window/" <> win <> "/size")
287−
288−setWindowPosition ∷ ∀ e. URI → SessionId → WindowHandle → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
289−setWindowPosition uri sessId win obj =
290− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/window/" <> win <> "/position") obj
291−
292−getWindowPosition ∷ ∀ e. URI → SessionId → WindowHandle → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
293−getWindowPosition uri sessId win =
294− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window/" <> win <> "/position")
295−
296−elementSubmit ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
297−elementSubmit uri sessId elId =
298− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/submit") (Nothing ∷ Maybe Unit)
299−
300−sendKeys ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
301−sendKeys uri sessId obj =
302− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/keys") obj
303−
304−getElementLocation ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
305−getElementLocation uri sessId elId =
306− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/location")
307−
308−getElementSize ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
309−getElementSize uri sessId elId =
310− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/size")
311−
312−getAlertTextLegacy ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
313−getAlertTextLegacy uri sessId =
314− map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/alert_text")
315−
316−setAlertText ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
317−setAlertText uri sessId obj =
318− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/alert_text") obj
319−
320−acceptAlertLegacy ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
321−acceptAlertLegacy uri sessId =
322− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/accept_alert") (Nothing ∷ Maybe Unit)
323−
324−dismissAlertLegacy ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
325−dismissAlertLegacy uri sessId =
326− map handleAPIError $ N.post' (uri <> "/session/" <> sessId <> "/dismiss_alert") (Nothing ∷ Maybe Unit)
327−
328−moveTo ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
329−moveTo uri sessId obj =
330− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/moveto") obj
331−
332−sendClick ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
333−sendClick uri sessId obj =
334− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/click") obj
335−
336−sendButtonDown ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
337−sendButtonDown uri sessId obj =
338− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/buttondown") obj
339−
340−sendButtonUp ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
341−sendButtonUp uri sessId obj =
342− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/buttonup") obj
343−
344−sendDoubleClick ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
345−sendDoubleClick uri sessId obj =
346− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/doubleclick") obj
347−
348−sendTouch ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
349−sendTouch uri sessId obj =
350− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/click") obj
351−
352−sendTouchDown ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
353−sendTouchDown uri sessId obj =
354− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/down") obj
355−
356−sendTouchUp ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
357−sendTouchUp uri sessId obj =
358− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/up") obj
359−
360−sendTouchMove ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
361−sendTouchMove uri sessId obj =
362− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/move") obj
363−
364−sendTouchScroll ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
365−sendTouchScroll uri sessId obj =
366− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/scroll") obj
367−
368−sendTouchDoubleClick ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
369−sendTouchDoubleClick uri sessId obj =
370− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/doubleclick") obj
371−
372−sendTouchLongClick ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
373−sendTouchLongClick uri sessId obj =
374− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/longclick") obj
375−
376−sendTouchFlick ∷ ∀ e. URI → SessionId → Json → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
377−sendTouchFlick uri sessId obj =
378− map handleAPIError $ N.post (uri <> "/session/" <> sessId <> "/touch/flick") obj
src/Lunapark/Helpers.pursdeleted−162
@@ -1,162 +0,0 @@
1−module Lunapark.Helpers where
2−{-
3−import Prelude
4−
5−import CSS as CSS
6−import Control.Monad.Aff as Aff
7−import Control.Monad.Aff.Class (liftAff)
8−import Control.Monad.Eff.Class (liftEff)
9−import Control.Monad.Eff.Ref as Ref
10−import Control.Monad.Error.Class as EC
11−import Control.Monad.State.Class as SC
12−import Data.Argonaut as J
13−import Data.FoldableWithIndex as FI
14−import Data.StrMap as SM
15−import Data.Symbol (SProxy(..))
16−import Data.Time.Duration (Milliseconds(..))
17−import Data.Variant as V
18−import Lunapark.API as LA
19−import Lunapark.Error as LE
20−import Lunapark.Types as LT
21−import Node.Buffer as B
22−import Node.FS.Aff as FS
23−import Node.Path as Path
24−
25−import Debug.Trace (traceAnyA)
26−
27−isVisible ∷ ∀ e m. LA.LunaparkConstraints e m (LT.Element → m Boolean)
28−isVisible el = EC.catchError (LA.isDisplayed el) \err → case err.error of
29− LE.UnknownCommand → stepByStep
30− e → EC.throwError err
31− where
32− script =
33− { script: """var el = arguments[0]; return el.offsetHeight > 0 && el.offsetWidth > 0"""
34− , args: [ LT.encodeElement el ]
35− }
36−
37− stepByStep = do
38− res ← LA.executeScript script
39− LA.wrapEither $ J.decodeJson res
40−
41−isStale ∷ ∀ e m. LA.LunaparkConstraints e m (LT.Element → m Boolean)
42−isStale el = EC.catchError (false <$ (LA.findElementsFromElement el $ LT.ByCss $ CSS.fromString "*")) \err →
43− case err.error of
44− LE.StaleElementReference → pure true
45− _ → EC.throwError err
46−
47−setTimeouts ∷ ∀ e m. LA.LunaparkConstraints e m (LT.Timeouts → m Unit)
48−setTimeouts ts = EC.catchError (LA.setTimeouts ts) \err →
49− case err.error of
50− LE.InvalidArgument → do
51− LA.setWireTimeouts ts
52− SC.modify _{ timeouts = ts }
53− _ → EC.throwError err
54−
55−getTimeouts ∷ ∀ e m. LA.LunaparkConstraints e m (m LT.Timeouts)
56−getTimeouts =
57− EC.catchError action \err → case err.error of
58− LE.UnknownCommand → do
59− SC.gets _.timeouts
60− _ → EC.throwError err
61− where
62− action = do
63− ts ← LA.getTimeouts
64− SC.modify _{ timeouts = ts }
65− pure ts
66−
67−-- | Might be useful for setting implicit timeout of finding element
68−localTimeouts
69− ∷ ∀ e m a
70− . LA.LunaparkConstraints e m
71− ( (LT.Timeouts → LT.Timeouts)
72− → m a
73− → m a
74− )
75−localTimeouts fn action = do
76− ts ← getTimeouts
77− setTimeouts $ fn ts
78− res ← action
79− setTimeouts ts
80− pure res
81−
82−-- | Currently used in ps-webdriver but with duration passed explicitly
83−-- | since we already have timeouts it might be good idea to use them
84−repeatedly ∷ ∀ e m a. LA.LunaparkConstraints (ref ∷ Ref.REF|e) m (m a → m a)
85−repeatedly action = do
86− ts ← getTimeouts
87− ref ← liftEff $ Ref.newRef false
88− _ ← liftAff $ Aff.forkAff do
89− Aff.delay ts.script
90− liftEff $ Ref.writeRef ref true
91− let attempt = EC.catchError action \e → do
92− shouldRethrow ← liftEff $ Ref.readRef ref
93− if shouldRethrow
94− then EC.throwError e
95− else do
96− liftAff $ Aff.delay ts.implicit
97− attempt
98− attempt
99−
100−screenshot ∷ ∀ m e. LA.LunaparkConstraints (buffer ∷ B.BUFFER, fs ∷ FS.FS|e) m (Path.FilePath → m Unit)
101−screenshot fp = do
102− res ← LA.takeScreenshot
103− buffer ← liftEff $ B.fromString res.content res.encoding
104− liftAff do
105− FS.writeFile fp buffer
106−
107−elementScreenshot
108− ∷ ∀ m e
109− . LA.LunaparkConstraints (buffer ∷ B.BUFFER, fs ∷ FS.FS|e) m
110− ( LT.Element → Path.FilePath → m Unit )
111−elementScreenshot el fp = do
112− traceAnyA "ELEMENT SCREENSHOT"
113− res ← LA.takeElementScreenshot el
114− traceAnyA res
115− buffer ← liftEff $ B.fromString res.content res.encoding
116− liftAff do
117− FS.writeFile fp buffer
118−
119−pause ∷ ∀ e a. a → V.Variant (pause ∷ a|e)
120−pause = V.inj (SProxy ∷ SProxy "pause")
121−
122−keyDown ∷ ∀ e a. a → V.Variant (keyDown ∷ a|e)
123−keyDown = V.inj (SProxy ∷ SProxy "keyDown")
124−
125−keyUp ∷ ∀ e a. a → V.Variant (keyUp ∷ a|e)
126−keyUp = V.inj (SProxy ∷ SProxy "keyUp")
127−
128−pointerUp ∷ ∀ a e. a → V.Variant (pointerUp ∷ a|e)
129−pointerUp = V.inj (SProxy ∷ SProxy "pointerUp")
130−
131−pointerDown ∷ ∀ a e. a → V.Variant (pointerDown ∷ a|e)
132−pointerDown = V.inj (SProxy ∷ SProxy "pointerDown")
133−
134−pointerMove ∷ ∀ a e. a → V.Variant (pointerMove ∷ a|e)
135−pointerMove = V.inj (SProxy ∷ SProxy "pointerMove")
136−
137−click ∷ LT.Button → _ --LT.ActionSequence
138−click btn =
139− [ pointerDown btn
140− , pointerUp btn
141− ]
142−
143−leftClick ∷ _ -- LT.ActionSequence
144−leftClick = click LT.LeftBtn
145−
146−rightClick ∷ _ --LT.ActionSequence
147−rightClick = click LT.RightBtn
148−
149−doubleClick ∷ _ -- LT.ActionSequence
150−doubleClick = LT.Pointer LT.Mouse
151− [ pointerDown LT.LeftBtn
152− , pointerUp LT.LeftBtn
153− , pointerDown LT.LeftBtn
154− , pointerUp LT.LeftBtn
155− ]
156−
157−moveToElement ∷ LT.Element → LT.PointerMove
158−moveToElement el = { duration: Milliseconds 100.0, origin: LT.FromElement el, x: 0, y: 0 }
159−
160−performActions ∷ ∀ f s e m. Show s ⇒ FI.FoldableWithIndex s f ⇒ LA.LunaparkConstraints e m (f LT.ActionSequence → m Unit)
161−performActions fs = LA.performActions $ FI.foldlWithIndex (\i acc a → SM.insert (show i) a acc) SM.empty fs
162−-}
src/Main.purs−8
@@ -13,14 +13,6 @@ import Run.Except as RE
13
13
14import Debug.Trace as DT
14import Debug.Trace as DT
15
15
16−
17−
18−defaultTimeouts ∷ LT.Timeouts
19−defaultTimeouts =
20− { pageLoad: wrap 300000.0
21− , implicit: wrap 0.0
22− , script: wrap 30000.0
23− }
24main ∷ Eff _ Unit
16main ∷ Eff _ Unit
25main = void $ Aff.launchAff do
17main = void $ Aff.launchAff do
26 eiInterpret ← LA.init "http://localhost:4444/wd/hub" { alwaysMatch: [], firstMatch: [ [ LT.BrowserName LT.Chrome ] ] }
18 eiInterpret ← LA.init "http://localhost:4444/wd/hub" { alwaysMatch: [], firstMatch: [ [ LT.BrowserName LT.Chrome ] ] }