{-# LANGUAGE OverloadedStrings #-} module App.Login ( login ) where import Test.WebDriver import Data.Text import System.Locale import Data.Time.Format import Data.Time import Control.Monad.IO.Class type Email = String type Pass = String type Verbose = Bool login :: Email -> Pass -> Verbose -> IO () login email pass verb = runSession defaultConfig $ do let showOutput xs = if verb then liftIO $ do n <- formatNowTime putStrLn $ n ++ " " ++ xs else return () showOutput "Entering login page" openPage "https://stackoverflow.com/users/login" emailInput <- findElem $ ByName "email" passInput <- findElem $ ByName "password" form <- findElem $ ById "se-login-form" showOutput "Filling information" pack email `sendKeys` emailInput pack pass `sendKeys` passInput showOutput "Sent request, waiting to load" submit form showOutput "Exiting session" closeSession formatNowTime :: IO String formatNowTime = formatTime defaultTimeLocale "(%d-%m @ %T)" `fmap` getZonedTime