packages feed

webdriver-precore-0.2.0.0: test/RuntimeConst.hs

module RuntimeConst
  ( 
    httpCapabilities,
    httpFullCapabilities
  )
where

import Config as CFG
import WebDriverPreCore.HTTP.Protocol as WPC
  ( BrowserName (..),
    Capabilities (..),
    FullCapabilities (..),
    UnhandledPromptBehavior (..),
    VendorSpecific (..),
  )
import Prelude as P
  ( Maybe (..),
    ($),
    (<>), 
    null
  )

-- "Constants" that depend Config so can't be resolved until runtime

-- ################### capabilities ##################

httpCapabilities :: Config -> Capabilities
httpCapabilities MkConfig {browser} =
  MkCapabilities
    { browserName = Just $ if (isFirefox browser) then WPC.Firefox else WPC.Chrome,
      browserVersion = Nothing,
      platformName = Nothing,
      acceptInsecureCerts = Nothing,
      pageLoadStrategy = Nothing,
      proxy = Nothing,
      setWindowRect = Nothing,
      timeouts = Nothing,
      strictFileInteractability = Nothing,
      unhandledPromptBehavior = Just Ignore,
      webSocketUrl = Nothing,
      vendorSpecific =
        case browser of
          CFG.Firefox {headless, profilePath} -> Just $  FirefoxOptions
                { firefoxArgs = if null allArgs then  Nothing else Just allArgs,
                  firefoxBinary = Nothing,
                  firefoxProfile = Nothing,
                  firefoxLog = Nothing
                }
              where 
                headlessArgs = if headless then  ["--headless"] else []
                profileArgs = case profilePath of
                  Just path -> ["--profile", path]
                  Nothing -> []
                allArgs = headlessArgs <> profileArgs

          CFG.Chrome {headless} -> Just $ ChromeOptions
                { chromeArgs = if headless then Just ["--headless=new"] else Nothing,
                  chromeBinary = Nothing,
                  chromeExtensions = Nothing,
                  chromeLocalState = Nothing,
                  chromeMobileEmulation = Nothing,
                  chromePrefs = Nothing,
                  chromeDetach = Nothing,
                  chromeDebuggerAddress = Nothing,
                  chromeExcludeSwitches = Nothing,
                  chromeMinidumpPath = Nothing,
                  chromePerfLoggingPrefs = Nothing,
                  chromeWindowTypes = Nothing
                }
    }
 


httpFullCapabilities :: Config -> FullCapabilities
httpFullCapabilities cfg =
  MkFullCapabilities
    { alwaysMatch =
        Just $ httpCapabilities cfg,
      firstMatch = []
    }