module Test.QuickCheck.Monadic.WebDriver where
import Prelude
import Test.QuickCheck
import Test.QuickCheck.Property
import Test.QuickCheck.Monadic as QCM
import Test.WebDriver
import Test.WebDriver.Session ( WDSession )
import Control.Monad.IO.Class
data Context = ExistingSession WDSession
| SessionParams Capabilities (WD ())
monadicWD context = monadic wdProperty
where
wdProperty = ioProperty . runSesh
runSesh action = case context of
ExistingSession sesh -> runWD sesh action
SessionParams caps setup -> runSession conf $ setup >> action
where conf = defaultConfig { wdCapabilities=caps }
runIO :: IO a -> PropertyM WD a
runIO = QCM.run . liftIO
chromeOpts = [ "--log-level=0" ]
chrome' = chrome { chromeOptions = chromeOpts }
caps browser = allCaps { browser = browser }
capsChrome = caps chrome'
capsFirefox = caps firefox
seshParams browser = SessionParams (caps browser) $ return ()
seshParamsChrome = seshParams chrome'
seshParamsFirefox' = seshParams firefox
prop_Example = monadicWD context $ do
url :: String <- pick $ elements ["http://www.yesodweb.com", "http://snapframework.com/"]
run $ openPage url
assert True
runIO $ putStrLn $ "We've just evaluated a `Gen a` using `pick` and \
\a `WD ()` using `run`, then asserted a that a \
\property holds using `assert`."
where context = SessionParams allCaps (return ())