@@ -63,11 +63,11 @@ chromeConfig fp = WD.useBrowser (WD.chrome { WD.chromeBinary = Just $ T.unpack f
6363-- parallel (requires port fix)
6464
6565main :: IO ()
66−main = withSeleniumServer $ \stopServer ->
67− hspec (parallel tests) `finally` stopServer
66+main = withSeleniumServer $ \selenium ->
67+ hspec (parallel (tests selenium)) `finally` _selenium_stopServer selenium
6868
69−tests :: Spec
70−tests = do
69+tests :: Selenium -> Spec
70+tests selenium = do
7171 describe "text" $ parallel $ do
7272 it "works" $ do
7373 testWidgetStatic (checkBodyText "hello world") $ do
@@ -598,19 +598,28 @@ tests = do
598598 (traverse_ elementShouldBeRemoved)
599599 (el "span" $ prerender (text "One") (text "Two"))
600600
601−startSeleniumServer :: IO (IO ())
602−startSeleniumServer = do
603− (_,_,_,ph) <- createProcess $ (proc "selenium-server" [])
601+data Selenium = Selenium
602+ { _selenium_portNumber :: PortNumber
603+ , _selenium_stopServer :: IO ()
604+ }
605+
606+startSeleniumServer :: PortNumber -> IO (IO ())
607+startSeleniumServer port = do
608+ (_,_,_,ph) <- createProcess $ (proc "selenium-server" ["-port", show port])
604609 { std_in = NoStream
605610 , std_out = NoStream
606611 }
607612 return $ terminateProcess ph
608613
609−withSeleniumServer :: (IO () -> IO ()) -> IO ()
614+withSeleniumServer :: (Selenium -> IO ()) -> IO ()
610615withSeleniumServer f = do
611− stopServer <- startSeleniumServer
616+ let port = 4444 -- TODO port <- getFreePort
617+ stopServer <- startSeleniumServer port
612618 threadDelay $ 1000 * 1000 * 2 -- TODO poll or wait on a a signal to block on
613− f stopServer
619+ f $ Selenium
620+ { _selenium_portNumber = port
621+ , _selenium_stopServer = stopServer
622+ }
614623
615624assertAttr :: WD.Element -> Text -> Maybe Text -> WD ()
616625assertAttr e k v = liftIO . assertEqual "Incorrect attribute value" v =<< WD.attr e k