{-# LANGUAGE OverloadedStrings, BangPatterns #-}
module Web.Api.WebDriver.Endpoints (
runIsolated
, runIsolated_
, newSession
, newSession'
, deleteSession
, sessionStatus
, getTimeouts
, setTimeouts
, navigateTo
, navigateToStealth
, getCurrentUrl
, goBack
, goForward
, pageRefresh
, getTitle
, getWindowHandle
, closeWindow
, switchToWindow
, getWindowHandles
, newWindow
, switchToFrame
, switchToParentFrame
, getWindowRect
, setWindowRect
, maximizeWindow
, minimizeWindow
, fullscreenWindow
, findElement
, findElements
, findElementFromElement
, findElementsFromElement
, getActiveElement
, isElementSelected
, getElementAttribute
, getElementProperty
, getElementCssValue
, getElementText
, getElementTagName
, getElementRect
, isElementEnabled
, getComputedRole
, getComputedLabel
, elementClick
, elementClear
, elementSendKeys
, getPageSource
, getPageSourceStealth
, executeScript
, executeAsyncScript
, getAllCookies
, getNamedCookie
, addCookie
, deleteCookie
, deleteAllCookies
, performActions
, performActionsStealth
, releaseActions
, dismissAlert
, acceptAlert
, getAlertText
, sendAlertText
, takeScreenshot
, takeElementScreenshot
, printPage
, _WEB_ELEMENT_ID
, _WEB_WINDOW_ID
, _WEB_FRAME_ID
) where
import Control.Monad.Trans.Class
( MonadTrans(..) )
import Data.Aeson
( Value(..), encode, object, (.=), toJSON )
import Data.Text
( Text, unpack )
import Data.Text.Encoding
( encodeUtf8 )
import qualified Data.ByteString as SB
import qualified Data.ByteString.Base64 as B64
import Data.String (IsString)
import Data.Text (Text)
import qualified Data.Text as T
import qualified Network.URI.Encode as E
import Web.Api.WebDriver.Types
import Web.Api.WebDriver.Classes
import Web.Api.WebDriver.Monad
_WEB_ELEMENT_ID :: (IsString t) => t
_WEB_ELEMENT_ID :: t
_WEB_ELEMENT_ID = t
"element-6066-11e4-a52e-4f735466cecf"
_WEB_WINDOW_ID :: (IsString t) => t
_WEB_WINDOW_ID :: t
_WEB_WINDOW_ID = t
"window-fcc6-11e5-b4f8-330a88ab9d7f"
_WEB_FRAME_ID :: (IsString t) => t
_WEB_FRAME_ID :: t
_WEB_FRAME_ID = t
"frame-075b-4da1-b6ba-e579c2d3230a"
theRemoteUrl
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Url
theRemoteUrl :: WebDriverTT t eff Url
theRemoteUrl = do
Url
host <- (R WDError WDLog WDEnv -> Url) -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> Url
_remoteHostname (WDEnv -> Url)
-> (R WDError WDLog WDEnv -> WDEnv) -> R WDError WDLog WDEnv -> Url
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
Int
port <- (R WDError WDLog WDEnv -> Int) -> WebDriverTT t eff Int
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> Int
_remotePort (WDEnv -> Int)
-> (R WDError WDLog WDEnv -> WDEnv) -> R WDError WDLog WDEnv -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
Url
path <- (R WDError WDLog WDEnv -> Url) -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> Url
_remotePath (WDEnv -> Url)
-> (R WDError WDLog WDEnv -> WDEnv) -> R WDError WDLog WDEnv -> Url
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
Url -> WebDriverTT t eff Url
forall (m :: * -> *) a. Monad m => a -> m a
return (Url -> WebDriverTT t eff Url) -> Url -> WebDriverTT t eff Url
forall a b. (a -> b) -> a -> b
$ [Url] -> Url
T.concat [ Url
"http://", Url
host, Url
":", String -> Url
T.pack (String -> Url) -> String -> Url
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
port, Url
path]
theRemoteUrlWithSession :: (Monad eff, Monad (t eff), MonadTrans t) => WebDriverTT t eff Url
theRemoteUrlWithSession :: WebDriverTT t eff Url
theRemoteUrlWithSession = do
Maybe Url
st <- (S WDState -> Maybe Url) -> WebDriverTT t eff (Maybe Url)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(S WDState -> a) -> WebDriverTT t eff a
fromState (WDState -> Maybe Url
_sessionId (WDState -> Maybe Url)
-> (S WDState -> WDState) -> S WDState -> Maybe Url
forall b c a. (b -> c) -> (a -> b) -> a -> c
. S WDState -> WDState
forall s. S s -> s
_userState)
case Maybe Url
st of
Maybe Url
Nothing -> WDError -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WDError -> WebDriverTT t eff a
throwError WDError
NoSession
Just Url
session_id -> do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrl
Url -> WebDriverTT t eff Url
forall (m :: * -> *) a. Monad m => a -> m a
return (Url -> WebDriverTT t eff Url) -> Url -> WebDriverTT t eff Url
forall a b. (a -> b) -> a -> b
$ [Url] -> Url
T.concat [ Url
baseUrl, Url
"/session/", Url
session_id ]
setSessionId
:: Maybe Text
-> S WDState
-> S WDState
setSessionId :: Maybe Url -> S WDState -> S WDState
setSessionId Maybe Url
x S WDState
st = S WDState
st { _userState :: WDState
_userState = (S WDState -> WDState
forall s. S s -> s
_userState S WDState
st) { _sessionId :: Maybe Url
_sessionId = Maybe Url
x } }
cleanupOnError
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff a
-> WebDriverTT t eff a
cleanupOnError :: WebDriverTT t eff a -> WebDriverTT t eff a
cleanupOnError WebDriverTT t eff a
x = WebDriverTT t eff a
-> (WDError -> WebDriverTT t eff a)
-> (HttpException -> WebDriverTT t eff a)
-> (IOException -> WebDriverTT t eff a)
-> (JsonError -> WebDriverTT t eff a)
-> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff a
-> (WDError -> WebDriverTT t eff a)
-> (HttpException -> WebDriverTT t eff a)
-> (IOException -> WebDriverTT t eff a)
-> (JsonError -> WebDriverTT t eff a)
-> WebDriverTT t eff a
catchAnyError WebDriverTT t eff a
x
(\WDError
e -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff ()
deleteSession WebDriverTT t eff () -> WebDriverTT t eff a -> WebDriverTT t eff a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> WDError -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WDError -> WebDriverTT t eff a
throwError WDError
e)
(\HttpException
e -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff ()
deleteSession WebDriverTT t eff () -> WebDriverTT t eff a -> WebDriverTT t eff a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HttpException -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
HttpException -> WebDriverTT t eff a
throwHttpException HttpException
e)
(\IOException
e -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff ()
deleteSession WebDriverTT t eff () -> WebDriverTT t eff a -> WebDriverTT t eff a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IOException -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
IOException -> WebDriverTT t eff a
throwIOException IOException
e)
(\JsonError
e -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff ()
deleteSession WebDriverTT t eff () -> WebDriverTT t eff a -> WebDriverTT t eff a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> JsonError -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
JsonError -> WebDriverTT t eff a
throwJsonError JsonError
e)
runIsolated
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Capabilities
-> WebDriverTT t eff a
-> WebDriverTT t eff a
runIsolated :: Capabilities -> WebDriverTT t eff a -> WebDriverTT t eff a
runIsolated Capabilities
caps WebDriverTT t eff a
theSession = WebDriverTT t eff a -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff a -> WebDriverTT t eff a
cleanupOnError (WebDriverTT t eff a -> WebDriverTT t eff a)
-> WebDriverTT t eff a -> WebDriverTT t eff a
forall a b. (a -> b) -> a -> b
$ do
Url
session_id <- Capabilities -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Capabilities -> WebDriverTT t eff Url
newSession Capabilities
caps
(S WDState -> S WDState) -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
(S WDState -> S WDState) -> WebDriverTT t eff ()
modifyState ((S WDState -> S WDState) -> WebDriverTT t eff ())
-> (S WDState -> S WDState) -> WebDriverTT t eff ()
forall a b. (a -> b) -> a -> b
$ Maybe Url -> S WDState -> S WDState
setSessionId (Url -> Maybe Url
forall a. a -> Maybe a
Just Url
session_id)
a
a <- WebDriverTT t eff a
theSession
WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff ()
deleteSession
(S WDState -> S WDState) -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
(S WDState -> S WDState) -> WebDriverTT t eff ()
modifyState ((S WDState -> S WDState) -> WebDriverTT t eff ())
-> (S WDState -> S WDState) -> WebDriverTT t eff ()
forall a b. (a -> b) -> a -> b
$ Maybe Url -> S WDState -> S WDState
setSessionId Maybe Url
forall a. Maybe a
Nothing
a -> WebDriverTT t eff a
forall (m :: * -> *) a. Monad m => a -> m a
return a
a
runIsolated_
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Capabilities
-> WebDriverTT t eff a
-> WebDriverTT t eff ()
runIsolated_ :: Capabilities -> WebDriverTT t eff a -> WebDriverTT t eff ()
runIsolated_ Capabilities
caps WebDriverTT t eff a
theSession =
Capabilities -> WebDriverTT t eff a -> WebDriverTT t eff a
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
Capabilities -> WebDriverTT t eff a -> WebDriverTT t eff a
runIsolated Capabilities
caps WebDriverTT t eff a
theSession WebDriverTT t eff a -> WebDriverTT t eff () -> WebDriverTT t eff ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
newSession
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Capabilities
-> WebDriverTT t eff SessionId
newSession :: Capabilities -> WebDriverTT t eff Url
newSession = (Value -> Value) -> Capabilities -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
(Value -> Value) -> Capabilities -> WebDriverTT t eff Url
newSession' Value -> Value
forall a. a -> a
id
newSession'
:: (Monad eff, Monad (t eff), MonadTrans t)
=> (Value -> Value)
-> Capabilities
-> WebDriverTT t eff SessionId
newSession' :: (Value -> Value) -> Capabilities -> WebDriverTT t eff Url
newSession' Value -> Value
f Capabilities
caps = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrl
ResponseFormat
format <- (R WDError WDLog WDEnv -> ResponseFormat)
-> WebDriverTT t eff ResponseFormat
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> ResponseFormat
_responseFormat (WDEnv -> ResponseFormat)
-> (R WDError WDLog WDEnv -> WDEnv)
-> R WDError WDLog WDEnv
-> ResponseFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
let
!payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ Value -> Value
f (Value -> Value) -> Value -> Value
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object
[ Key
"capabilities" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
[ Key
"alwaysMatch" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Capabilities -> Value
forall a. ToJSON a => a -> Value
toJSON Capabilities
caps ]
, Key
"desiredCapabilities" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Capabilities -> Value
forall a. ToJSON a => a -> Value
toJSON Capabilities
caps
]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/session") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
ResponseFormat
ChromeFormat -> Value -> WebDriverTT t eff Value
forall (m :: * -> *) a. Monad m => a -> m a
return
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"sessionId"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
deleteSession
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
deleteSession :: WebDriverTT t eff ()
deleteSession = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpDelete Url
baseUrl
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
sessionStatus
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff (Bool, Text)
sessionStatus :: WebDriverTT t eff (Bool, Url)
sessionStatus = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrl
ResponseFormat
format <- (R WDError WDLog WDEnv -> ResponseFormat)
-> WebDriverTT t eff ResponseFormat
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> ResponseFormat
_responseFormat (WDEnv -> ResponseFormat)
-> (R WDError WDLog WDEnv -> WDEnv)
-> R WDError WDLog WDEnv
-> ResponseFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
Value
r <- Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/status")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
Bool
ready <- case ResponseFormat
format of
ResponseFormat
SpecFormat ->
Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value" Value
r
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ready"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Bool) -> WebDriverTT t eff Bool
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Bool
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
ResponseFormat
ChromeFormat -> Bool -> WebDriverTT t eff Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
Url
msg <- case ResponseFormat
format of
ResponseFormat
SpecFormat ->
Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value" Value
r
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"message"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
ResponseFormat
ChromeFormat -> Url -> WebDriverTT t eff Url
forall (m :: * -> *) a. Monad m => a -> m a
return Url
"chromedriver is not spec compliant :)"
(Bool, Url) -> WebDriverTT t eff (Bool, Url)
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool
ready, Url
msg)
getTimeouts
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff TimeoutConfig
getTimeouts :: WebDriverTT t eff TimeoutConfig
getTimeouts = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/timeouts")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff TimeoutConfig)
-> WebDriverTT t eff TimeoutConfig
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff TimeoutConfig
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
setTimeouts
:: (Monad eff, Monad (t eff), MonadTrans t)
=> TimeoutConfig
-> WebDriverTT t eff ()
setTimeouts :: TimeoutConfig -> WebDriverTT t eff ()
setTimeouts TimeoutConfig
timeouts = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = TimeoutConfig -> ByteString
forall a. ToJSON a => a -> ByteString
encode TimeoutConfig
timeouts
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/timeouts") ByteString
payload
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
navigateTo
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Url
-> WebDriverTT t eff ()
navigateTo :: Url -> WebDriverTT t eff ()
navigateTo Url
url = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"url" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
url ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/url") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
navigateToStealth
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Url
-> WebDriverTT t eff ()
navigateToStealth :: Url -> WebDriverTT t eff ()
navigateToStealth Url
url = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"url" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
url ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpSilentPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/url") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getCurrentUrl
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Url
getCurrentUrl :: WebDriverTT t eff Url
getCurrentUrl = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/url")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
goBack
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
goBack :: WebDriverTT t eff ()
goBack = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/back") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
goForward
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
goForward :: WebDriverTT t eff ()
goForward = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/forward") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
pageRefresh
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
= do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/refresh") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getTitle
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Text
getTitle :: WebDriverTT t eff Url
getTitle = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/title")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getWindowHandle
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ContextId
getWindowHandle :: WebDriverTT t eff ContextId
getWindowHandle = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff ContextId)
-> WebDriverTT t eff ContextId
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ContextId -> WebDriverTT t eff ContextId
forall (m :: * -> *) a. Monad m => a -> m a
return (ContextId -> WebDriverTT t eff ContextId)
-> (Url -> ContextId) -> Url -> WebDriverTT t eff ContextId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ContextId
ContextId)
closeWindow
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff [ContextId]
closeWindow :: WebDriverTT t eff [ContextId]
closeWindow = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpDelete (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff [Value]
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Url]) -> WebDriverTT t eff [Url]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([WebDriverTT t eff Url] -> WebDriverTT t eff [Url]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence ([WebDriverTT t eff Url] -> WebDriverTT t eff [Url])
-> ([Value] -> [WebDriverTT t eff Url])
-> [Value]
-> WebDriverTT t eff [Url]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> WebDriverTT t eff Url)
-> [Value] -> [WebDriverTT t eff Url]
forall a b. (a -> b) -> [a] -> [b]
map Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson)
WebDriverTT t eff [Url]
-> ([Url] -> WebDriverTT t eff [ContextId])
-> WebDriverTT t eff [ContextId]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([ContextId] -> WebDriverTT t eff [ContextId]
forall (m :: * -> *) a. Monad m => a -> m a
return ([ContextId] -> WebDriverTT t eff [ContextId])
-> ([Url] -> [ContextId]) -> [Url] -> WebDriverTT t eff [ContextId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Url -> ContextId) -> [Url] -> [ContextId]
forall a b. (a -> b) -> [a] -> [b]
map Url -> ContextId
ContextId)
switchToWindow
:: (Monad eff, Monad (t eff), MonadTrans t, HasContextId a)
=> a
-> WebDriverTT t eff ()
switchToWindow :: a -> WebDriverTT t eff ()
switchToWindow a
t = do
let contextId :: ContextId
contextId = a -> ContextId
forall t. HasContextId t => t -> ContextId
contextIdOf a
t
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"handle" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= ContextId -> String
forall a. Show a => a -> String
show ContextId
contextId ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window") ByteString
payload
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getWindowHandles
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff [ContextId]
getWindowHandles :: WebDriverTT t eff [ContextId]
getWindowHandles = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/handles")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff [Value]
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Url]) -> WebDriverTT t eff [Url]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([WebDriverTT t eff Url] -> WebDriverTT t eff [Url]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence ([WebDriverTT t eff Url] -> WebDriverTT t eff [Url])
-> ([Value] -> [WebDriverTT t eff Url])
-> [Value]
-> WebDriverTT t eff [Url]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> WebDriverTT t eff Url)
-> [Value] -> [WebDriverTT t eff Url]
forall a b. (a -> b) -> [a] -> [b]
map Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson)
WebDriverTT t eff [Url]
-> ([Url] -> WebDriverTT t eff [ContextId])
-> WebDriverTT t eff [ContextId]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([ContextId] -> WebDriverTT t eff [ContextId]
forall (m :: * -> *) a. Monad m => a -> m a
return ([ContextId] -> WebDriverTT t eff [ContextId])
-> ([Url] -> [ContextId]) -> [Url] -> WebDriverTT t eff [ContextId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Url -> ContextId) -> [Url] -> [ContextId]
forall a b. (a -> b) -> [a] -> [b]
map Url -> ContextId
ContextId)
newWindow
:: (Monad eff, Monad (t eff), MonadTrans t)
=> ContextType -> WebDriverTT t eff (ContextId, ContextType)
newWindow :: ContextType -> WebDriverTT t eff (ContextId, ContextType)
newWindow ContextType
ctxTypeReq = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"type" Key -> ContextType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= ContextType
ctxTypeReq ]
Value
response <- Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/new") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
ContextId
ctxId <- Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"handle" Value
response
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff ContextId)
-> WebDriverTT t eff ContextId
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff ContextId
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
ContextType
ctxType <- Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"type" Value
response
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff ContextType)
-> WebDriverTT t eff ContextType
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff ContextType
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
(ContextId, ContextType)
-> WebDriverTT t eff (ContextId, ContextType)
forall (m :: * -> *) a. Monad m => a -> m a
return (ContextId
ctxId, ContextType
ctxType)
switchToFrame
:: (Monad eff, Monad (t eff), MonadTrans t)
=> FrameReference
-> WebDriverTT t eff ()
switchToFrame :: FrameReference -> WebDriverTT t eff ()
switchToFrame FrameReference
ref = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let
!frame :: Value
frame = case FrameReference
ref of
FrameReference
TopLevelFrame -> Value
Null
FrameNumber Int
k -> Scientific -> Value
Number (Scientific -> Value) -> Scientific -> Value
forall a b. (a -> b) -> a -> b
$ Int -> Scientific
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
k
FrameContainingElement ElementRef
element_id -> [Pair] -> Value
object [ Key
forall t. IsString t => t
_WEB_ELEMENT_ID Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= ElementRef -> String
forall a. Show a => a -> String
show ElementRef
element_id ]
!payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object
[ Key
"id" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Value -> Value
forall a. ToJSON a => a -> Value
toJSON Value
frame ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/frame") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
switchToParentFrame
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
switchToParentFrame :: WebDriverTT t eff ()
switchToParentFrame = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/frame/parent") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getWindowRect
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Rect
getWindowRect :: WebDriverTT t eff Rect
getWindowRect = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/rect")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
setWindowRect
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Rect
-> WebDriverTT t eff Rect
setWindowRect :: Rect -> WebDriverTT t eff Rect
setWindowRect Rect
rect = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Rect -> ByteString
forall a. ToJSON a => a -> ByteString
encode Rect
rect
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/rect") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
maximizeWindow
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Rect
maximizeWindow :: WebDriverTT t eff Rect
maximizeWindow = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/maximize") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
minimizeWindow
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Rect
minimizeWindow :: WebDriverTT t eff Rect
minimizeWindow = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/minimize") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
fullscreenWindow
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Rect
fullscreenWindow :: WebDriverTT t eff Rect
fullscreenWindow = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/window/fullscreen") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
findElement
:: (Monad eff, Monad (t eff), MonadTrans t)
=> LocationStrategy
-> Selector
-> WebDriverTT t eff ElementRef
findElement :: LocationStrategy -> Url -> WebDriverTT t eff ElementRef
findElement LocationStrategy
strategy Url
selector = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"value" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
selector, Key
"using" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= LocationStrategy -> Value
forall a. ToJSON a => a -> Value
toJSON LocationStrategy
strategy ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
forall t. IsString t => t
_WEB_ELEMENT_ID
ResponseFormat
ChromeFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ELEMENT"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff ElementRef)
-> WebDriverTT t eff ElementRef
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ElementRef -> WebDriverTT t eff ElementRef
forall (m :: * -> *) a. Monad m => a -> m a
return (ElementRef -> WebDriverTT t eff ElementRef)
-> (Url -> ElementRef) -> Url -> WebDriverTT t eff ElementRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ElementRef
ElementRef)
findElements
:: (Monad eff, Monad (t eff), MonadTrans t)
=> LocationStrategy
-> Selector
-> WebDriverTT t eff [ElementRef]
findElements :: LocationStrategy -> Url -> WebDriverTT t eff [ElementRef]
findElements LocationStrategy
strategy Url
selector = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"value" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
selector, Key
"using" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= LocationStrategy -> Value
forall a. ToJSON a => a -> Value
toJSON LocationStrategy
strategy ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/elements") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff [Value]
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> (Value -> WebDriverTT t eff Value)
-> [Value] -> WebDriverTT t eff [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
forall t. IsString t => t
_WEB_ELEMENT_ID)
ResponseFormat
ChromeFormat -> (Value -> WebDriverTT t eff Value)
-> [Value] -> WebDriverTT t eff [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ELEMENT")
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Url]) -> WebDriverTT t eff [Url]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Value -> WebDriverTT t eff Url)
-> [Value] -> WebDriverTT t eff [Url]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Url]
-> ([Url] -> WebDriverTT t eff [ElementRef])
-> WebDriverTT t eff [ElementRef]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([ElementRef] -> WebDriverTT t eff [ElementRef]
forall (m :: * -> *) a. Monad m => a -> m a
return ([ElementRef] -> WebDriverTT t eff [ElementRef])
-> ([Url] -> [ElementRef])
-> [Url]
-> WebDriverTT t eff [ElementRef]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Url -> ElementRef) -> [Url] -> [ElementRef]
forall a b. (a -> b) -> [a] -> [b]
map Url -> ElementRef
ElementRef)
findElementFromElement
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> LocationStrategy
-> Selector
-> a
-> WebDriverTT t eff ElementRef
findElementFromElement :: LocationStrategy -> Url -> a -> WebDriverTT t eff ElementRef
findElementFromElement LocationStrategy
strategy Url
selector a
root = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let root_id :: Url
root_id = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
root
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"value" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
selector, Key
"using" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= LocationStrategy -> Value
forall a. ToJSON a => a -> Value
toJSON LocationStrategy
strategy ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
root_id Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
forall t. IsString t => t
_WEB_ELEMENT_ID
ResponseFormat
ChromeFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ELEMENT"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff ElementRef)
-> WebDriverTT t eff ElementRef
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ElementRef -> WebDriverTT t eff ElementRef
forall (m :: * -> *) a. Monad m => a -> m a
return (ElementRef -> WebDriverTT t eff ElementRef)
-> (Url -> ElementRef) -> Url -> WebDriverTT t eff ElementRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ElementRef
ElementRef)
findElementsFromElement
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> LocationStrategy
-> Selector
-> a
-> WebDriverTT t eff [ElementRef]
findElementsFromElement :: LocationStrategy -> Url -> a -> WebDriverTT t eff [ElementRef]
findElementsFromElement LocationStrategy
strategy Url
selector a
root = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let root_id :: Url
root_id = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
root
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"value" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
selector, Key
"using" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= LocationStrategy -> Value
forall a. ToJSON a => a -> Value
toJSON LocationStrategy
strategy ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
root_id Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/elements") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff [Value]
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> (Value -> WebDriverTT t eff Value)
-> [Value] -> WebDriverTT t eff [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
forall t. IsString t => t
_WEB_ELEMENT_ID)
ResponseFormat
ChromeFormat -> (Value -> WebDriverTT t eff Value)
-> [Value] -> WebDriverTT t eff [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ELEMENT")
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Url]) -> WebDriverTT t eff [Url]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Value -> WebDriverTT t eff Url)
-> [Value] -> WebDriverTT t eff [Url]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Url]
-> ([Url] -> WebDriverTT t eff [ElementRef])
-> WebDriverTT t eff [ElementRef]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([ElementRef] -> WebDriverTT t eff [ElementRef]
forall (m :: * -> *) a. Monad m => a -> m a
return ([ElementRef] -> WebDriverTT t eff [ElementRef])
-> ([Url] -> [ElementRef])
-> [Url]
-> WebDriverTT t eff [ElementRef]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Url -> ElementRef) -> [Url] -> [ElementRef]
forall a b. (a -> b) -> [a] -> [b]
map Url -> ElementRef
ElementRef)
getActiveElement
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ElementRef
getActiveElement :: WebDriverTT t eff ElementRef
getActiveElement = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/active")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= case ResponseFormat
format of
ResponseFormat
SpecFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
forall t. IsString t => t
_WEB_ELEMENT_ID
ResponseFormat
ChromeFormat -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"ELEMENT"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff ElementRef)
-> WebDriverTT t eff ElementRef
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ElementRef -> WebDriverTT t eff ElementRef
forall (m :: * -> *) a. Monad m => a -> m a
return (ElementRef -> WebDriverTT t eff ElementRef)
-> (Url -> ElementRef) -> Url -> WebDriverTT t eff ElementRef
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ElementRef
ElementRef)
isElementSelected
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff Bool
isElementSelected :: a -> WebDriverTT t eff Bool
isElementSelected a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/selected")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Bool) -> WebDriverTT t eff Bool
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Bool
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getElementAttribute
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> AttributeName
-> a
-> WebDriverTT t eff (Either Bool Text)
getElementAttribute :: Url -> a -> WebDriverTT t eff (Either Bool Url)
getElementAttribute Url
name a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Value
x <- Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/attribute/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url -> Url
E.encodeText Url
name)
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
case Value
x of
Value
Null -> Either Bool Url -> WebDriverTT t eff (Either Bool Url)
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool -> Either Bool Url
forall a b. a -> Either a b
Left Bool
False)
String Url
"true" -> Either Bool Url -> WebDriverTT t eff (Either Bool Url)
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool -> Either Bool Url
forall a b. a -> Either a b
Left Bool
True)
String Url
attr -> Either Bool Url -> WebDriverTT t eff (Either Bool Url)
forall (m :: * -> *) a. Monad m => a -> m a
return (Url -> Either Bool Url
forall a b. b -> Either a b
Right Url
attr)
Value
_ -> JsonError -> WebDriverTT t eff (Either Bool Url)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
JsonError -> WebDriverTT t eff a
throwJsonError (JsonError -> WebDriverTT t eff (Either Bool Url))
-> JsonError -> WebDriverTT t eff (Either Bool Url)
forall a b. (a -> b) -> a -> b
$ Url -> JsonError
JsonError Url
"Invalid element attribute response"
getElementProperty
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> PropertyName
-> a
-> WebDriverTT t eff Value
getElementProperty :: Url -> a -> WebDriverTT t eff Value
getElementProperty Url
name a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/property/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url -> Url
E.encodeText Url
name)
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
getElementCssValue
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> CssPropertyName
-> a
-> WebDriverTT t eff Text
getElementCssValue :: Url -> a -> WebDriverTT t eff Url
getElementCssValue Url
name a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/css/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
name)
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getElementText
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff Text
getElementText :: a -> WebDriverTT t eff Url
getElementText a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/text")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getElementTagName
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff Text
getElementTagName :: a -> WebDriverTT t eff Url
getElementTagName a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/name")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getElementRect
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff Rect
getElementRect :: a -> WebDriverTT t eff Rect
getElementRect a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/rect")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Rect) -> WebDriverTT t eff Rect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Rect
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
isElementEnabled
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff Bool
isElementEnabled :: a -> WebDriverTT t eff Bool
isElementEnabled a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/enabled")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Bool) -> WebDriverTT t eff Bool
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Bool
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getComputedRole
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff AriaRole
getComputedRole :: a -> WebDriverTT t eff Url
getComputedRole a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/computedrole")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getComputedLabel
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff AriaLabel
getComputedLabel :: a -> WebDriverTT t eff Url
getComputedLabel a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/computedlabel")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
elementClick
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff ()
elementClick :: a -> WebDriverTT t eff ()
elementClick a
element = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/click") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
elementClear
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff ()
elementClear :: a -> WebDriverTT t eff ()
elementClear a
element = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/clear") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
elementSendKeys
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> Text
-> a
-> WebDriverTT t eff ()
elementSendKeys :: Url -> a -> WebDriverTT t eff ()
elementSendKeys Url
text a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"text" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
text ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/value") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getPageSource
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Text
getPageSource :: WebDriverTT t eff Url
getPageSource = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/source")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getPageSourceStealth
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff Text
getPageSourceStealth :: WebDriverTT t eff Url
getPageSourceStealth = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpSilentGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/source")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
executeScript
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Script
-> [Value]
-> WebDriverTT t eff Value
executeScript :: Url -> [Value] -> WebDriverTT t eff Value
executeScript Url
script [Value]
args = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"script" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
script, Key
"args" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Value] -> Value
forall a. ToJSON a => a -> Value
toJSON [Value]
args ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/execute/sync") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
executeAsyncScript
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Script
-> [Value]
-> WebDriverTT t eff Value
executeAsyncScript :: Url -> [Value] -> WebDriverTT t eff Value
executeAsyncScript Url
script [Value]
args = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"script" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
script, Key
"args" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Value] -> Value
forall a. ToJSON a => a -> Value
toJSON [Value]
args ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/execute/async") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
getAllCookies
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff [Cookie]
getAllCookies :: WebDriverTT t eff [Cookie]
getAllCookies = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/cookie")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff [Value])
-> WebDriverTT t eff [Value]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff [Value]
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff [Value]
-> ([Value] -> WebDriverTT t eff [Cookie])
-> WebDriverTT t eff [Cookie]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Value -> WebDriverTT t eff Cookie)
-> [Value] -> WebDriverTT t eff [Cookie]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Value -> WebDriverTT t eff Cookie
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
getNamedCookie
:: (Monad eff, Monad (t eff), MonadTrans t)
=> CookieName
-> WebDriverTT t eff Cookie
getNamedCookie :: Url -> WebDriverTT t eff Cookie
getNamedCookie Url
name = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/cookie/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> String -> Url
T.pack (String -> String
E.encode (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Url -> String
unpack Url
name))
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Cookie) -> WebDriverTT t eff Cookie
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Cookie
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
addCookie
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Cookie
-> WebDriverTT t eff ()
addCookie :: Cookie -> WebDriverTT t eff ()
addCookie Cookie
c = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"cookie" Key -> Cookie -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Cookie
c ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpSilentPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/cookie") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
deleteCookie
:: (Monad eff, Monad (t eff), MonadTrans t)
=> CookieName
-> WebDriverTT t eff ()
deleteCookie :: Url -> WebDriverTT t eff ()
deleteCookie Url
name = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpDelete (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/cookie/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> String -> Url
T.pack (String -> String
E.encode (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Url -> String
unpack Url
name))
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
deleteAllCookies
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
deleteAllCookies :: WebDriverTT t eff ()
deleteAllCookies = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpDelete (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/cookie")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
performActions
:: (Monad eff, Monad (t eff), MonadTrans t)
=> [Action]
-> WebDriverTT t eff ()
performActions :: [Action] -> WebDriverTT t eff ()
performActions = Bool -> [Action] -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Bool -> [Action] -> WebDriverTT t eff ()
_performActions Bool
False
performActionsStealth
:: (Monad eff, Monad (t eff), MonadTrans t)
=> [Action]
-> WebDriverTT t eff ()
performActionsStealth :: [Action] -> WebDriverTT t eff ()
performActionsStealth = Bool -> [Action] -> WebDriverTT t eff ()
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Bool -> [Action] -> WebDriverTT t eff ()
_performActions Bool
True
_performActions
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Bool
-> [Action]
-> WebDriverTT t eff ()
_performActions :: Bool -> [Action] -> WebDriverTT t eff ()
_performActions Bool
stealth [Action]
action = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"actions" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Action] -> Value
forall a. ToJSON a => a -> Value
toJSON [Action]
action ]
let httpMethod :: Url -> ByteString -> WebDriverTT t eff HttpResponse
httpMethod = if Bool
stealth then Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpSilentPost else Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpMethod (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/actions") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
releaseActions
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
releaseActions :: WebDriverTT t eff ()
releaseActions = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpDelete (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/actions")
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
dismissAlert
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
dismissAlert :: WebDriverTT t eff ()
dismissAlert = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/alert/dismiss") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
acceptAlert
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff ()
acceptAlert :: WebDriverTT t eff ()
acceptAlert = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object []
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/alert/accept") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
getAlertText
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff (Maybe Text)
getAlertText :: WebDriverTT t eff (Maybe Url)
getAlertText = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Value
msg <- Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/alert/text")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
case Value
msg of
Value
Null -> Maybe Url -> WebDriverTT t eff (Maybe Url)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Url
forall a. Maybe a
Nothing
String Url
text -> Maybe Url -> WebDriverTT t eff (Maybe Url)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe Url -> WebDriverTT t eff (Maybe Url))
-> Maybe Url -> WebDriverTT t eff (Maybe Url)
forall a b. (a -> b) -> a -> b
$ Url -> Maybe Url
forall a. a -> Maybe a
Just Url
text
Value
_ -> JsonError -> WebDriverTT t eff (Maybe Url)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
JsonError -> WebDriverTT t eff a
throwJsonError (JsonError -> WebDriverTT t eff (Maybe Url))
-> JsonError -> WebDriverTT t eff (Maybe Url)
forall a b. (a -> b) -> a -> b
$ Url -> JsonError
JsonError Url
"Invalid alert text response"
sendAlertText
:: (Monad eff, Monad (t eff), MonadTrans t)
=> Text
-> WebDriverTT t eff ()
sendAlertText :: Url -> WebDriverTT t eff ()
sendAlertText Url
msg = do
(Url
baseUrl, ResponseFormat
format) <- WebDriverTT t eff (Url, ResponseFormat)
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff (Url, ResponseFormat)
theRequestContext
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"text" Key -> Url -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Url
msg ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/alert/text") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ResponseFormat -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format
() -> WebDriverTT t eff ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
takeScreenshot
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff SB.ByteString
takeScreenshot :: WebDriverTT t eff ByteString
takeScreenshot = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Either String ByteString
result <- Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/screenshot")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff (Either String ByteString))
-> WebDriverTT t eff (Either String ByteString)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Either String ByteString
-> WebDriverTT t eff (Either String ByteString)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String ByteString
-> WebDriverTT t eff (Either String ByteString))
-> (Url -> Either String ByteString)
-> Url
-> WebDriverTT t eff (Either String ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Either String ByteString
B64.decode (ByteString -> Either String ByteString)
-> (Url -> ByteString) -> Url -> Either String ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ByteString
encodeUtf8)
case Either String ByteString
result of
Right ByteString
img -> ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
img
Left String
str -> WDError -> WebDriverTT t eff ByteString
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WDError -> WebDriverTT t eff a
throwError (WDError -> WebDriverTT t eff ByteString)
-> WDError -> WebDriverTT t eff ByteString
forall a b. (a -> b) -> a -> b
$ Url -> WDError
ImageDecodeError (Url -> WDError) -> Url -> WDError
forall a b. (a -> b) -> a -> b
$ String -> Url
T.pack String
str
takeElementScreenshot
:: (Monad eff, Monad (t eff), MonadTrans t, HasElementRef a)
=> a
-> WebDriverTT t eff SB.ByteString
takeElementScreenshot :: a -> WebDriverTT t eff ByteString
takeElementScreenshot a
element = do
let elementRef :: Url
elementRef = ElementRef -> Url
theElementRef (ElementRef -> Url) -> ElementRef -> Url
forall a b. (a -> b) -> a -> b
$ a -> ElementRef
forall t. HasElementRef t => t -> ElementRef
elementRefOf a
element
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
Either String ByteString
result <- Url -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> WebDriverTT t eff HttpResponse
httpGet (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/element/" Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
elementRef Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/screenshot")
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Url) -> WebDriverTT t eff Url
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
WebDriverTT t eff Url
-> (Url -> WebDriverTT t eff (Either String ByteString))
-> WebDriverTT t eff (Either String ByteString)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Either String ByteString
-> WebDriverTT t eff (Either String ByteString)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String ByteString
-> WebDriverTT t eff (Either String ByteString))
-> (Url -> Either String ByteString)
-> Url
-> WebDriverTT t eff (Either String ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Either String ByteString
B64.decode (ByteString -> Either String ByteString)
-> (Url -> ByteString) -> Url -> Either String ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Url -> ByteString
encodeUtf8)
case Either String ByteString
result of
Right ByteString
img -> ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
img
Left String
str -> WDError -> WebDriverTT t eff ByteString
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
WDError -> WebDriverTT t eff a
throwError (WDError -> WebDriverTT t eff ByteString)
-> WDError -> WebDriverTT t eff ByteString
forall a b. (a -> b) -> a -> b
$ Url -> WDError
ImageDecodeError (Url -> WDError) -> Url -> WDError
forall a b. (a -> b) -> a -> b
$ String -> Url
T.pack String
str
printPage
:: (Monad eff, Monad (t eff), MonadTrans t)
=> PrintOptions -> WebDriverTT t eff Base64EncodedPdf
printPage :: PrintOptions -> WebDriverTT t eff Base64EncodedPdf
printPage PrintOptions
opts = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
let !payload :: ByteString
payload = Value -> ByteString
forall a. ToJSON a => a -> ByteString
encode (Value -> ByteString) -> Value -> ByteString
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [ Key
"parameters" Key -> PrintOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= PrintOptions
opts ]
Url -> ByteString -> WebDriverTT t eff HttpResponse
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> ByteString -> WebDriverTT t eff HttpResponse
httpPost (Url
baseUrl Url -> Url -> Url
forall a. Semigroup a => a -> a -> a
<> Url
"/print") ByteString
payload
WebDriverTT t eff HttpResponse
-> (HttpResponse -> WebDriverTT t eff ByteString)
-> WebDriverTT t eff ByteString
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ByteString -> WebDriverTT t eff ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return (ByteString -> WebDriverTT t eff ByteString)
-> (HttpResponse -> ByteString)
-> HttpResponse
-> WebDriverTT t eff ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HttpResponse -> ByteString
_responseBody)
WebDriverTT t eff ByteString
-> (ByteString -> WebDriverTT t eff Value)
-> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ByteString -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
ByteString -> WebDriverTT t eff Value
parseJson
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Value) -> WebDriverTT t eff Value
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
Url -> Value -> WebDriverTT t eff Value
lookupKeyJson Url
"value"
WebDriverTT t eff Value
-> (Value -> WebDriverTT t eff Base64EncodedPdf)
-> WebDriverTT t eff Base64EncodedPdf
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> WebDriverTT t eff Base64EncodedPdf
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, FromJSON a) =>
Value -> WebDriverTT t eff a
constructFromJson
expectEmptyObject
:: (Monad eff, Monad (t eff), MonadTrans t)
=> ResponseFormat
-> Value
-> WebDriverTT t eff Value
expectEmptyObject :: ResponseFormat -> Value -> WebDriverTT t eff Value
expectEmptyObject ResponseFormat
format Value
value = case ResponseFormat
format of
ResponseFormat
SpecFormat -> (Value -> Bool) -> Url -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, Show a) =>
(a -> Bool) -> Url -> a -> WebDriverTT t eff a
expectIs (\Value
x -> Value -> [Value] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem Value
x [Value
Null, [Pair] -> Value
object []]) Url
"empty object or null" Value
value
ResponseFormat
ChromeFormat -> Value -> Value -> WebDriverTT t eff Value
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t, Eq a, Show a) =>
a -> a -> WebDriverTT t eff a
expect Value
Null Value
value
theRequestContext
:: (Monad eff, Monad (t eff), MonadTrans t)
=> WebDriverTT t eff (Url, ResponseFormat)
theRequestContext :: WebDriverTT t eff (Url, ResponseFormat)
theRequestContext = do
Url
baseUrl <- WebDriverTT t eff Url
forall (eff :: * -> *) (t :: (* -> *) -> * -> *).
(Monad eff, Monad (t eff), MonadTrans t) =>
WebDriverTT t eff Url
theRemoteUrlWithSession
ResponseFormat
format <- (R WDError WDLog WDEnv -> ResponseFormat)
-> WebDriverTT t eff ResponseFormat
forall (eff :: * -> *) (t :: (* -> *) -> * -> *) a.
(Monad eff, Monad (t eff), MonadTrans t) =>
(R WDError WDLog WDEnv -> a) -> WebDriverTT t eff a
fromEnv (WDEnv -> ResponseFormat
_responseFormat (WDEnv -> ResponseFormat)
-> (R WDError WDLog WDEnv -> WDEnv)
-> R WDError WDLog WDEnv
-> ResponseFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. R WDError WDLog WDEnv -> WDEnv
forall e w r. R e w r -> r
_env)
(Url, ResponseFormat) -> WebDriverTT t eff (Url, ResponseFormat)
forall (m :: * -> *) a. Monad m => a -> m a
return (Url
baseUrl, ResponseFormat
format)