-
Notifications
You must be signed in to change notification settings - Fork 4
/
driver.clj
85 lines (73 loc) · 2.96 KB
/
driver.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
(ns limo.driver
(:require [environ.core :refer [env]]
[clojure.java.io :as io]
[clojure.test :refer :all]
[clojure.tools.logging :as log]
[limo.java :refer [->capabilities set-logging-capability]]
[limo.api :as api :refer [to delete-all-cookies current-url implicit-wait]])
(:import org.openqa.selenium.remote.RemoteWebDriver
org.openqa.selenium.remote.CapabilityType
org.openqa.selenium.logging.LogEntries
org.openqa.selenium.logging.LogEntry
org.openqa.selenium.logging.LogType
org.openqa.selenium.logging.LoggingPreferences
org.openqa.selenium.WebDriver
org.openqa.selenium.chrome.ChromeDriver
org.openqa.selenium.firefox.FirefoxDriver
org.openqa.selenium.WebDriverException
org.openqa.selenium.Dimension
java.util.logging.Level
java.net.URL
java.util.Date))
(def normal-report clojure.test/report)
(defn console-logs [driver]
(map (fn [entry]
{:timestamp (.getTimestamp entry)
:level (.getLevel entry)
:message (.getMessage entry)})
(.. driver manage logs (get LogType/BROWSER))))
(defn create-screenshot-reporter [reporter-fn]
(fn [m]
(when (#{:fail :error} (:type m))
(let [filename (if (:file m)
(str (:file m) "/" "line-" (:line m) "/" (.getTime (Date.)))
(str "unknown-files/" (.getTime (Date.))))]
(log/error "Saved screenshot to:" filename)
(api/screenshot filename)))
(reporter-fn m)))
(defn create-console-log-reporter [reporter-fn drivers-fn]
(fn [m]
(when (#{:fail :error} (:type m))
(doseq [driver (drivers-fn)]
(doseq [entry (console-logs api/*driver*)]
(log/error "[Console]" entry))))
(reporter-fn m)))
(defn create-chrome
([] (create-chrome :chrome))
([capabilities] (ChromeDriver. (->capabilities capabilities))))
(defn create-chrome-headless []
(create-chrome :chrome/headless))
(defn create-firefox
([] (create-firefox :firefox))
([capabilities] (FirefoxDriver. (->capabilities capabilities))))
(defn create-remote
([desired-capabilities] (RemoteWebDriver. (->capabilities desired-capabilities)))
([url desired-capabilities] (RemoteWebDriver. (io/as-url url) (->capabilities desired-capabilities))))
(defn with-driver* [driver {:keys [quit?]} f]
(let [old-driver api/*driver*
result (atom nil)]
(api/set-driver! driver)
(try
(reset! result (f))
(finally
(when quit?
(.quit driver))
(api/set-driver! old-driver)))
@result))
(defmacro with-driver [driver options & body]
{:pre [(map? options)]}
`(with-driver* ~driver ~options (fn [] ~@body)))
(defn with-fresh-browser* [create-driver-fn f]
(with-driver* (create-driver-fn) {:quit? true} f))
(defmacro with-fresh-browser [create-driver-fn & body]
`(with-fresh-browser* ~create-driver-fn (fn [] ~@body)))