Skip to content

Instantly share code, notes, and snippets.

@otto-gebb
Created February 16, 2018 01:13
Show Gist options
  • Save otto-gebb/06579dc2cf37740512f431dfcc2150b5 to your computer and use it in GitHub Desktop.
Save otto-gebb/06579dc2cf37740512f431dfcc2150b5 to your computer and use it in GitHub Desktop.
namespace TestUtils
/// An unbounded pool of browsers.
module BrowserPool =
open System
open OpenQA.Selenium.Chrome
open System.Collections.Concurrent
let private pool = ConcurrentQueue<ChromeDriver>()
let private allCreated = ConcurrentBag<ChromeDriver>()
let private cleanup () = Seq.iter (fun d -> (d :> IDisposable).Dispose()) allCreated
AppDomain.CurrentDomain.DomainUnload.AddHandler (fun _ _ -> cleanup ())
let getBrowser () =
let b =
match pool.TryDequeue() with
| (true, existing) -> existing
| _ ->
let fresh = new ChromeDriver()
allCreated.Add(fresh)
// TODO: configure fresh.Manage().Timeouts()
fresh
b.Navigate().GoToUrl("take-from-config")
b
let releaseBrowser (b : ChromeDriver) =
b.ExecuteScript(
"""window.sessionStorage.clear();
window.localStorage.clear();""") |> ignore
b.Navigate().GoToUrl("about:blank")
pool.Enqueue(b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment