rwebspec 3.1.4 → 4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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