Based on the api, I can see the following:
(defn wait-visible
"Waits until an element presents and is visible.
Arguments:
- `driver`: a driver instance;
- `q`: a query term (see `query`);
- `opt`: a map of options (see `wait-predicate`)."
[driver q & [opt]]
(let [message (format "Wait for %s element is visible" q)]
(wait-predicate #(visible? driver q)
(assoc opt :message message))))