@@ -12,13 +12,13 @@ import Network.HTTP.Affjax (AJAX)
1212import Network.HTTP.Affjax as N
1313import Network.HTTP.StatusCode (StatusCode(..))
1414import Lunapark.Error as LE
15−import Debug.Trace (traceAnyM)
1615
1716-- | This two type synonims are used only here
1817-- | this is the lowest level of bindings this lib provides
1918type URI = String
2019type SessionId = String
2120type ElementId = String
21+type WindowHandle = String
2222
2323handleAPIError ∷ N.AffjaxResponse Json → Either LE.Error Json
2424handleAPIError r = case r.status of
@@ -71,8 +71,8 @@ getTitle ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error
7171getTitle uri sessId =
7272 map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/title")
7373
74−getWindowHandle ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
75−getWindowHandle uri sessId =
74+getWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
75+getWindow uri sessId =
7676 map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/window")
7777
7878closeWindow ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
@@ -240,14 +240,139 @@ takeScreenshot uri sessId =
240240
241241takeElementScreenshot ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
242242takeElementScreenshot uri sessId elId =
243− map handleAPIError $ traceAnyM =<< N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/screenshot")
243+ map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/screenshot")
244244
245245-- Recomended by W3C
246246isDisplayed ∷ ∀ e. URI → SessionId → ElementId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
247247isDisplayed uri sessId elId = do
248248 map handleAPIError $ N.get (uri <> "/session/" <> sessId <> "/element/" <> elId <> "/displayed")
249249
250−-- JsonWire legacy
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
251252getSession ∷ ∀ e. URI → SessionId → Aff (ajax ∷ AJAX|e) (Either LE.Error Json)
252253getSession uri sessId =
253254 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