bauxite 0.6.18 → 0.6.19

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.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -21
  3. data/README.md +293 -293
  4. data/Rakefile +128 -128
  5. data/bin/bauxite +27 -27
  6. data/doc/Bauxite.html +6 -9
  7. data/doc/Bauxite/Action.html +298 -315
  8. data/doc/Bauxite/ActionModule.html +23 -26
  9. data/doc/Bauxite/Application.html +36 -38
  10. data/doc/Bauxite/Context.html +303 -303
  11. data/doc/Bauxite/Errors.html +6 -9
  12. data/doc/Bauxite/Errors/AssertionError.html +6 -9
  13. data/doc/Bauxite/Errors/FileNotFoundError.html +6 -9
  14. data/doc/Bauxite/Errors/FormatError.html +6 -9
  15. data/doc/Bauxite/Loggers.html +6 -9
  16. data/doc/Bauxite/Loggers/CompositeLogger.html +29 -32
  17. data/doc/Bauxite/Loggers/EchoLogger.html +10 -13
  18. data/doc/Bauxite/Loggers/FileLogger.html +25 -28
  19. data/doc/Bauxite/Loggers/HtmlLogger.html +99 -102
  20. data/doc/Bauxite/Loggers/NullLogger.html +16 -19
  21. data/doc/Bauxite/Loggers/ReportLogger.html +43 -46
  22. data/doc/Bauxite/Loggers/TerminalLogger.html +76 -79
  23. data/doc/Bauxite/Loggers/XtermLogger.html +28 -31
  24. data/doc/Bauxite/Parser.html +87 -89
  25. data/doc/Bauxite/ParserModule.html +19 -22
  26. data/doc/Bauxite/Selector.html +99 -105
  27. data/doc/Bauxite/SelectorModule.html +27 -30
  28. data/doc/README_md.html +117 -103
  29. data/doc/created.rid +58 -58
  30. data/doc/fonts.css +167 -167
  31. data/doc/fonts/Lato-Light.ttf +0 -0
  32. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  33. data/doc/fonts/Lato-Regular.ttf +0 -0
  34. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  35. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  36. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  37. data/doc/images/add.png +0 -0
  38. data/doc/images/arrow_up.png +0 -0
  39. data/doc/images/brick.png +0 -0
  40. data/doc/images/brick_link.png +0 -0
  41. data/doc/images/bug.png +0 -0
  42. data/doc/images/bullet_black.png +0 -0
  43. data/doc/images/bullet_toggle_minus.png +0 -0
  44. data/doc/images/bullet_toggle_plus.png +0 -0
  45. data/doc/images/date.png +0 -0
  46. data/doc/images/delete.png +0 -0
  47. data/doc/images/find.png +0 -0
  48. data/doc/images/loadingAnimation.gif +0 -0
  49. data/doc/images/macFFBgHack.png +0 -0
  50. data/doc/images/package.png +0 -0
  51. data/doc/images/page_green.png +0 -0
  52. data/doc/images/page_white_text.png +0 -0
  53. data/doc/images/page_white_width.png +0 -0
  54. data/doc/images/plugin.png +0 -0
  55. data/doc/images/ruby.png +0 -0
  56. data/doc/images/tag_blue.png +0 -0
  57. data/doc/images/tag_green.png +0 -0
  58. data/doc/images/transparent.png +0 -0
  59. data/doc/images/wrench.png +0 -0
  60. data/doc/images/wrench_orange.png +0 -0
  61. data/doc/images/zoom.png +0 -0
  62. data/doc/index.html +117 -103
  63. data/doc/js/darkfish.js +32 -11
  64. data/doc/js/jquery.js +0 -0
  65. data/doc/js/navigation.js +0 -0
  66. data/doc/js/search.js +0 -0
  67. data/doc/js/search_index.js +1 -1
  68. data/doc/js/searcher.js +0 -0
  69. data/doc/rdoc.css +580 -580
  70. data/doc/table_of_contents.html +69 -72
  71. data/lib/bauxite.rb +28 -28
  72. data/lib/bauxite/actions/alias.rb +51 -51
  73. data/lib/bauxite/actions/assert.rb +49 -49
  74. data/lib/bauxite/actions/asserth.rb +60 -60
  75. data/lib/bauxite/actions/assertm.rb +49 -49
  76. data/lib/bauxite/actions/assertv.rb +40 -40
  77. data/lib/bauxite/actions/assertw.rb +47 -47
  78. data/lib/bauxite/actions/break.rb +39 -39
  79. data/lib/bauxite/actions/capture.rb +61 -61
  80. data/lib/bauxite/actions/click.rb +36 -36
  81. data/lib/bauxite/actions/debug.rb +103 -103
  82. data/lib/bauxite/actions/doif.rb +43 -43
  83. data/lib/bauxite/actions/dounless.rb +43 -43
  84. data/lib/bauxite/actions/echo.rb +36 -36
  85. data/lib/bauxite/actions/exec.rb +46 -46
  86. data/lib/bauxite/actions/exit.rb +35 -35
  87. data/lib/bauxite/actions/failif.rb +52 -52
  88. data/lib/bauxite/actions/js.rb +41 -41
  89. data/lib/bauxite/actions/load.rb +49 -49
  90. data/lib/bauxite/actions/open.rb +35 -35
  91. data/lib/bauxite/actions/params.rb +40 -40
  92. data/lib/bauxite/actions/replace.rb +37 -37
  93. data/lib/bauxite/actions/reset.rb +38 -38
  94. data/lib/bauxite/actions/return.rb +68 -68
  95. data/lib/bauxite/actions/ruby.rb +58 -58
  96. data/lib/bauxite/actions/select.rb +48 -48
  97. data/lib/bauxite/actions/set.rb +39 -39
  98. data/lib/bauxite/actions/setif.rb +44 -44
  99. data/lib/bauxite/actions/source.rb +44 -44
  100. data/lib/bauxite/actions/store.rb +38 -38
  101. data/lib/bauxite/actions/submit.rb +37 -37
  102. data/lib/bauxite/actions/test.rb +67 -67
  103. data/lib/bauxite/actions/tryload.rb +71 -71
  104. data/lib/bauxite/actions/wait.rb +38 -38
  105. data/lib/bauxite/actions/write.rb +44 -44
  106. data/lib/bauxite/application.rb +349 -349
  107. data/lib/bauxite/core/action.rb +199 -199
  108. data/lib/bauxite/core/context.rb +791 -791
  109. data/lib/bauxite/core/errors.rb +41 -41
  110. data/lib/bauxite/core/logger.rb +169 -169
  111. data/lib/bauxite/core/parser.rb +85 -85
  112. data/lib/bauxite/core/selector.rb +152 -152
  113. data/lib/bauxite/loggers/composite.rb +91 -91
  114. data/lib/bauxite/loggers/echo.rb +36 -36
  115. data/lib/bauxite/loggers/file.rb +68 -68
  116. data/lib/bauxite/loggers/html.rb +154 -154
  117. data/lib/bauxite/loggers/terminal.rb +134 -134
  118. data/lib/bauxite/loggers/xterm.rb +101 -101
  119. data/lib/bauxite/parsers/csv.rb +43 -43
  120. data/lib/bauxite/parsers/default.rb +42 -42
  121. data/lib/bauxite/parsers/html.rb +79 -79
  122. data/lib/bauxite/selectors/attr.rb +39 -39
  123. data/lib/bauxite/selectors/frame.rb +60 -60
  124. data/lib/bauxite/selectors/json.rb +88 -88
  125. data/lib/bauxite/selectors/sid.rb +38 -38
  126. data/lib/bauxite/selectors/smart.rb +80 -80
  127. data/lib/bauxite/selectors/window.rb +77 -77
  128. data/test/alert.bxt +3 -3
  129. data/test/alert/page.html +4 -4
  130. data/test/alias.bxt +9 -9
  131. data/test/asserth.bxt +2 -2
  132. data/test/assertv.bxt +1 -1
  133. data/test/assertw.bxt +7 -7
  134. data/test/broken.bxt.manual +0 -0
  135. data/test/bug_load_path.bxt.manual +0 -0
  136. data/test/bug_load_path/broken.bxt.manual +0 -0
  137. data/test/bug_load_path/test.bxt +0 -0
  138. data/test/capture.bxt.manual +20 -20
  139. data/test/capture/my_test.bxt +1 -1
  140. data/test/capture/page.html +6 -6
  141. data/test/capture_on_error.bxt.manual +3 -3
  142. data/test/capture_on_error/my_test.bxt +1 -1
  143. data/test/capture_on_error/page.html +2 -2
  144. data/test/debug.bxt.manual +0 -0
  145. data/test/default_selector.bxt.manual +7 -7
  146. data/test/default_selector/page.html +10 -10
  147. data/test/default_selector_var.bxt +1 -1
  148. data/test/delay.bxt +2 -2
  149. data/test/delay/page.html +4 -4
  150. data/test/doif.bxt +6 -6
  151. data/test/dounless.bxt +6 -6
  152. data/test/exec.bxt +6 -6
  153. data/test/exit.bxt +3 -3
  154. data/test/exit/test.bxt +3 -3
  155. data/test/extension.bxt.manual +4 -4
  156. data/test/extension/custom.rb +12 -12
  157. data/test/extension/page.html +4 -4
  158. data/test/failif.bxt +7 -7
  159. data/test/failif/page.html +5 -5
  160. data/test/format.bxt +17 -17
  161. data/test/format/page.html +6 -6
  162. data/test/frame.bxt +6 -6
  163. data/test/frame/child_frame.html +6 -6
  164. data/test/frame/grandchild_frame.html +4 -4
  165. data/test/frame/page.html +4 -4
  166. data/test/js.bxt +4 -4
  167. data/test/json.bxt +19 -19
  168. data/test/json/array.json +3 -3
  169. data/test/json/object.json +13 -13
  170. data/test/load.bxt +18 -18
  171. data/test/load/child.bxt +12 -12
  172. data/test/parsers.bxt +1 -1
  173. data/test/parsers.csv +7 -7
  174. data/test/parsers.html +32 -32
  175. data/test/parsers/page.html +6 -6
  176. data/test/return.bxt +1 -1
  177. data/test/return/f1.bxt +1 -1
  178. data/test/return/f2.bxt +1 -1
  179. data/test/return/f3.bxt +1 -1
  180. data/test/return/f4.bxt +2 -2
  181. data/test/ruby.bxt +1 -1
  182. data/test/ruby/custom.rb +5 -5
  183. data/test/select.bxt +9 -9
  184. data/test/select/page.html +8 -8
  185. data/test/selectors.bxt +7 -7
  186. data/test/selectors/page.html +6 -6
  187. data/test/set_builtin.bxt +5 -0
  188. data/test/set_builtin/page.html +5 -0
  189. data/test/setif.bxt +3 -3
  190. data/test/smart_selector.bxt +17 -17
  191. data/test/smart_selector/page.html +17 -17
  192. data/test/stdin.bxt +0 -0
  193. data/test/submit.bxt +4 -4
  194. data/test/submit/page.html +6 -6
  195. data/test/submit/page2.html +4 -4
  196. data/test/test.bxt.manual +6 -6
  197. data/test/test/test1.bxt +2 -2
  198. data/test/test/test2.bxt +3 -3
  199. data/test/test/test3.bxt +2 -2
  200. data/test/test/test4.bxt +1 -1
  201. data/test/test/test5.bxt +1 -1
  202. data/test/window.bxt +14 -14
  203. data/test/window/page.html +5 -5
  204. data/test/window/popup.html +4 -4
  205. metadata +5 -3
