anchor.diff:                  let sb = new System.Text.StringBuilder()
                   let elems = elements cssSelector
                   elems |> List.map (fun e -> sb.Append(String.Format("{0}\r\n", (textOf e)))) |> ignore
  -                failwith (String.Format("cant find {0} in list {1}\r\ngot: {2}", value, cssSelector, sb.ToString()));
  +                raise (CanopyValueNotInListException(sprintf "cant find %s in list %s\r\ngot: %s" value cssSelector (sb.ToString())))
   
   let ( *!= ) (cssSelector : string) value =
       try
           wait compareTimeout (fun _ -> ( let elems = elements cssSelector
                                           elems |> Seq.exists(fun element -> (textOf element) = value) = false))
       with
  -        | :? WebDriverTimeoutException -> failwith (String.Format("found {0} in list {1}, expected not to", value, cssSelector));
  +        | :? WebDriverTimeoutException -> raise (CanopyValueInListException(sprintf "found %s in list %s, expected not to" value cssSelector))
       
   let contains (value1 : string) (value2 : string) =
       if (value2.Contains(value1) <> true) then
  -        failwith (String.Format("contains check failed.  {0} does not contain {1}", value2, value1));
  +        raise (CanopyContainsFailedException(sprintf "contains check failed.  %s does not contain %s" value2 value1))
       ()
   
   let count cssSelector count =
  
positive.code:         wait elementTimeout (fun _ -> let elem = element cssSelector
                                        elem.Click()
                                        true)
      | _ -> failwith (String.Format("Can't click {0} because it is not a string or webelement", item.ToString()))
      
  let doubleClick item =
      let js = "var evt = document.createEvent('MouseEvents'); evt.initMouseEvent('dblclick',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null); arguments[0].dispatchEvent(evt);"
  
negative.code: type CanopyMoreThanOneElementFoundException(message) = inherit CanopyException(message)
  type CanopyEqualityFailedException(message) = inherit CanopyException(message)
  type CanopyNotEqualsFailedException(message) = inherit CanopyException(message)
  type CanopyValueNotInListException(message) = inherit CanopyException(message)
  type CanopyValueInListException(message) = inherit CanopyException(message)
  type CanopyContainsFailedException(message) = inherit CanopyException(message)
  type CanopyCountException(message) = inherit CanopyException(message)
  type CanopyDisplayedFailedException(message) = inherit CanopyException(message)
  type CanopyNotDisplayedFailedException(message) = inherit CanopyException(message)
  type CanopyNotStringOrElementException(message) = inherit CanopyException(message)
  type CanopyOnException(message) = inherit CanopyException(message)
  
  let mutable (browser : IWebDriver) = null;
  let mutable (failureMessage : string) = null
  