page_object 1.1.1

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 (272) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rspec +2 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +7 -0
  7. data/ChangeLog +809 -0
  8. data/Gemfile +14 -0
  9. data/Guardfile +20 -0
  10. data/LICENSE +20 -0
  11. data/README.md +111 -0
  12. data/Rakefile +35 -0
  13. data/cucumber.yml +10 -0
  14. data/features/area.feature +35 -0
  15. data/features/async.feature +30 -0
  16. data/features/audio.feature +68 -0
  17. data/features/bold.feature +21 -0
  18. data/features/button.feature +98 -0
  19. data/features/canvas.feature +37 -0
  20. data/features/check_box.feature +55 -0
  21. data/features/div.feature +45 -0
  22. data/features/element.feature +322 -0
  23. data/features/file_field.feature +40 -0
  24. data/features/form.feature +43 -0
  25. data/features/frames.feature +75 -0
  26. data/features/generic_elements.feature +29 -0
  27. data/features/gxt_table_extension.feature +24 -0
  28. data/features/headings.feature +97 -0
  29. data/features/hidden_field.feature +45 -0
  30. data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
  31. data/features/html/04-Death_Becomes_Fur.oga +0 -0
  32. data/features/html/async.html +36 -0
  33. data/features/html/double_click.html +13 -0
  34. data/features/html/failure.html +8 -0
  35. data/features/html/frame_1.html +18 -0
  36. data/features/html/frame_2.html +16 -0
  37. data/features/html/frame_3.html +14 -0
  38. data/features/html/frames.html +12 -0
  39. data/features/html/hover.html +12 -0
  40. data/features/html/iframes.html +12 -0
  41. data/features/html/images/circle.png +0 -0
  42. data/features/html/images/img_pulpit.jpg +0 -0
  43. data/features/html/images/submit.gif +0 -0
  44. data/features/html/indexed_property.html +55 -0
  45. data/features/html/modal.html +17 -0
  46. data/features/html/modal_1.html +38 -0
  47. data/features/html/modal_2.html +27 -0
  48. data/features/html/movie.mp4 +0 -0
  49. data/features/html/movie.ogg +0 -0
  50. data/features/html/multi_elements.html +144 -0
  51. data/features/html/nested_elements.html +77 -0
  52. data/features/html/nested_frame_1.html +1 -0
  53. data/features/html/nested_frame_2.html +11 -0
  54. data/features/html/nested_frame_3.html +14 -0
  55. data/features/html/nested_frames.html +10 -0
  56. data/features/html/planets.gif +0 -0
  57. data/features/html/static_elements.html +207 -0
  58. data/features/html/success.html +8 -0
  59. data/features/html/sun.gif +0 -0
  60. data/features/html/sun.html +7 -0
  61. data/features/image.feature +50 -0
  62. data/features/indexed_property.feature +117 -0
  63. data/features/javascript.feature +28 -0
  64. data/features/label.feature +46 -0
  65. data/features/link.feature +52 -0
  66. data/features/list_item.feature +36 -0
  67. data/features/modal_dialog.feature +15 -0
  68. data/features/multi_elements.feature +492 -0
  69. data/features/nested_elements.feature +117 -0
  70. data/features/ordered_list.feature +56 -0
  71. data/features/page_level_actions.feature +90 -0
  72. data/features/paragraph.feature +35 -0
  73. data/features/radio_button.feature +58 -0
  74. data/features/radio_button_group.feature +29 -0
  75. data/features/sample-app/public/jquery-1.3.2.js +4376 -0
  76. data/features/sample-app/public/jquery.html +30 -0
  77. data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
  78. data/features/sample-app/public/prototype.html +35 -0
  79. data/features/sample-app/sample_app.rb +35 -0
  80. data/features/section.feature +132 -0
  81. data/features/select_list.feature +86 -0
  82. data/features/span.feature +37 -0
  83. data/features/step_definitions/accessor_steps.rb +64 -0
  84. data/features/step_definitions/area_steps.rb +19 -0
  85. data/features/step_definitions/async_steps.rb +83 -0
  86. data/features/step_definitions/audio_steps.rb +27 -0
  87. data/features/step_definitions/bold_steps.rb +12 -0
  88. data/features/step_definitions/button_steps.rb +48 -0
  89. data/features/step_definitions/canvas_steps.rb +15 -0
  90. data/features/step_definitions/check_box_steps.rb +35 -0
  91. data/features/step_definitions/div_steps.rb +19 -0
  92. data/features/step_definitions/element_steps.rb +266 -0
  93. data/features/step_definitions/file_field_steps.rb +19 -0
  94. data/features/step_definitions/form_steps.rb +19 -0
  95. data/features/step_definitions/frames_steps.rb +159 -0
  96. data/features/step_definitions/generic_element_steps.rb +31 -0
  97. data/features/step_definitions/gxt_table_steps.rb +58 -0
  98. data/features/step_definitions/headings_steps.rb +12 -0
  99. data/features/step_definitions/hidden_field_steps.rb +27 -0
  100. data/features/step_definitions/image_steps.rb +27 -0
  101. data/features/step_definitions/indexed_property_steps.rb +163 -0
  102. data/features/step_definitions/javascript_steps.rb +53 -0
  103. data/features/step_definitions/label_steps.rb +19 -0
  104. data/features/step_definitions/link_steps.rb +40 -0
  105. data/features/step_definitions/list_item_steps.rb +19 -0
  106. data/features/step_definitions/modal_dialog_steps.rb +62 -0
  107. data/features/step_definitions/multi_elements_steps.rb +541 -0
  108. data/features/step_definitions/nested_elements_steps.rb +212 -0
  109. data/features/step_definitions/ordered_list_steps.rb +23 -0
  110. data/features/step_definitions/page_level_actions_steps.rb +135 -0
  111. data/features/step_definitions/page_traversal_steps.rb +4 -0
  112. data/features/step_definitions/paragraph_steps.rb +28 -0
  113. data/features/step_definitions/radio_button_group_steps.rb +36 -0
  114. data/features/step_definitions/radio_button_steps.rb +27 -0
  115. data/features/step_definitions/section_steps.rb +268 -0
  116. data/features/step_definitions/select_list_steps.rb +65 -0
  117. data/features/step_definitions/span_steps.rb +19 -0
  118. data/features/step_definitions/table_cell_steps.rb +15 -0
  119. data/features/step_definitions/table_row_steps.rb +23 -0
  120. data/features/step_definitions/table_steps.rb +70 -0
  121. data/features/step_definitions/text_area_steps.rb +35 -0
  122. data/features/step_definitions/text_field_steps.rb +35 -0
  123. data/features/step_definitions/unordered_list_steps.rb +23 -0
  124. data/features/step_definitions/video_steps.rb +45 -0
  125. data/features/support/ajax_text_environment.rb +26 -0
  126. data/features/support/env.rb +8 -0
  127. data/features/support/hooks.rb +8 -0
  128. data/features/support/page.rb +382 -0
  129. data/features/support/persistent_browser.rb +70 -0
  130. data/features/support/targets/firefox14_osx.rb +6 -0
  131. data/features/support/targets/firefox14_windows7.rb +6 -0
  132. data/features/support/url_helper.rb +57 -0
  133. data/features/table.feature +122 -0
  134. data/features/table_cell.feature +45 -0
  135. data/features/table_row.feature +43 -0
  136. data/features/text_area.feature +51 -0
  137. data/features/text_field.feature +70 -0
  138. data/features/unordered_list.feature +56 -0
  139. data/features/video.feature +73 -0
  140. data/lib/page-object.rb +421 -0
  141. data/lib/page-object/accessors.rb +1412 -0
  142. data/lib/page-object/core_ext/string.rb +5 -0
  143. data/lib/page-object/element_locators.rb +21 -0
  144. data/lib/page-object/elements.rb +60 -0
  145. data/lib/page-object/elements/area.rb +31 -0
  146. data/lib/page-object/elements/audio.rb +9 -0
  147. data/lib/page-object/elements/bold.rb +11 -0
  148. data/lib/page-object/elements/button.rb +35 -0
  149. data/lib/page-object/elements/canvas.rb +23 -0
  150. data/lib/page-object/elements/check_box.rb +37 -0
  151. data/lib/page-object/elements/div.rb +19 -0
  152. data/lib/page-object/elements/element.rb +226 -0
  153. data/lib/page-object/elements/file_field.rb +38 -0
  154. data/lib/page-object/elements/form.rb +36 -0
  155. data/lib/page-object/elements/heading.rb +15 -0
  156. data/lib/page-object/elements/hidden_field.rb +22 -0
  157. data/lib/page-object/elements/image.rb +36 -0
  158. data/lib/page-object/elements/label.rb +19 -0
  159. data/lib/page-object/elements/link.rb +46 -0
  160. data/lib/page-object/elements/list_item.rb +19 -0
  161. data/lib/page-object/elements/media.rb +45 -0
  162. data/lib/page-object/elements/option.rb +10 -0
  163. data/lib/page-object/elements/ordered_list.rb +50 -0
  164. data/lib/page-object/elements/paragraph.rb +9 -0
  165. data/lib/page-object/elements/radio_button.rb +37 -0
  166. data/lib/page-object/elements/select_list.rb +42 -0
  167. data/lib/page-object/elements/span.rb +19 -0
  168. data/lib/page-object/elements/table.rb +79 -0
  169. data/lib/page-object/elements/table_cell.rb +28 -0
  170. data/lib/page-object/elements/table_row.rb +50 -0
  171. data/lib/page-object/elements/text_area.rb +38 -0
  172. data/lib/page-object/elements/text_field.rb +42 -0
  173. data/lib/page-object/elements/unordered_list.rb +51 -0
  174. data/lib/page-object/elements/video.rb +18 -0
  175. data/lib/page-object/indexed_properties.rb +40 -0
  176. data/lib/page-object/javascript/angularjs.rb +14 -0
  177. data/lib/page-object/javascript/jquery.rb +14 -0
  178. data/lib/page-object/javascript/prototype.rb +14 -0
  179. data/lib/page-object/javascript/yui.rb +19 -0
  180. data/lib/page-object/javascript_framework_facade.rb +80 -0
  181. data/lib/page-object/loads_platform.rb +45 -0
  182. data/lib/page-object/locator_generator.rb +131 -0
  183. data/lib/page-object/nested_elements.rb +17 -0
  184. data/lib/page-object/page_factory.rb +108 -0
  185. data/lib/page-object/page_populator.rb +83 -0
  186. data/lib/page-object/platforms.rb +18 -0
  187. data/lib/page-object/platforms/selenium_webdriver.rb +30 -0
  188. data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
  189. data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
  190. data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
  191. data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
  192. data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
  193. data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
  194. data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
  195. data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
  196. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1237 -0
  197. data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
  198. data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
  199. data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
  200. data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
  201. data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
  202. data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
  203. data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
  204. data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
  205. data/lib/page-object/platforms/watir_webdriver.rb +30 -0
  206. data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
  207. data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
  208. data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
  209. data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
  210. data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
  211. data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
  212. data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
  213. data/lib/page-object/platforms/watir_webdriver/page_object.rb +1082 -0
  214. data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
  215. data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
  216. data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
  217. data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
  218. data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
  219. data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
  220. data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
  221. data/lib/page-object/sections.rb +29 -0
  222. data/lib/page-object/version.rb +4 -0
  223. data/lib/page-object/widgets.rb +133 -0
  224. data/page_object.gemspec +31 -0
  225. data/pageobject.gems +1 -0
  226. data/spec/page-object/accessors_spec.rb +40 -0
  227. data/spec/page-object/element_locators_spec.rb +1122 -0
  228. data/spec/page-object/elements/area_spec.rb +45 -0
  229. data/spec/page-object/elements/bold_spec.rb +29 -0
  230. data/spec/page-object/elements/button_spec.rb +64 -0
  231. data/spec/page-object/elements/canvas_spec.rb +40 -0
  232. data/spec/page-object/elements/check_box_spec.rb +49 -0
  233. data/spec/page-object/elements/div_spec.rb +28 -0
  234. data/spec/page-object/elements/element_spec.rb +114 -0
  235. data/spec/page-object/elements/file_field_spec.rb +39 -0
  236. data/spec/page-object/elements/form_spec.rb +28 -0
  237. data/spec/page-object/elements/heading_spec.rb +48 -0
  238. data/spec/page-object/elements/hidden_field_spec.rb +28 -0
  239. data/spec/page-object/elements/image_spec.rb +66 -0
  240. data/spec/page-object/elements/label_spec.rb +29 -0
  241. data/spec/page-object/elements/link_spec.rb +49 -0
  242. data/spec/page-object/elements/list_item_spec.rb +29 -0
  243. data/spec/page-object/elements/nested_element_spec.rb +254 -0
  244. data/spec/page-object/elements/option_spec.rb +11 -0
  245. data/spec/page-object/elements/ordered_list_spec.rb +94 -0
  246. data/spec/page-object/elements/paragraph_spec.rb +27 -0
  247. data/spec/page-object/elements/select_list_spec.rb +142 -0
  248. data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
  249. data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
  250. data/spec/page-object/elements/selenium_element_spec.rb +177 -0
  251. data/spec/page-object/elements/span_spec.rb +26 -0
  252. data/spec/page-object/elements/table_cell_spec.rb +21 -0
  253. data/spec/page-object/elements/table_row_spec.rb +70 -0
  254. data/spec/page-object/elements/table_spec.rb +98 -0
  255. data/spec/page-object/elements/text_area_spec.rb +39 -0
  256. data/spec/page-object/elements/unordered_list_spec.rb +94 -0
  257. data/spec/page-object/elements/watir_element_spec.rb +145 -0
  258. data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
  259. data/spec/page-object/loads_platform_spec.rb +53 -0
  260. data/spec/page-object/page-object_spec.rb +407 -0
  261. data/spec/page-object/page_factory_spec.rb +238 -0
  262. data/spec/page-object/page_populator_spec.rb +122 -0
  263. data/spec/page-object/page_section_spec.rb +73 -0
  264. data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
  265. data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
  266. data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
  267. data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
  268. data/spec/page-object/selenium_accessors_spec.rb +609 -0
  269. data/spec/page-object/watir_accessors_spec.rb +1134 -0
  270. data/spec/page-object/widget_spec.rb +226 -0
  271. data/spec/spec_helper.rb +47 -0
  272. metadata +601 -0