@@ -1,153 +1,153 @@
1
- #--
2
- # Copyright (c) 2014 Patricio Zavolinsky
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- # SOFTWARE.
21
- #++
22
-
23
- module Bauxite
24
- # Selector common state and behavior.
25
- module SelectorModule
26
-
27
- # Constructs a new test selector instance.
28
- def initialize(ctx, default_selector)
29
- @ctx = ctx
30
- @default = default_selector
31
- end
32
-
33
- # Searches for elements using the specified selector string.
34
- #
35
- # For more information see Context#find.
36
- #
37
- # Selectors calling this method should forward their block as well.
38
- #
39
- # For example:
40
- # # === selectors/example.rb ======= #
41
- # class Selector
42
- # # :category: Selector Methods
43
- # def example(arg, &block)
44
- # find(arg, &block)
45
- # end
46
- # end
47
- # # === end selectors/example.rb === #
48
- #
49
- def find(selector, &block)
50
- data = selector.split('=', 2)
51
- type = data[0]
52
- arg = data[-1]
53
- unless data.length == 2 and type =~ /^[a-z_]+$/i
54
- type = @default
55
- arg = selector
56
- end
57
- raise ArgumentError, "Invalid selector type '#{type}'" unless Context::selectors.include? type
58
-
59
- custom_selectors = Context::selectors(false)
60
- return send(type , arg, &block) if custom_selectors.include? type
61
- return send(type+'_selector', arg, &block) if custom_selectors.include? type+'_selector'
62
- selenium_find(type, arg, &block)
63
- end
64
-
65
- protected
66
- # Searches for elements using standard Selenium selectors.
67
- #
68
- # Selectors calling this method should forward their block as well.
69
- #
70
- # # === selectors/data.rb ======= #
71
- # class Selector
72
- # # :category: Selector Methods
73
- # def data(arg, &block)
74
- # # selector code goes here, for example:
75
- # selenium_find(:css, "[data='#{arg}']", &block)
76
- # end
77
- # end
78
- # # === end selectors/data.rb === #
79
- #
80
- def selenium_find(type, selector)
81
- element = @ctx.driver.find_element(type, selector)
82
- yield element if block_given?
83
- element
84
- end
85
- end
86
-
87
- # Selector class.
88
- #
89
- # Selectors represent different strategies for finding elements. Selenium
90
- # provides a list of standard selectors (e.g. by id, by css expression, etc).
91
- #
92
- # Additional selectors can be specified by defining custom methods in the
93
- # Selector class.
94
- #
95
- # Each custom selector is defined in a separate file in the 'selectors/'
96
- # directory.
97
- # The name of the file must match the name of the selector. These files should
98
- # avoid adding public methods other than the selector method itself.
99
- # Also, no +attr_accessors+ should be added.
100
- #
101
- # Selector methods can use the +ctx+ attribute to refer to the current test
102
- # Context. The protected method #selenium_find can also be used to locate elements
103
- # using standard Selenium selectors.
104
- #
105
- # Selector methods should always take a block and forward that block to a call
106
- # to either #find or #selenium_find.
107
- #
108
- # For example (new selector template):
109
- # # === selectors/data.rb ======= #
110
- # class Selector
111
- # # :category: Selector Methods
112
- # def data(arg, &block)
113
- # # selector code goes here, for example:
114
- # selenium_find(:css, "[data='#{arg}']", &block)
115
- # end
116
- # end
117
- # # === end selectors/data.rb === #
118
- #
119
- # Context::selectors.include? 'data' # => true
120
- #
121
- # To avoid name clashing with Ruby reserved words, the '_selector' suffix can
122
- # be included in the selector method name (this suffix will not be considered
123
- # part of the selector name).
124
- #
125
- # For example (_selector suffix):
126
- # # === selectors/end.rb ======= #
127
- # class Selector
128
- # # :category: Selector Methods
129
- # def end_selector
130
- # # do something
131
- # end
132
- # end
133
- # # === end selector/end.rb === #
134
- #
135
- # Context::selectors.include? 'end' # => true
136
- #
137
- # ---
138
- #
139
- # === Standard Selenium Selectors
140
- #
141
- # [id=+targetValue+] {Locate elements whose +id+ attribute matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-id]
142
- # [name=+targetValue+] {Locate elements whose +name+ attribute matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-name]
143
- # [css=+cssSelectorSyntax+] {Locate elements using CSS selector syntax.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-css]
144
- # [partial_link_text=+textFragment+] {Locate A elements whose text includes +textFragment+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-partial-link-text]
145
- # [class=+className+ and class_name=+className+] {Locate elements whose +class+ attribute matches +className+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-class-name]
146
- # [link=+exactText+ and link_text=+exactText+] {Locate A elements whose text is exactly +exactText+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-link-text]
147
- # [tag_name=+targetValue+] {Locate elements whose tag name matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-tag-name]
148
- # [xpath=+xpathExpression+] {Locate elements using XPATH expressions.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-xpath]
149
- #
150
- class Selector
151
- include Bauxite::SelectorModule
152
- end
1
+ #--
2
+ # Copyright (c) 2014 Patricio Zavolinsky
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #++
22
+
23
+ module Bauxite
24
+ # Selector common state and behavior.
25
+ module SelectorModule
26
+
27
+ # Constructs a new test selector instance.
28
+ def initialize(ctx, default_selector)
29
+ @ctx = ctx
30
+ @default = default_selector
31
+ end
32
+
33
+ # Searches for elements using the specified selector string.
34
+ #
35
+ # For more information see Context#find.
36
+ #
37
+ # Selectors calling this method should forward their block as well.
38
+ #
39
+ # For example:
40
+ # # === selectors/example.rb ======= #
41
+ # class Selector
42
+ # # :category: Selector Methods
43
+ # def example(arg, &block)
44
+ # find(arg, &block)
45
+ # end
46
+ # end
47
+ # # === end selectors/example.rb === #
48
+ #
49
+ def find(selector, &block)
50
+ data = selector.split('=', 2)
51
+ type = data[0]
52
+ arg = data[-1]
53
+ unless data.length == 2 and type =~ /^[a-z_]+$/i
54
+ type = @default
55
+ arg = selector
56
+ end
57
+ raise ArgumentError, "Invalid selector type '#{type}'" unless Context::selectors.include? type
58
+
59
+ custom_selectors = Context::selectors(false)
60
+ return send(type , arg, &block) if custom_selectors.include? type
61
+ return send(type+'_selector', arg, &block) if custom_selectors.include? type+'_selector'
62
+ selenium_find(type, arg, &block)
63
+ end
64
+
65
+ protected
66
+ # Searches for elements using standard Selenium selectors.
67
+ #
68
+ # Selectors calling this method should forward their block as well.
69
+ #
70
+ # # === selectors/data.rb ======= #
71
+ # class Selector
72
+ # # :category: Selector Methods
73
+ # def data(arg, &block)
74
+ # # selector code goes here, for example:
75
+ # selenium_find(:css, "[data='#{arg}']", &block)
76
+ # end
77
+ # end
78
+ # # === end selectors/data.rb === #
79
+ #
80
+ def selenium_find(type, selector)
81
+ element = @ctx.driver.find_element(type, selector)
82
+ yield element if block_given?
83
+ element
84
+ end
85
+ end
86
+
87
+ # Selector class.
88
+ #
89
+ # Selectors represent different strategies for finding elements. Selenium
90
+ # provides a list of standard selectors (e.g. by id, by css expression, etc).
91
+ #
92
+ # Additional selectors can be specified by defining custom methods in the
93
+ # Selector class.
94
+ #
95
+ # Each custom selector is defined in a separate file in the 'selectors/'
96
+ # directory.
97
+ # The name of the file must match the name of the selector. These files should
98
+ # avoid adding public methods other than the selector method itself.
99
+ # Also, no +attr_accessors+ should be added.
100
+ #
101
+ # Selector methods can use the +ctx+ attribute to refer to the current test
102
+ # Context. The protected method #selenium_find can also be used to locate elements
103
+ # using standard Selenium selectors.
104
+ #
105
+ # Selector methods should always take a block and forward that block to a call
106
+ # to either #find or #selenium_find.
107
+ #
108
+ # For example (new selector template):
109
+ # # === selectors/data.rb ======= #
110
+ # class Selector
111
+ # # :category: Selector Methods
112
+ # def data(arg, &block)
113
+ # # selector code goes here, for example:
114
+ # selenium_find(:css, "[data='#{arg}']", &block)
115
+ # end
116
+ # end
117
+ # # === end selectors/data.rb === #
118
+ #
119
+ # Context::selectors.include? 'data' # => true
120
+ #
121
+ # To avoid name clashing with Ruby reserved words, the '_selector' suffix can
122
+ # be included in the selector method name (this suffix will not be considered
123
+ # part of the selector name).
124
+ #
125
+ # For example (_selector suffix):
126
+ # # === selectors/end.rb ======= #
127
+ # class Selector
128
+ # # :category: Selector Methods
129
+ # def end_selector
130
+ # # do something
131
+ # end
132
+ # end
133
+ # # === end selector/end.rb === #
134
+ #
135
+ # Context::selectors.include? 'end' # => true
136
+ #
137
+ # ---
138
+ #
139
+ # === Standard Selenium Selectors
140
+ #
141
+ # [id=+targetValue+] {Locate elements whose +id+ attribute matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-id]
142
+ # [name=+targetValue+] {Locate elements whose +name+ attribute matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-name]
143
+ # [css=+cssSelectorSyntax+] {Locate elements using CSS selector syntax.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-css]
144
+ # [partial_link_text=+textFragment+] {Locate A elements whose text includes +textFragment+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-partial-link-text]
145
+ # [class=+className+ and class_name=+className+] {Locate elements whose +class+ attribute matches +className+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-class-name]
146
+ # [link=+exactText+ and link_text=+exactText+] {Locate A elements whose text is exactly +exactText+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-link-text]
147
+ # [tag_name=+targetValue+] {Locate elements whose tag name matches +targetValue+.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-tag-name]
148
+ # [xpath=+xpathExpression+] {Locate elements using XPATH expressions.}[http://docs.seleniumhq.org/docs/03_webdriver.jsp#by-xpath]
149
+ #
150
+ class Selector
151
+ include Bauxite::SelectorModule
152
+ end
153
153
  end
