This repository has been archived by the owner on Mar 3, 2020. It is now read-only.
/
node.rb
118 lines (96 loc) · 2.23 KB
/
node.rb
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
class Capybara::Driver::Webkit
class Node < Capybara::Driver::Node
NBSP = "\xC2\xA0"
NBSP.force_encoding("UTF-8") if NBSP.respond_to?(:force_encoding)
def text
invoke("text").gsub(NBSP, ' ').gsub(/\s+/u, ' ').strip
end
def [](name)
value = invoke("attribute", name)
if name == 'checked' || name == 'disabled'
value == 'true'
else
value
end
end
def value
if multiple_select?
self.find(".//option").select do |option|
option["selected"] == "selected"
end.map do |option|
option.value
end
else
invoke "value"
end
end
def set(value)
invoke "set", value
end
def select_option
invoke "selectOption"
end
def unselect_option
select = find("ancestor::select").first
if select.multiple_select?
invoke "unselectOption"
else
raise Capybara::UnselectNotAllowed
end
end
def click
invoke "click"
end
def drag_to(element)
invoke 'dragTo', element.native
end
def tag_name
invoke "tagName"
end
def visible?
invoke("visible") == "true"
end
def selected?
invoke("selected") == "true"
end
def checked?
self['checked']
end
def disabled?
self['disabled']
end
def path
raise Capybara::NotSupportedByDriverError
end
def trigger(event)
invoke "trigger", event
end
def find(xpath)
invoke("findWithin", xpath).split(',').map do |native|
self.class.new(driver, native)
end
end
def invoke(name, *args)
if allow_unattached_nodes? || attached?
browser.command "Node", name, native, *args
else
raise Capybara::Driver::Webkit::NodeNotAttachedError
end
end
def allow_unattached_nodes?
!automatic_reload?
end
def automatic_reload?
Capybara.respond_to?(:automatic_reload) && Capybara.automatic_reload
end
def attached?
browser.command("Node", "isAttached", native) == "true"
end
def browser
driver.browser
end
def multiple_select?
self.tag_name == "select" && self["multiple"] == "multiple"
end
end
end