@@ -0,0 +1,70 @@
1
+ require 'selenium/webdriver/remote/http/persistent'
2
+
3
+ module PageObject
4
+ module PersistantBrowser
5
+ @@browser = false
6
+ def self.get_browser
7
+ if !@@browser
8
+ target = ENV['BROWSER']
9
+ target = 'firefox_local' unless target
10
+
11
+ if is_remote?(target)
12
+ require File.dirname(__FILE__) + "/targets/#{target}"
13
+ extend Target
14
+ end
15
+
16
+ @@browser = watir_browser(target) if ENV['DRIVER'] == 'WATIR'
17
+ @@browser = selenium_browser(target) if ENV['DRIVER'] == 'SELENIUM'
18
+ end
19
+ @@browser
20
+ end
21
+
22
+ def self.quit
23
+ @@browser.quit
24
+ end
25
+
26
+ private
27
+
28
+ def self.is_remote?(target)
29
+ not target.include? 'local'
30
+ end
31
+
32
+ def self.watir_browser(target)
33
+ if is_remote?(target)
34
+ Watir::Browser.new(:remote,
35
+ :http_client => client,
36
+ :url => url,
37
+ :desired_capabilities => desired_capabilities)
38
+ else
39
+ Watir::Browser.new :firefox, :http_client => client
40
+ end
41
+ end
42
+
43
+ def self.selenium_browser(target)
44
+ if is_remote?(target)
45
+ Selenium::WebDriver.for(:remote,
46
+ :http_client => client,
47
+ :url => url,
48
+ :desired_capabilities => desired_capabilities)
49
+ else
50
+ Selenium::WebDriver.for :firefox, :http_client => client
51
+ end
52
+ end
53
+
54
+ def self.client
55
+ Selenium::WebDriver::Remote::Http::Persistent.new
56
+ end
57
+
58
+ def self.capabilities(browser, version, platform, name)
59
+ caps = Selenium::WebDriver::Remote::Capabilities.send browser
60
+ caps.version = version
61
+ caps.platform = platform
62
+ caps[:name] = name
63
+ caps
64
+ end
65
+
66
+ def self.url
67
+ "http://pageobject:18002ee8-963b-472e-9425-2baf0a2b6d95@ondemand.saucelabs.com:80/wd/hub"
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,6 @@
1
+ module Target
2
+ def desired_capabilities
3
+ capabilities(:firefox, '14', 'Mac 10.6', 'Testing page-object with Firefox 14 on OS X')
4
+ end
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ module Target
2
+ def desired_capabilities
3
+ capabilities(:firefox, '14', 'Windows 2008', 'Testing page-object with Firefox 14 on Windows 7')
4
+ end
5
+ end
6
+
@@ -0,0 +1,57 @@
1
+ module UrlHelper
2
+ class << self
3
+ def html
4
+ File.expand_path("#{File.dirname(__FILE__)}/../html")
5
+ end
6
+
7
+ def files
8
+ target = ENV['BROWSER']
9
+ return "file://#{html}" if target.nil? or target.include? 'local'
10
+ 'http://ec2-107-22-131-88.compute-1.amazonaws.com'
11
+ end
12
+
13
+ def static_elements
14
+ "#{files}/static_elements.html"
15
+ end
16
+
17
+ def frame_elements
18
+ "#{files}/frames.html"
19
+ end
20
+
21
+ def iframe_elements
22
+ "#{files}/iframes.html"
23
+ end
24
+
25
+ def nested_frame_elements
26
+ "#{files}/nested_frames.html"
27
+ end
28
+
29
+ def nested_elements
30
+ "#{files}/nested_elements.html"
31
+ end
32
+
33
+ def modal
34
+ "#{files}/modal.html"
35
+ end
36
+
37
+ def async
38
+ "#{files}/async.html"
39
+ end
40
+
41
+ def multi
42
+ "#{files}/multi_elements.html"
43
+ end
44
+
45
+ def indexed
46
+ "#{files}/indexed_property.html"
47
+ end
48
+
49
+ def hover
50
+ "#{files}/hover.html"
51
+ end
52
+
53
+ def double_click
54
+ "#{files}/double_click.html"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,122 @@
1
+ Feature: Table
2
+ In order to interact with tables
3
+ Testers will need access and interrogation ability
4
+
5
+
6
+ Background:
7
+ Given I am on the static elements page
8
+
9
+ Scenario: Retrieve a table
10
+ When I retrieve a table element
11
+ Then I should know it is visible
12
+
13
+ Scenario: Determine if a table exists
14
+ When I retrieve a table element
15
+ Then I should know it exists
16
+
17
+ Scenario: Retrieve the data from a table
18
+ When I retrieve a table element
19
+ Then the data for row "2" should be "Data1" and "Data2"
20
+ And the data for row "3" should be "Data3" and "Data4"
21
+ And the table should have "3" rows
22
+ And row "2" should have "2" columns
23
+ And the data for the second row should be "Data1" and "Data2"
24
+ And the data for the last row should be "Data3" and "Data4"
25
+
26
+ Scenario: Retrieve data from a table using a row header
27
+ When I retrieve a table element
28
+ Then the data for row "Data3" should be "Data3" and "Data4"
29
+
30
+ Scenario: Retrieve data from a table using a partial row header
31
+ When I retrieve a table element
32
+ Then the data for row "ata3" should be "Data3" and "Data4"
33
+
34
+ Scenario: Retrieve data from a table using a row header in the 2nd column
35
+ When I retrieve a table element
36
+ Then the data for row "Data4" should be "Data3" and "Data4"
37
+
38
+ Scenario: Retrieve data from a table using a partial row header in the 2nd column
39
+ When I retrieve a table element
40
+ Then the data for row "ata4" should be "Data3" and "Data4"
41
+
42
+ Scenario: Retrieve data from a table using a column header
43
+ When I retrieve a table element
44
+ Then the data for column "Header" and row "3" should be "Data4"
45
+
46
+ Scenario: Retrieve data from a table with a thead using a column header
47
+ When I retrieve a table with thead element
48
+ Then the data for column "Col1" and row "2" should be "Data1"
49
+
50
+ Scenario: Retrieve data from the first row of a table with a thead using a column header
51
+ When I retrieve a table with thead element
52
+ Then the data for column "Col1" and row "1" should be "Col1"
53
+
54
+ Scenario: Retrieve data from a table using a partial column header
55
+ When I retrieve a table element
56
+ Then the data for column "eader" and row "3" should be "Data4"
57
+
58
+ Scenario: Retrieve data from a table using both headers
59
+ When I retrieve a table element
60
+ Then the data for row "Data3" and column "eader" should be "Data4"
61
+
62
+ Scenario: Retrieve data from a table with an incorrect row header
63
+ When I retrieve a table element
64
+ Then the data for row "Data20" should be nil
65
+
66
+ Scenario: Retrieve data from a table with an incorrect column header
67
+ When I retrieve a table element
68
+ Then the data for row "Data3" and column "Data20" should be nil
69
+
70
+ Scenario: Retrieve data from a table that does not have a cell which corresponds to a column header
71
+ When I retrieve a table with thead element
72
+ Then the data for row "Data5" and column "Col2" should be nil
73
+
74
+ Scenario Outline: Locating table cells on the Page
75
+ When I retrieve a table element by "<search_by>"
76
+ Then the data for row "2" should be "Data1" and "Data2"
77
+
78
+ Scenarios:
79
+ | search_by |
80
+ | id |
81
+ | class |
82
+ | xpath |
83
+ | index |
84
+ | name |
85
+
86
+ Scenario: Matching the expected table with the table on the Page
87
+ When I retrieve a table element
88
+ Then the table should be like the expected one
89
+ | Table | Header |
90
+ | Data1 | Data2 |
91
+ | Data3 | Data4 |
92
+
93
+
94
+ @selenium_only
95
+ Scenario Outline: Locating table cells on the Page
96
+ When I retrieve a table element by "<search_by>"
97
+ Then the data for row "2" should be "Data1" and "Data2"
98
+
99
+ Scenarios:
100
+ | search_by |
101
+ | css |
102
+
103
+ Scenario Outline: Locating table using multiple parameters
104
+ When I retrieve a table element by "<param1>" and "<param2>"
105
+ Then the data for row "2" should be "Data1" and "Data2"
106
+
107
+ Scenarios:
108
+ | param1 | param2 |
109
+ | class | index |
110
+ | name | index |
111
+
112
+ Scenario: Finding a table dynamically
113
+ When I retrieve a table element while the script is executing
114
+ And the data for row "2" should be "Data1" and "Data2"
115
+
116
+ @watir_only
117
+ Scenario: Finding an existing table
118
+ Then I should see that the table exists
119
+
120
+ Scenario: Getting the text from a table
121
+ Then I should see the text includes "Data1" when I retrieve it by "id"
122
+ And I should see the text includes "Data2" when I retrieve it by "id"
@@ -0,0 +1,45 @@
1
+ Feature: Table Cell
2
+
3
+
4
+ Background:
5
+ Given I am on the static elements page
6
+
7
+ Scenario: Retrieving the text from a table cell
8
+ When I retrieve the data from the table cell
9
+ Then the cell data should be 'Data4'
10
+
11
+ Scenario Outline: Locating table cells on the Page
12
+ When I search for the table cell by "<search_by>"
13
+ Then the cell data should be 'Data4'
14
+
15
+ Scenarios:
16
+ | search_by |
17
+ | id |
18
+ | class |
19
+ | xpath |
20
+ | name |
21
+ | text |
22
+ | css |
23
+
24
+ @watir_only
25
+ Scenario Outline: Locating table cells on the Page with watir
26
+ When I search for the table cell by "<search_by>"
27
+ Then the cell data should be 'Data4'
28
+
29
+ Scenarios:
30
+ | search_by |
31
+ | index |
32
+
33
+ Scenario Outline: Locating table cell using multiple parameters
34
+ When I retrieve a table cell element by "<param1>" and "<param2>"
35
+ Then the cell data should be 'Data4'
36
+
37
+ Scenarios:
38
+ | param1 | param2 |
39
+ | class | index |
40
+ | name | index |
41
+
42
+ Scenario: Finding a table cell dynamically
43
+ When I retrieve a table cell element while the script is executing
44
+ Then I should see that the cell exists
45
+ And the cell data should be 'Data4'
@@ -0,0 +1,43 @@
1
+ Feature: Table Row
2
+
3
+ Background:
4
+ Given I am on the static elements page
5
+
6
+ Scenario: Retrieving the text from a table row
7
+ When I retrieve the data from the table row
8
+ Then the row data should be 'Data1 Data2'
9
+
10
+ Scenario Outline: Locating table rows on the Page
11
+ When I search for the table row by "<search_by>"
12
+ Then the row data should be 'Data1 Data2'
13
+
14
+ Scenarios:
15
+ | search_by |
16
+ | id |
17
+ | class |
18
+ | xpath |
19
+ | css |
20
+
21
+
22
+ @watir_only
23
+ Scenario: Locating table rows on the Page by text
24
+ When I search for the table row by "text"
25
+ Then the row data should be 'Data1 Data2'
26
+
27
+ @watir_only
28
+ Scenario Outline: Locating table rows on the Page with watir
29
+ When I search for the table row by "<search_by>"
30
+ Then the row data should be 'Data1 Data2'
31
+
32
+ Scenarios:
33
+ | search_by |
34
+ | index |
35
+
36
+ Scenario: Locating table row using multiple parameters
37
+ When I retrieve a table row element by "class" and "index"
38
+ Then the row data should be 'Data1 Data2'
39
+
40
+ Scenario: Finding a table row dynamically
41
+ When I retrieve a table row element while the script is executing
42
+ Then I should see that the row exists
43
+ And the row data should be 'Data1 Data2'
@@ -0,0 +1,51 @@
1
+ Feature: Text Area
2
+
3
+
4
+ Background:
5
+ Given I am on the static elements page
6
+
7
+ Scenario: Setting and getting a value from a text area
8
+ When I type "abcdefghijklmnop" into the text area
9
+ Then the text area should contain "abcdefghijklmnop"
10
+
11
+ Scenario Outline: Locating text area on the Page
12
+ When I search for the text area by "<search_by>"
13
+ Then I should be able to type "I found it" into the area
14
+
15
+ Scenarios:
16
+ | search_by |
17
+ | id |
18
+ | class |
19
+ | name |
20
+ | xpath |
21
+ | index |
22
+ | label |
23
+
24
+ @selenium_only
25
+ Scenario Outline: Locating text area on the Page
26
+ When I search for the text area by "<search_by>"
27
+ Then I should be able to type "I found it" into the area
28
+
29
+ Scenarios:
30
+ | search_by |
31
+ | css |
32
+
33
+ Scenario Outline: Locating a text area using multiple parameters
34
+ When I search for the text area by "<param1>" and "<param2>"
35
+ Then I should be able to type "I found it" into the area
36
+
37
+ Scenarios:
38
+ | param1 | param2 |
39
+ | class | index |
40
+ | name | index |
41
+
42
+ Scenario: Finding a text area dynamically
43
+ When I find a text area while the script is executing
44
+ Then I should see that the text area exists
45
+ And I should be able to type "I found it" into the area element
46
+
47
+ Scenario: Clearing the text area
48
+ When I type "abcdefghijklmnop" into the text area
49
+ Then the text area should contain "abcdefghijklmnop"
50
+ When I clear the text area
51
+ Then the text area should contain ""
@@ -0,0 +1,70 @@
1
+ Feature: Text Fields
2
+ In order to interact with text fields
3
+ Testers will need access and interrogation ability
4
+
5
+
6
+ Background:
7
+ Given I am on the static elements page
8
+
9
+ Scenario: Setting and getting a value from a text field
10
+ When I type "abcDEF" into the text field
11
+ Then the text field should contain "abcDEF"
12
+
13
+ Scenario Outline: Locating text fields on the Page
14
+ When I search for the text field by "<search_by>"
15
+ Then I should be able to type "I found it" into the field
16
+
17
+ Examples:
18
+ | search_by |
19
+ | id |
20
+ | class |
21
+ | name |
22
+ | xpath |
23
+ | index |
24
+ | title |
25
+ | text |
26
+ | label |
27
+
28
+
29
+ @watir_only
30
+ Scenario Outline: Locating text fields on the Page using Watir
31
+ When I search for the text field by "<search_by>"
32
+ Then I should be able to type "I found it" into the field
33
+ Examples:
34
+ | search_by |
35
+ | data_field |
36
+
37
+ @selenium_only
38
+ Scenario Outline: Locating text fields on the Page using Selenium
39
+ When I search for the text field by "<search_by>"
40
+ Then I should be able to type "I found it" into the field
41
+
42
+ Examples:
43
+ | search_by |
44
+ | css |
45
+
46
+
47
+ Scenario Outline: Locating a text field using multiple parameters
48
+ When I search for the text field by "<param1>" and "<param2>"
49
+ Then I should be able to type "I found it" into the field
50
+
51
+ Examples:
52
+ | param1 | param2 |
53
+ | class | index |
54
+ | name | index |
55
+
56
+ Scenario: Retrieve a text field
57
+ When I retrieve a text field
58
+ Then I should know it exists
59
+ And I should know it is visible
60
+
61
+ Scenario: Finding a text field dynamically
62
+ When I find a text field while the script is executing
63
+ Then I should see that the text field exists
64
+ And I should be able to type "I found it" into the field element
65
+
66
+ Scenario: Appending text to a text field
67
+ When I type "abcd" into the text field
68
+ And I append "efg" to the text field
69
+ Then the text field should contain "abcdefg"
70
+