   (with-http :post
     [:session *session* :window]
     {:handle handle} _))
-
-(defmulti get-window-handle browser-dispatch)
-
-(defmethod get-window-handle :firefox []
-  (with-http-get [:session *session* :window] resp
-    (-> resp :value)))
-
-(defmethods get-window-handle [:chrome :phantom] []
-  (with-http-get [:session *session* :window_handle] resp
-    (:value resp)))
-
-(defmacro with-current-handle [bind & body]
-  `(let [~bind (get-window-handle)]
-     ~@body))
 
 (defmulti window-handles browser-dispatch)
 

    [:session *session* :element]
    {:using *locator* :value q}
    resp
    (-> resp first second)))

(defmethods get-el [:chrome :phantom] [q]
  (with-http

    [:session *session* :element]
    {:using *locator* :value q}
    resp
    (-> resp :value :ELEMENT)))

(defmacro with-el [q bind & body]
  `(let [~bind (get-el ~q)]
     ~@body))

(defmulti get-el-from browser-dispatch)

(defmethods get-el-from [:chrome :phantom] [el-parent q]
  (with-http :post
    [:session *session* :element el-parent :element]
    {:using *locator* :value q}
    resp
    (-> resp :value :ELEMENT)))

(defmethod get-el-from :firefox [el-parent q]
  (with-http :post
    [:session *session* :element el-parent :element]
    {:using *locator* :value q}
    resp
    (-> resp :value first second)))

(defmulti get-els-from browser-dispatch)

(defmethods get-els-from [:chrome :phantom] [el-parent q]
  (with-http :post
    [:session *session* :element el-parent :elements]
    {:using *locator* :value q}
    resp
    (->> resp :value (mapv :ELEMENT))))

(defmethod get-els-from :firefox [el-parent q]
  (with-http :post
    [:session *session* :element el-parent :elements]
    {:using *locator* :value q}
    resp
    (->> resp :value (mapv (comp second first)))))

(defmacro with-el-from [el-parent q bind & body]
  `(let [~bind (get-el-from ~el-parent ~q)]
     ~@body))

(defmacro with-els-from [el-parent q bind & body]
  `(doseq [~bind (get-els-from ~el-parent ~q)]
     ~@body))

(defn go [url]
