rwebspec 3.1.4 → 4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,86 @@
1
+ module RWebSpec
2
+ module ElementLocator
3
+
4
+ BUTTON_VALID_TYPES = %w[button reset submit image]
5
+ def button_elements
6
+ find_elements(:xpath, ".//button | .//input[#{attribute_expression :type => BUTTON_VALID_TYPES}]")
7
+ end
8
+
9
+ CHECK_BOX_TYPES = %w(checkbox)
10
+ def check_box_elements(how, what, opts = [])
11
+ find_elements(:xpath, ".//input[#{attribute_expression :type => CHECK_BOX_TYPES}]")
12
+ end
13
+
14
+ RADIO_TYPES = %w(radio)
15
+ def radio_elements(how, what, opts = [])
16
+ find_elements(:xpath, ".//input[#{attribute_expression :type => RADIO_TYPES}]")
17
+ end
18
+
19
+ def select_elements(how, what, opts = [])
20
+ find_elements(:xpath, ".//input[#{attribute_expression :type => RADIO_TYPES}]")
21
+ end
22
+
23
+ # TextField, TextArea
24
+ TEXT_FILED_TYPES = %w(text)
25
+ def text_field_elements
26
+ find_elements(:xpath, ".//input[#{attribute_expression :type => TEXT_FILED_TYPES}]")
27
+ end
28
+
29
+ def text_area_elements
30
+ find_elements(:xpath, ".//textarea")
31
+ end
32
+
33
+ FILE_FIELD_TYPES = %w(file)
34
+ def file_field_elements
35
+ find_elements(:xpath, ".//input[#{attribute_expression :type => FILE_FIELD_TYPES}]")
36
+ end
37
+
38
+ HIDDEN_TYPES = %w(hidden)
39
+ def hidden_elements
40
+ find_elements(:xpath, ".//input[#{attribute_expression :type => HIDDEN_TYPES}]")
41
+ end
42
+
43
+ #---
44
+ def find_by_tag(tag)
45
+ find_elements(:tag_name, tag)
46
+ end
47
+
48
+ def should_use_label_element?
49
+ @selector[:tag_name] != "option" rescue false
50
+ end
51
+
52
+ def equal_pair(key, value)
53
+ # we assume :label means a corresponding label element, not the attribute
54
+ if key == :label && should_use_label_element?
55
+ "@id=//label[normalize-space()='#{value}']/@for"
56
+ else
57
+ "#{lhs_for(key)}='#{value}'"
58
+ end
59
+ end
60
+
61
+ def lhs_for(key)
62
+ case key
63
+ when :text, 'text'
64
+ 'normalize-space()'
65
+ when :href
66
+ # TODO: change this behaviour?
67
+ 'normalize-space(@href)'
68
+ else
69
+ "@#{key.to_s.gsub("_", "-")}"
70
+ end
71
+ end
72
+
73
+
74
+ def attribute_expression(selectors)
75
+ selectors.map do |key, val|
76
+ if val.kind_of?(Array)
77
+ "(" + val.map { |v| equal_pair(key, v) }.join(" or ") + ")"
78
+ else
79
+ equal_pair(key, val)
80
+ end
81
+ end.join(" and ")
82
+ end
83
+
84
+ end
85
+
86
+ end