anchor.diff:          with
               | :? WebDriverTimeoutException -> raise (CanopyEqualityFailedException(sprintf "equality check failed.  expected: %s, got: %s" value !bestvalue))
   
  -    | _ -> raise (CanopyEqualityFailedException(sprintf "Can't check equality on %s because it is not a string or alert" (item.ToString())))
  +    | _ -> raise (CanopyNotStringOrElementException(sprintf "Can't check equality on %s because it is not a string or alert" (item.ToString())))
   
   let ( != ) cssSelector value =
       try
  
positive.code:                 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()));
  
  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));
      
  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));
      ()
  
  let count cssSelector count =
  
negative.code:         wait compareTimeout (fun _ -> ( let elems = elements cssSelector
                                          elems.Length = count))
      with
          | :? WebDriverTimeoutException -> raise (CanopyCountException(sprintf "count failed. expected: %i got: %i" count (elements cssSelector).Length));
  
  let private regexMatch pattern input = System.Text.RegularExpressions.Regex.Match(input, pattern).Success
  
  