   `(doseq [h# (api/get-window-handles *server* *session*)]
      (with-window h#
        ~@body)))
+
+;;
+;; geometry
+;;
+
+(defn get-el-rect-el [el]
+  (api/get-element-rect *server* *session* el))
+
+(defn get-el-rect [term]
+  (with-el term el
+    (get-el-rect-el el)))
+
+(defmacro with-el-rect-el [el bind-form & body]
+  `(let [~bind-form (get-el-rect-el ~el)]
+     ~@body))
+
+(defmacro with-el-rect [term bind-form & body]
+  `(with-el ~term el#
+     (let [~bind-form (get-el-rect-el el#)]
+     ~@body)))
 
 ;;
 ;; css stuff

                (is (= border-collapse "collapse")))
              (fill-form "//form" {:text "sdfsdfsdfsdfs"})
              (fill-human input "I dunno why I do that.")
              ))
          (wait 2)
          (is 1))))))


;; todo: on exception return source code and screenshot
;; scenarios
;; multi-browser run in threads
;; process logs
;; todo fill keys
;; skip decorator
;; todo add local html test
;; custom HTML files for tests
;; js clear local storage