@@ -1,92 +1,92 @@
1
- #--
2
- # Copyright (c) 2014 Patricio Zavolinsky
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- # SOFTWARE.
21
- #++
22
-
23
- # Composite logger.
24
- #
25
- # This composite logger forwards logging calls to each of its children.
26
- #
27
- # Composite logger options include:
28
- # [<tt>loggers</tt>] A comma-separated list of logger names.
29
- #
30
- class Bauxite::Loggers::CompositeLogger
31
-
32
- # Constructs a new composite logger instance.
33
- def initialize(options, loggers = nil)
34
- unless loggers
35
- unless options[:loggers]
36
- raise ArgumentError, "Missing required logger option 'loggers'. "+
37
- "The value of this option is a comma-separated list of valid loggers. "+
38
- "For example loggers=xterm,file."
39
- end
40
- loggers = options[:loggers].split(',')
41
- end
42
-
43
- @loggers = loggers.map do |l|
44
- Bauxite::Context::load_logger(l, options)
45
- end
46
- end
47
-
48
- # Pretty prints action information and status.
49
- #
50
- # This implementation only yileds in the first logger.
51
- #
52
- # Additional loggers are called after the block completed.
53
- #
54
- def log_cmd(action, &block)
55
- _log_cmd_block(@loggers, action, &block)
56
- end
57
-
58
- # Returns a colorized debug prompt.
59
- #
60
- # This implementation returns the debug_prompt of the first logger.
61
- #
62
- def debug_prompt
63
- @loggers[0].debug_prompt
64
- end
65
-
66
- # Updates action progress.
67
- def progress(value)
68
- @loggers.each { |l| l.progress(value) }
69
- end
70
-
71
- # Prints the specified string.
72
- #
73
- # See Bauxite::Loggers::NullLogger#print
74
- #
75
- def log(s, type = :info)
76
- @loggers.each { |l| l.log(s, type) }
77
- end
78
-
79
- # Completes the log execution.
80
- #
81
- def finalize(ctx)
82
- @loggers.each { |l| l.finalize(ctx) }
83
- end
84
-
85
- private
86
- def _log_cmd_block(loggers, action, &block)
87
- return yield if loggers.size == 0
88
- return loggers[0].log_cmd(action, &block) if loggers.size == 1
89
- loggers[0].log_cmd(action) { _log_cmd_block(loggers[1..-1], action, &block) }
90
- end
91
-
1
+ #--
2
+ # Copyright (c) 2014 Patricio Zavolinsky
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #++
22
+
23
+ # Composite logger.
24
+ #
25
+ # This composite logger forwards logging calls to each of its children.
26
+ #
27
+ # Composite logger options include:
28
+ # [<tt>loggers</tt>] A comma-separated list of logger names.
29
+ #
30
+ class Bauxite::Loggers::CompositeLogger
31
+
32
+ # Constructs a new composite logger instance.
33
+ def initialize(options, loggers = nil)
34
+ unless loggers
35
+ unless options[:loggers]
36
+ raise ArgumentError, "Missing required logger option 'loggers'. "+
37
+ "The value of this option is a comma-separated list of valid loggers. "+
38
+ "For example loggers=xterm,file."
39
+ end
40
+ loggers = options[:loggers].split(',')
41
+ end
42
+
43
+ @loggers = loggers.map do |l|
44
+ Bauxite::Context::load_logger(l, options)
45
+ end
46
+ end
47
+
48
+ # Pretty prints action information and status.
49
+ #
50
+ # This implementation only yileds in the first logger.
51
+ #
52
+ # Additional loggers are called after the block completed.
53
+ #
54
+ def log_cmd(action, &block)
55
+ _log_cmd_block(@loggers, action, &block)
56
+ end
57
+
58
+ # Returns a colorized debug prompt.
59
+ #
60
+ # This implementation returns the debug_prompt of the first logger.
61
+ #
62
+ def debug_prompt
63
+ @loggers[0].debug_prompt
64
+ end
65
+
66
+ # Updates action progress.
67
+ def progress(value)
68
+ @loggers.each { |l| l.progress(value) }
69
+ end
70
+
71
+ # Prints the specified string.
72
+ #
73
+ # See Bauxite::Loggers::NullLogger#print
74
+ #
75
+ def log(s, type = :info)
76
+ @loggers.each { |l| l.log(s, type) }
77
+ end
78
+
79
+ # Completes the log execution.
80
+ #
81
+ def finalize(ctx)
82
+ @loggers.each { |l| l.finalize(ctx) }
83
+ end
84
+
85
+ private
86
+ def _log_cmd_block(loggers, action, &block)
87
+ return yield if loggers.size == 0
88
+ return loggers[0].log_cmd(action, &block) if loggers.size == 1
89
+ loggers[0].log_cmd(action) { _log_cmd_block(loggers[1..-1], action, &block) }
90
+ end
91
+
92
92
  end