anchor.diff:  /// Long press a key with meta state
   let longPressMeta key = driver.LongPressKeyCode(key, AndroidKeyMetastate.Meta_Shift_On)
   
  -/// Clicks the first element that is found with the selector
  +/// Clicks the first element that is found with the selector.
  +let clickDirectly selector =
  +    try
  +        wait configuration.interactionTimeout (fun _ ->
  +            try 
  +                let element = find selector
  +                if element.GetAttribute("clickable") <> "true" then
  +                    raise <| CanopyException(sprintf "Failed to click %A, because it is not clickable." selector)
  +                element.Click()
  +                true
  +            with 
  +            | :? CanopyElementNotFoundException -> raise <| CanopyException(sprintf "Failed to click %A, because it could not be found" selector)
  +            | _ -> false)
  +    with
  +    | :? CanopyException -> reraise()
  +    | ex -> failwithf "Failed to click: %A%sInner Message: %A" selector System.Environment.NewLine ex
  +
  +/// Gets the parent of the current element.
  +let tryGetParent (element:IWebElement) =
  +    try
  +        Some(driver.ExecuteScript("return arguments[0].parentNode;", element) :?> IWebElement)
  +    with
  +    | _ -> None
  +
  +/// Clicks the first element that is found with the selector.
  +/// If the element is not clickable itself, this function recursivly tries to click the parent until it finds a clickable element.
   let click selector =
       try
           wait configuration.interactionTimeout (fun _ ->
               try 
  -                (find selector).Click()
  +                let element = find selector
  +                let rec click (current:IWebElement) =
  +                    if current.GetAttribute("clickable") = "true" then
  +                        current.Click()
  +                    else
  +                        match tryGetParent current with
  +                        | None -> raise <| CanopyException(sprintf "Failed to click %A, because the element and all it's ancestore elements are not clickable." selector)
  +                        | Some parent -> click parent
  +
  +                click element
                   true
               with 
  -            | :? CanopyElementNotFoundException -> raise <| CanopyException(sprintf "Failed to click: %A because it could not be found" selector)
  -            | _ -> false)
  -    with
  -    | :? CanopyException -> reraise()
  -    | ex -> failwithf "Failed to click: %A%sInner Message: %A" selector System.Environment.NewLine ex
  +            | :? CanopyElementNotFoundException -> raise <| CanopyException(sprintf "Failed to click %A, because it could not be found." selector)
  +            | _ -> false)
  +    with
  +    | :? CanopyException -> reraise()
  +    | ex -> failwithf "Failed to click %A%sInner Message: %A" selector System.Environment.NewLine ex
   
   
   /// Clicks the Android back button.
  
positive.code:             try 
                  (find selector).Displayed
              with 
              | :? CanopyElementNotFoundException -> raise <| CanopyException(sprintf "Displayed check for : %A failed because it could not be found" selector)
              | _ -> false)
      with
      | :? CanopyException -> reraise()
  
negative.code:             try 
                  (find selector).Displayed = false
              with 
              | :? CanopyElementNotFoundException -> raise <| CanopyException(sprintf "Not displayed check for %A failed because it could not be found" selector)
              | _ -> false)
      with
      | :? CanopyException -> reraise()
  