packages feed

sandwich-webdriver-0.1.0.0: src/Test/Sandwich/WebDriver/Internal/Capabilities.hs

{-# LANGUAGE OverloadedLists #-}
-- |

module Test.Sandwich.WebDriver.Internal.Capabilities (
  -- * Chrome
  chromeCapabilities
  , headlessChromeCapabilities

  -- * Firefox
  , firefoxCapabilities
  , headlessFirefoxCapabilities
  ) where

import qualified Data.Aeson as A
import Data.Default
import qualified Data.HashMap.Strict as HM
import qualified Data.Text as T
import Test.WebDriver

loggingPrefs :: A.Value
loggingPrefs = A.object [("browser", "ALL")
                        , ("client", "WARNING")
                        , ("driver", "WARNING")
                        , ("performance", "ALL")
                        , ("server", "WARNING")
                        ]

-- * Chrome

-- | Default capabilities for regular Chrome.
-- Has the "browser" log level to "ALL" so that tests can collect browser logs.
chromeCapabilities :: Capabilities
chromeCapabilities =
  def {browser=Chrome Nothing Nothing args [] chromePrefs
      , additionalCaps=[("loggingPrefs", loggingPrefs)
                       , ("goog:loggingPrefs", loggingPrefs)]
      }
  where args = ["--verbose"]

-- | Default capabilities for headless Chrome.
headlessChromeCapabilities :: Capabilities
headlessChromeCapabilities =
  def {browser=Chrome Nothing Nothing args [] chromePrefs
      , additionalCaps=[("loggingPrefs", loggingPrefs)
                       , ("goog:loggingPrefs", loggingPrefs)]
      }
  where args = ["--verbose", "--headless"]

chromePrefs :: HM.HashMap T.Text A.Value
chromePrefs = HM.fromList [
  ("prefs", A.object [("profile.default_content_setting_values.automatic_downloads", A.Number 1)
                     , ("profile.content_settings.exceptions.automatic_downloads.*.setting", A.Number 1)
                     , ("download.prompt_for_download", A.Bool False)
                     , ("download.directory_upgrade", A.Bool True)
                     , ("download.default_directory", "/tmp")])
  ]

-- * Firefox

-- | Default capabilities for regular Firefox.
firefoxCapabilities :: Capabilities
firefoxCapabilities = def { browser=ff }
  where
    ff = Firefox { ffProfile = Nothing
                 , ffLogPref = LogAll
                 , ffBinary = Nothing
                 , ffAcceptInsecureCerts = Nothing
                 }

-- | Default capabilities for headless Firefox.
headlessFirefoxCapabilities :: Capabilities
headlessFirefoxCapabilities = def { browser=ff, additionalCaps=additionalCaps }
  where
    ff = Firefox { ffProfile = Nothing
                 , ffLogPref = LogAll
                 , ffBinary = Nothing
                 , ffAcceptInsecureCerts = Nothing
                 }

    additionalCaps = [("moz:firefoxOptions", A.object [("args", A.Array ["-headless"])])]