forked from angel-popov/cl-selenium-webdriver
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathutils.lisp
73 lines (59 loc) · 2.23 KB
/
utils.lisp
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
(in-package :webdriver-client-utils)
(defparameter *timeout* 30
"Default timeout value to use in selenium-utils functions.")
(defparameter *default-element-func*
#'active-element
"Function used to get the 'default element' by selenium-utils functions.
It is ACTIVE-ELEMENT function by default.")
(defun find-elem (selector &key (by :css-selector))
"Find element by SELECTOR. Returns NIL if the element is not found."
(first (find-elements selector :by by)))
(defun wait-for (selector &key (timeout *timeout*))
"Wait for an element that matches SELECTOR to appear on the screen.
TIMEOUT indicates how much time to wait (default is *TIMEOUT*)."
(loop
for i from 0
for elem = (find-elem selector)
until elem
if (= i (* 2 timeout))
do (error "Element ~a didn't appear" selector)
else
do (sleep 0.5)
finally (return elem)))
(defun get-cookie (cookie name)
"Get value of COOKIE at NAME."
(assoc-value (find name
cookie
:test #'equal
:key (rcurry #'assoc-value :name))
:value))
(defun elem (&optional selector)
"If SELECTOR is given, wait for an element that matches the selector to appear.
Otherwise, call *DEFAULT-ELEMENT-FUNC* (the active element is returned by default)."
(if selector
(wait-for selector)
(funcall *default-element-func*)))
(defun attr (name &optional selector)
"Get acttive element attribute."
(element-attribute (elem selector) name))
(defun id (&optional selector)
"Get active element id."
(attr "id" selector))
(defun classname (&optional selector)
"Get active element classname."
(attr "className" selector))
(defun classlist (&optional selector)
"Get active element class list."
(split-sequence:split-sequence #\Space (classname selector)))
(defun text (&optional selector)
"Get active element's text."
(element-text (elem selector)))
(defun send-key (key &optional selector)
"Send a key to active element."
(element-send-keys (elem selector) (key key)))
(defun send-keys (keys &optional selector)
"Send keys to active element."
(element-send-keys (elem selector) keys))
(defun click (&optional selector)
"Click on active element."
(element-click (elem selector)))