symbiont 0.1.7 → 0.1.8

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 (107) hide show
  1. data/Gemfile.lock +10 -39
  2. data/HISTORY.md +6 -0
  3. data/lib/symbiont.rb +8 -4
  4. data/lib/symbiont/enclosers.rb +4 -4
  5. data/lib/symbiont/evaluators.rb +22 -29
  6. data/lib/symbiont/generators.rb +82 -317
  7. data/lib/symbiont/platform_selenium.rb +18 -0
  8. data/lib/symbiont/platform_selenium/platform_object.rb +236 -0
  9. data/lib/symbiont/platform_selenium/web_objects/button.rb +13 -0
  10. data/lib/symbiont/platform_selenium/web_objects/checkbox.rb +21 -0
  11. data/lib/symbiont/platform_selenium/web_objects/common.rb +104 -0
  12. data/lib/symbiont/platform_selenium/web_objects/link.rb +13 -0
  13. data/lib/symbiont/platform_selenium/web_objects/radio.rb +21 -0
  14. data/lib/symbiont/platform_selenium/web_objects/select_list.rb +79 -0
  15. data/lib/symbiont/platform_selenium/web_objects/table.rb +40 -0
  16. data/lib/symbiont/platform_selenium/web_objects/table_row.rb +36 -0
  17. data/lib/symbiont/platform_selenium/web_objects/text_field.rb +14 -0
  18. data/lib/symbiont/platform_watir.rb +13 -4
  19. data/lib/symbiont/platform_watir/platform_object.rb +74 -262
  20. data/lib/symbiont/platform_watir/web_objects/checkbox.rb +21 -0
  21. data/lib/symbiont/platform_watir/web_objects/common.rb +82 -0
  22. data/lib/symbiont/platform_watir/web_objects/radio.rb +21 -0
  23. data/lib/symbiont/platform_watir/web_objects/select_list.rb +67 -0
  24. data/lib/symbiont/platform_watir/web_objects/table.rb +31 -0
  25. data/lib/symbiont/platform_watir/web_objects/table_row.rb +31 -0
  26. data/lib/symbiont/platform_watir/web_objects/text_field.rb +13 -0
  27. data/lib/symbiont/platforms.rb +18 -6
  28. data/lib/symbiont/version.rb +1 -1
  29. data/lib/symbiont/web_objects/_common.rb +53 -74
  30. data/lib/symbiont/web_objects/button.rb +23 -4
  31. data/lib/symbiont/web_objects/checkbox.rb +24 -10
  32. data/lib/symbiont/web_objects/div.rb +9 -1
  33. data/lib/symbiont/web_objects/link.rb +25 -4
  34. data/lib/symbiont/web_objects/paragraph.rb +11 -0
  35. data/lib/symbiont/web_objects/radio.rb +27 -1
  36. data/lib/symbiont/web_objects/select_list.rb +20 -56
  37. data/lib/symbiont/web_objects/span.rb +9 -1
  38. data/lib/symbiont/web_objects/table.rb +19 -22
  39. data/lib/symbiont/web_objects/table_cell.rb +17 -1
  40. data/lib/symbiont/web_objects/table_row.rb +18 -25
  41. data/lib/symbiont/web_objects/text_field.rb +27 -11
  42. data/symbiont.gemspec +3 -8
  43. metadata +29 -122
  44. data/app/Gemfile +0 -4
  45. data/app/app.rb +0 -181
  46. data/app/config/database.rb +0 -9
  47. data/app/models/plan.rb +0 -10
  48. data/app/models/product.rb +0 -10
  49. data/app/models/study.rb +0 -11
  50. data/app/models/user.rb +0 -13
  51. data/app/public/css/style.css +0 -138
  52. data/app/views/create_plan.erb +0 -21
  53. data/app/views/create_product.erb +0 -15
  54. data/app/views/create_study.erb +0 -24
  55. data/app/views/create_user.erb +0 -60
  56. data/app/views/db_plans.erb +0 -31
  57. data/app/views/db_products.erb +0 -29
  58. data/app/views/db_studies.erb +0 -33
  59. data/app/views/db_users.erb +0 -23
  60. data/app/views/entity_list.erb +0 -10
  61. data/app/views/index.erb +0 -8
  62. data/app/views/layout.erb +0 -39
  63. data/app/views/login_page.erb +0 -17
  64. data/app/views/success_1.erb +0 -2
  65. data/app/views/success_2.erb +0 -2
  66. data/app/views/test_database.erb +0 -13
  67. data/app/views/test_events.erb +0 -51
  68. data/app/views/test_login.erb +0 -53
  69. data/app/views/test_login_error.erb +0 -22
  70. data/app/views/test_login_success.erb +0 -22
  71. data/app/views/test_page.erb +0 -184
  72. data/specs/button.feature +0 -44
  73. data/specs/checkbox.feature +0 -40
  74. data/specs/data_setter.feature +0 -29
  75. data/specs/definitions/pages.rb +0 -156
  76. data/specs/div.feature +0 -11
  77. data/specs/evaluators.feature +0 -17
  78. data/specs/events.feature +0 -30
  79. data/specs/frame.feature +0 -5
  80. data/specs/link.feature +0 -42
  81. data/specs/locators.feature +0 -17
  82. data/specs/radio.feature +0 -38
  83. data/specs/select_list.feature +0 -50
  84. data/specs/simple_test.feature +0 -13
  85. data/specs/span.feature +0 -11
  86. data/specs/support/env.rb +0 -20
  87. data/specs/support/hooks.rb +0 -11
  88. data/specs/support/test_steps/action_steps_buttons.rb +0 -70
  89. data/specs/support/test_steps/action_steps_checkboxes.rb +0 -75
  90. data/specs/support/test_steps/action_steps_data_setter.rb +0 -56
  91. data/specs/support/test_steps/action_steps_divs.rb +0 -18
  92. data/specs/support/test_steps/action_steps_evaluators.rb +0 -15
  93. data/specs/support/test_steps/action_steps_events.rb +0 -77
  94. data/specs/support/test_steps/action_steps_frames.rb +0 -13
  95. data/specs/support/test_steps/action_steps_links.rb +0 -61
  96. data/specs/support/test_steps/action_steps_locators.rb +0 -44
  97. data/specs/support/test_steps/action_steps_navigate.rb +0 -25
  98. data/specs/support/test_steps/action_steps_radios.rb +0 -75
  99. data/specs/support/test_steps/action_steps_select_lists.rb +0 -106
  100. data/specs/support/test_steps/action_steps_spans.rb +0 -18
  101. data/specs/support/test_steps/action_steps_tables.rb +0 -82
  102. data/specs/support/test_steps/action_steps_text_fields.rb +0 -107
  103. data/specs/support/test_steps/action_steps_webobjects.rb +0 -31
  104. data/specs/support/test_steps/simple_test_steps.rb +0 -8
  105. data/specs/table.feature +0 -39
  106. data/specs/text_field.feature +0 -47
  107. data/specs/web_object.feature +0 -15
data/Gemfile.lock CHANGED
@@ -1,58 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- symbiont (0.1.6)
5
- watir-webdriver (= 0.6.1)
4
+ symbiont (0.1.8)
5
+ selenium-webdriver (= 2.29.0)
6
+ watir-webdriver (= 0.6.2)
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
- addressable (2.3.2)
11
- builder (3.0.0)
12
- childprocess (0.3.5)
11
+ childprocess (0.3.7)
13
12
  ffi (~> 1.0, >= 1.0.6)
14
- cucumber (1.2.1)
15
- builder (>= 2.1.2)
16
- diff-lcs (>= 1.1.3)
17
- gherkin (~> 2.11.0)
18
- json (>= 1.4.6)
19
- diff-lcs (1.1.3)
20
- ffi (1.1.5)
21
- ffi (1.1.5-x86-mingw32)
22
- gherkin (2.11.1-x86-mingw32)
23
- json (>= 1.4.6)
24
- json (1.7.3)
25
- libwebsocket (0.1.5)
26
- addressable
27
- multi_json (1.3.5)
28
- rspec (2.11.0)
29
- rspec-core (~> 2.11.0)
30
- rspec-expectations (~> 2.11.0)
31
- rspec-mocks (~> 2.11.0)
32
- rspec-core (2.11.0)
33
- rspec-expectations (2.11.1)
34
- diff-lcs (~> 1.1.3)
35
- rspec-mocks (2.11.1)
13
+ ffi (1.3.1-x86-mingw32)
14
+ multi_json (1.5.0)
36
15
  rubyzip (0.9.9)
37
- selenium-webdriver (2.25.0)
16
+ selenium-webdriver (2.29.0)
38
17
  childprocess (>= 0.2.5)
39
- libwebsocket (~> 0.1.3)
40
18
  multi_json (~> 1.0)
41
19
  rubyzip
42
- simplecov (0.6.4)
43
- multi_json (~> 1.0)
44
- simplecov-html (~> 0.5.3)
45
- simplecov-html (0.5.3)
46
- watir-webdriver (0.6.1)
20
+ websocket (~> 1.0.4)
21
+ watir-webdriver (0.6.2)
47
22
  selenium-webdriver (>= 2.18.0)
48
- yard (0.8.2.1)
23
+ websocket (1.0.7)
49
24
 
50
25
  PLATFORMS
51
26
  x86-mingw32
52
27
 
53
28
  DEPENDENCIES
54
- cucumber (= 1.2.1)
55
- rspec (= 2.11.0)
56
- simplecov (= 0.6.4)
57
29
  symbiont!
58
- yard (= 0.8.2.1)
data/HISTORY.md CHANGED
@@ -1,6 +1,12 @@
1
1
  Change Log and History
2
2
  ======================
3
3
 
4
+ Version 0.1.8 / 2013-01-30
5
+ --------------------------
6
+
7
+ This release made a lot of internal changes in order to begin incorporating Selenium, similar to how the page-object gem works. It's still very uncertain to me whether it makes sense to include Selenium at all so this will be a trial of that. Currently my focus is still on Watir and there is a lot of logic that does not yet work with Selenium.
8
+
9
+
4
10
  Version 0.1.7 / 2012-10-16
5
11
  --------------------------
6
12
 
data/lib/symbiont.rb CHANGED
@@ -15,10 +15,8 @@ module Symbiont
15
15
  include Locators
16
16
  include DataSetter
17
17
 
18
- # Used to make a platform object accessible. Will hold object
19
- # references like these:
20
- # <Symbiont::Platforms::WatirWebDriver::PlatformObject:0x2cbe8a0>
21
18
  attr_reader :platform
19
+ attr_reader :browser
22
20
 
23
21
  def self.version
24
22
  "Symbiont v#{Symbiont::VERSION}"
@@ -41,6 +39,12 @@ module Symbiont
41
39
  @page_wait ||= 15
42
40
  end
43
41
 
42
+ # Returns the default wait value for elements on a page. This value is
43
+ # the default value beyond which a timeout is assumed.
44
+ def self.element_level_wait
45
+ @element_wait ||= 5
46
+ end
47
+
44
48
  # The initialize method will be invoked when a page definition includes
45
49
  # Symbiont. Some key things are happening here that are critical to
46
50
  # Symbiont working correctly:
@@ -65,7 +69,7 @@ module Symbiont
65
69
  #
66
70
  # @param [Object] browser a browser instance with a tool driver
67
71
  def establish_platform_object_for(browser)
68
- @platform = get_platform_for(browser)
72
+ @platform = get_platform_for(browser, Symbiont::Platforms.list)
69
73
  end
70
74
 
71
75
  end
@@ -52,7 +52,7 @@ module Symbiont
52
52
  # @page.title.should == "Test App"
53
53
  # end
54
54
  def wait_for(timeout=Symbiont.page_level_wait, message=nil, &block)
55
- @platform.wait_for(timeout, message, &block)
55
+ platform.wait_for(timeout, message, &block)
56
56
  end
57
57
 
58
58
  # Provides a context for an action that will generate a JavaScript alert
@@ -66,7 +66,7 @@ module Symbiont
66
66
  # @page.submitForm
67
67
  # end
68
68
  def will_alert(&block)
69
- @platform.will_alert(&block)
69
+ platform.will_alert(&block)
70
70
  end
71
71
 
72
72
  # Provides a context for an action that will generate a JavaScript
@@ -82,7 +82,7 @@ module Symbiont
82
82
  # @page.areYouSure
83
83
  # end
84
84
  def will_confirm(response, &block)
85
- @platform.will_confirm(response, &block)
85
+ platform.will_confirm(response, &block)
86
86
  end
87
87
 
88
88
  # Provides a context for an action that will generate a JavaScript prompt
@@ -98,7 +98,7 @@ module Symbiont
98
98
  # @page.useValue
99
99
  # end
100
100
  def will_prompt(response, &block)
101
- @platform.will_prompt(response, &block)
101
+ platform.will_prompt(response, &block)
102
102
  end
103
103
 
104
104
  end # module: Enclosers
@@ -1,71 +1,64 @@
1
1
  module Symbiont
2
2
  module Evaluators
3
3
 
4
- # Visits a page via a specified URL. The URL can be specified as a domain
5
- # address or as a file-based link.
6
- # @param [String] url the full URL to navigate to
7
4
  def visit(url)
8
- @platform.visit(url)
5
+ platform.visit(url)
9
6
  end
10
7
 
11
- # Returns the text of the current page. This is the text minus any
12
- # markup.
13
8
  def text
14
- @platform.text
9
+ platform.text
15
10
  end
16
11
 
17
- # Returns the markup of the current page.
18
12
  def markup
19
- @platform.markup
13
+ platform.markup
20
14
  end
21
15
 
22
- alias :html :markup
16
+ alias_method :html, :markup
23
17
 
24
- # Returns the title of the current page.
25
18
  def title
26
- @platform.title
19
+ platform.title
27
20
  end
28
21
 
29
- # Returns the URL of the active page.
30
22
  def url
31
- @platform.url
23
+ platform.url
32
24
  end
33
25
 
34
26
  # Save a snapshot of the current screen to a provided file location.
35
27
  # The file will be saved as a PNG file in the path specified or in the
36
28
  # location where the tests are being run from.
37
- # @param [String] file the file name to save the image as
38
29
  def screenshot(file)
39
- @platform.screenshot file
30
+ platform.screenshot file
40
31
  end
41
32
 
42
- # Returns the web object that currently has focus.
43
33
  def focus
44
- @platform.focus
34
+ platform.focus
45
35
  end
46
-
36
+
37
+ alias_method :what_has_focus?, :focus
38
+
47
39
  # Executes JavaScript against the browser instance.
48
40
  def run_script(script)
49
- @platform.run_script(script)
41
+ platform.run_script(script)
50
42
  end
51
43
 
52
- alias :execute_script :run_script
53
-
44
+ alias_method :execute_script, :run_script
45
+
46
+ def back
47
+ platform.back
48
+ end
49
+
54
50
  # Provides an evaluator that attempts to wait for any pending AJAX
55
51
  # requests from the jQuery library.
56
- #
57
- # @param [Numeric] timeout amount of time to wait
58
- # @param [String] message text to print if timeout period is exceeded
59
- def wait_for_pending_requests(timeout=30, message=nil)
60
- end_time = ::Time.now + timeout
52
+ def wait_for_pending_requests(time_limit=30, message_if_timeout=nil)
53
+ end_time = ::Time.now + time_limit
61
54
  until ::Time.now > end_time
62
55
  begin
63
- return if @browser.execute_script('return jQuery.active') == 0
56
+ return if browser.execute_script('return jQuery.active') == 0
64
57
  rescue ReferenceError
65
58
  end
66
59
  sleep 0.5
67
60
  end
68
- message = "Pending requests never indicated completion" unless message
61
+ message = "Pending jQuery requests never indicated completion." unless message_if_timeout
69
62
  raise message
70
63
  end
71
64
 
@@ -1,65 +1,28 @@
1
1
  module Symbiont
2
-
3
- # The Generators module is used to provide groupings of methods that are
4
- # generated dynamically based on object declarations in page definitions.
5
- # The method provided allow for referencing and accessing web objects.
6
- # The platform object acts as a delegate for all method calls.
7
-
8
2
  module Generators
9
3
 
10
- # This method allows for a url_is() method in definitions that will
11
- # define a direct means of accessing a resource. The most common
12
- # example will be a URL for a web page, but any URI is valid. The
13
- # URL provided can be navigated to using the generated view() method
14
- # on a definition instance.
15
- #
16
- # @param [String] url the resource identifier to access
17
- # @return [Nil]
18
4
  def url_is(url)
19
5
  define_method("view") do
20
- @platform.visit(url)
6
+ platform.visit(url)
21
7
  end
22
8
  end
23
9
 
24
- # This method allows for a begin_at() method in definitions. The
25
- # URL provided can be navigated to using the generated start()
26
- # method on a definition instance.
27
- #
28
- # @see Symbiont::Generators#url_is
29
- # @param [String] url the resource identifier to access
30
- # @return [Nil]
31
10
  def begin_at(url)
32
11
  define_method("start") do
33
- @platform.visit(url)
12
+ platform.visit(url)
34
13
  end
35
14
  end
36
15
 
37
- # This method allows for a title_is() method in definitions. The idea
38
- # is that you can specify the title of a page. This title can then be
39
- # checked on. Note that the assumption here is that the title will
40
- # be static. The argument to the method can, however, be a
41
- # regular expression.
42
- #
43
- # @param [String] title the literal string of the expected title
44
- # @param [Regexp] title the pattern string of the expected title
45
- # @return [Nil]
46
- # @raise exception if the title found does not match the title expected
47
16
  def title_is(title)
48
17
  define_method('has_title?') do
49
- valid_title = title =~ @browser.title if title.kind_of?(Regexp)
50
- valid_title = title == @browser.title if title.kind_of?(String)
51
- raise "Expected title: '#{title}'; Actual title: '#{@browser.title}'" unless valid_title
18
+ sleep 1
19
+ valid_title = title =~ browser.title if title.kind_of?(Regexp)
20
+ valid_title = title == browser.title if title.kind_of?(String)
21
+ raise "\n\nExpected title: '#{title}'; Actual title: '#{browser.title}'" unless valid_title
52
22
  valid_title
53
23
  end
54
24
  end
55
25
 
56
- # This method allows for a look_for() method in definitions. The idea
57
- # is that you can specify an object that should appear on a given page
58
- # when that page appears.
59
- #
60
- # @param [Symbol] widget the friendly name of the object declaration
61
- # @param [optional, Integer] timeout the time to wait for the object to appear
62
- # @return [Boolean] true if object was found
63
26
  def look_for(widget, timeout=5)
64
27
  define_method('has_object?') do
65
28
  if self.respond_to? "#{widget}_object"
@@ -69,283 +32,111 @@ module Symbiont
69
32
  end
70
33
  end
71
34
  end
72
-
73
- # Definition method for links. Methods for the following actions will
74
- # be created:
75
- # * reference a link (identifier_object, identifier_link)
76
- # * check text of link (identifier_text)
77
- # * click a link (identifier)
78
- # * check for existence (identifier?, identifier_exists?)
79
- # * check for visibility (identifier_?, identifier_visible?)
80
- # @param [Symbol] identifier the friendly name of the web object
81
- # @param [optional, Hash] locator the key/values that identify the object
82
- # @return [Object] instance of Symbiont::WebObjects::Link
83
- def link(identifier, locator)
84
- define_method("#{identifier}_object") do
85
- @platform.get_link_for(locator.clone)
86
- end
87
35
 
88
- alias_method "#{identifier}_link".to_sym, "#{identifier}_object".to_sym
89
-
90
- define_method("#{identifier}_text") do
91
- @platform.get_link_text_for(locator.clone)
92
- end
93
-
36
+ def paragraph(identifier, locator)
94
37
  define_method(identifier) do
95
- @platform.click_link_for(locator.clone)
38
+ platform.paragraph_text_for(locator.clone)
96
39
  end
97
40
 
98
- define_method("#{identifier}_exists?") do
99
- @platform.check_link_for_existence(locator.clone)
100
- end
101
-
102
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
103
-
104
- define_method("#{identifier}_visible?") do
105
- @platform.check_link_for_visibility(locator.clone)
106
- end
107
-
108
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
41
+ common_definition_methods(identifier, locator, 'paragraph_element')
109
42
  end
110
43
 
111
- # Definition method for buttons. Methods for the following actions will
112
- # be created:
113
- # * reference a button (identifier_object, identifier_button)
114
- # * get text from button (identifier_text)
115
- # * click a button (identifier)
116
- # * check for existence (identifier?, identifier_exists?)
117
- # * check for visibility (identifier_?, identifier_visible?)
118
- # * check for enabled (identifier!, identifier_enabled?)
119
- # @param [Symbol] identifier the friendly name of the web object
120
- # @param [optional, Hash] locator the key/values that identify the object
121
- # @return [Object] instance of Symbiont::WebObjects::Button
122
- def button(identifier, locator)
123
- define_method("#{identifier}_object") do
124
- @platform.get_button_for(locator.clone)
125
- end
44
+ alias_method :p, :paragraph
126
45
 
127
- alias_method "#{identifier}_button".to_sym, "#{identifier}_object".to_sym
128
-
129
- define_method("#{identifier}_text") do
130
- @platform.get_button_text_for(locator.clone)
131
- end
132
-
46
+ def link(identifier, locator)
133
47
  define_method(identifier) do
134
- @platform.click_button_for(locator.clone)
48
+ platform.click_link_for(locator.clone)
135
49
  end
136
50
 
137
- define_method("#{identifier}_exists?") do
138
- @platform.check_button_for_existence(locator.clone)
139
- end
140
-
141
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
142
-
143
- define_method("#{identifier}_visible?") do
144
- @platform.check_button_for_visibility(locator.clone)
145
- end
146
-
147
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
148
-
149
- define_method("#{identifier}_enabled?") do
150
- @platform.check_button_for_enabled(locator.clone)
151
- end
152
-
153
- alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
51
+ common_definition_methods(identifier, locator, 'link_element')
154
52
  end
155
53
 
156
- # Definition method for text fields. Methods for the following actions
157
- # will be created:
158
- # * reference a text field (identifier_object, identifier_text_field)
159
- # * get text from a text field (identifier)
160
- # * set text in a text field (identifier=)
161
- # * check for existence (identifier?, identifier_exists?)
162
- # * check for visibility (identifier_?, identifier_visible?)
163
- # * check for enabled (identifier!, identifier_enabled?)
164
- # @param [Symbol] identifier the friendly name of the web object
165
- # @param [optional, Hash] locator the key/values that identify the object
166
- # @return [Object] instance of Symbiont::WebObjects::TextField
167
- def text_field(identifier, locator)
168
- define_method("#{identifier}_object") do
169
- @platform.get_text_field_for(locator.clone)
54
+ alias_method :a, :link
55
+
56
+ def button(identifier, locator)
57
+ define_method(identifier) do
58
+ platform.click_button_for(locator.clone)
170
59
  end
171
60
 
172
- alias_method "#{identifier}_text_field".to_sym, "#{identifier}_object".to_sym
61
+ common_definition_methods(identifier, locator, 'button_element')
62
+ end
173
63
 
64
+ def text_field(identifier, locator)
174
65
  define_method(identifier) do
175
- @platform.get_text_field_value_for(locator.clone)
66
+ platform.get_text_field_value_for(locator.clone)
176
67
  end
177
-
68
+
178
69
  define_method("#{identifier}=") do |value|
179
- @platform.set_text_field_value_for(locator.clone, value)
180
- end
181
-
182
- define_method("#{identifier}_exists?") do
183
- @platform.check_text_field_for_existence(locator.clone)
184
- end
185
-
186
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
187
-
188
- define_method("#{identifier}_visible?") do
189
- @platform.check_text_field_for_visibility(locator.clone)
70
+ platform.set_text_field_value_for(locator.clone, value)
190
71
  end
191
-
192
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
193
-
194
- define_method("#{identifier}_enabled?") do
195
- @platform.check_text_field_for_enabled(locator.clone)
196
- end
197
-
198
- alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
72
+
73
+ common_definition_methods(identifier, locator, 'text_field_element')
199
74
  end
200
75
 
201
- # Definition method for select lists. Methods for the following actions
202
- # will be created:
203
- # * reference a checkbox (identifier_object, identifier_select_list)
204
- # * check for existence (identifier?, identifier_exists?)
205
- # * check for visibility (identifier_?, identifier_visible?)
206
- # * check for enabled (identifier!, identifier_enabled?)
207
- # * check for option (identifier_option?)
208
- # * set selected value (identifier=)
209
- # @param [Symbol] identifier the friendly name of the web object
210
- # @param [optional, Hash] locator the key/values that identify the object
211
- # @return [Object] instance of Symbiont::WebObjects::SelectList
212
76
  def select_list(identifier, locator)
213
- define_method("#{identifier}_object") do
214
- @platform.get_select_list_for(locator.clone)
215
- end
216
-
217
- alias_method "#{identifier}_select_list".to_sym, "#{identifier}_object".to_sym
218
-
219
77
  define_method(identifier) do
220
- @platform.get_select_list_item_for(locator.clone)
78
+ platform.get_select_list_item_for(locator.clone)
221
79
  end
222
80
 
223
81
  define_method("#{identifier}_option?") do
224
- @platform.get_select_list_value_for(locator.clone)
225
- end
226
-
227
- define_method("#{identifier}=") do |value|
228
- @platform.set_select_list_value_for(locator.clone, value)
229
- end
230
-
231
- define_method("#{identifier}_exists?") do
232
- @platform.check_select_list_for_existence(locator.clone)
82
+ platform.get_select_list_value_for(locator.clone)
233
83
  end
234
-
235
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
236
-
237
- define_method("#{identifier}_visible?") do
238
- @platform.check_select_list_for_visibility(locator.clone)
84
+
85
+ define_method("#{identifier}_options?") do
86
+ object = self.send("#{identifier}_object")
87
+ (object && object.options) ? object.options.collect(&:text) : []
239
88
  end
240
-
241
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
242
-
243
- define_method("#{identifier}_enabled?") do
244
- @platform.check_select_list_for_enabled(locator.clone)
89
+
90
+ define_method("#{identifier}=") do |value|
91
+ platform.set_select_list_value_for(locator.clone, value)
245
92
  end
246
-
247
- alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
93
+
94
+ common_definition_methods(identifier, locator, 'select_list_element')
248
95
  end
96
+
97
+ alias_method :select, :select_list
249
98
 
250
- # Definition method for checkboxes. Methods for the following actions
251
- # will be created:
252
- # * reference a checkbox (identifier_object, identifier_checkbox)
253
- # * check for existence (identifier?, identifier_exists?)
254
- # * check for visibility (identifier_?, identifier_visible?)
255
- # * check for enabled (identifier!, identifier_enabled?)
256
- # * check for checked (identifier_checked?)
257
- # * set checked state (check_identifier)
258
- # * set unchecked state (uncheck_identifier)
259
- # @param [Symbol] identifier the friendly name of the web object
260
- # @param [optional, Hash] locator the key/values that identify the object
261
- # @return [Object] instance of Symbiont::WebObjects::CheckBox
262
99
  def checkbox(identifier, locator)
263
- define_method("#{identifier}_object") do
264
- @platform.get_checkbox_for(locator.clone)
265
- end
266
-
267
- alias_method "#{identifier}_checkbox".to_sym, "#{identifier}_object".to_sym
268
-
269
100
  define_method("check_#{identifier}") do
270
- @platform.check_checkbox_for(locator.clone)
101
+ platform.check_checkbox_for(locator.clone)
271
102
  end
272
103
 
273
104
  define_method("uncheck_#{identifier}") do
274
- @platform.uncheck_checkbox_for(locator.clone)
105
+ platform.uncheck_checkbox_for(locator.clone)
275
106
  end
276
107
 
277
108
  define_method("#{identifier}_checked?") do
278
- @platform.check_checkbox_for_checked(locator.clone)
279
- end
280
-
281
- define_method("#{identifier}_exists?") do
282
- @platform.check_checkbox_for_existence(locator.clone)
109
+ platform.check_checkbox_for_checked(locator.clone)
283
110
  end
284
-
285
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
286
-
287
- define_method("#{identifier}_visible?") do
288
- @platform.check_checkbox_for_visibility(locator.clone)
289
- end
290
-
291
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
292
-
293
- define_method("#{identifier}_enabled?") do
294
- @platform.check_checkbox_for_enabled(locator.clone)
295
- end
296
-
297
- alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
111
+
112
+ common_definition_methods(identifier, locator, 'checkbox_element')
298
113
  end
299
114
 
300
- # Definition method for radios. Methods for the following actions will be created:
301
- # * reference a radio (identifier_object, identifier_radio, identifier_radio_button)
302
- # * check for existence (identifier?, identifier_exists?)
303
- # * check for visibility (identifier_?, identifier_visible?)
304
- # * check for enabled (identifier!, identifier_enabled?)
305
- # * check for selected (identifier_set?, identifier_selected?)
306
- # * set selected state (set_identifier, select_identifier)
307
- # @param [Symbol] identifier the friendly name of the web object
308
- # @param [optional, Hash] locator the key/values that identify the object
309
- # @return [Object] instance of Symbiont::WebObjects::Radio
310
115
  def radio(identifier, locator)
311
- define_method("#{identifier}_object") do
312
- @platform.get_radio_for(locator.clone)
313
- end
314
-
315
- alias_method "#{identifier}_radio".to_sym, "#{identifier}_object".to_sym
316
- alias_method "#{identifier}_radio_button".to_sym, "#{identifier}_object".to_sym
116
+ #alias_method "#{identifier}_radio".to_sym, "#{identifier}_object".to_sym
117
+ #alias_method "#{identifier}_radio_button".to_sym, "#{identifier}_object".to_sym
317
118
 
318
119
  define_method("#{identifier}_selected?") do
319
- @platform.check_radio_for_selected(locator.clone)
120
+ platform.check_radio_for_selected(locator.clone)
320
121
  end
321
122
 
322
123
  alias_method "#{identifier}_set?".to_sym, "#{identifier}_selected?".to_sym
323
124
 
324
125
  define_method("select_#{identifier}") do
325
- @platform.select_radio_for(locator.clone)
126
+ platform.select_radio_for(locator.clone)
326
127
  end
327
128
 
328
129
  alias_method "set_#{identifier}".to_sym, "select_#{identifier}".to_sym
329
-
330
- define_method("#{identifier}_exists?") do
331
- @platform.check_radio_for_existence(locator.clone)
332
- end
333
-
334
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
335
-
336
- define_method("#{identifier}_visible?") do
337
- @platform.check_radio_for_visibility(locator.clone)
338
- end
339
-
340
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
341
-
342
- define_method("#{identifier}_enabled?") do
343
- @platform.check_radio_for_enabled(locator.clone)
344
- end
345
-
346
- alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
130
+
131
+ common_definition_methods(identifier, locator, 'radio_element')
347
132
  end
348
-
133
+
134
+ alias_method :radio_button, :radio
135
+
136
+
137
+
138
+
139
+
349
140
  # Definition method for tables. Methods for the following actions will be created:
350
141
  # * reference a table (identifier_object, identifier_table)
351
142
  # * check for existence (identifier?, identifier_exists?)
@@ -405,68 +196,42 @@ module Symbiont
405
196
  end
406
197
  end
407
198
 
408
- # Definition method for div objects. Methods for the following actions will be created:
409
- # * reference a div (identifier_object, identifier_div)
410
- # * check for existence (identifier?, identifier_exists?)
411
- # * check for visibility (identifier_?, identifier_visible?)
412
- # * get text from div (identifier)
413
- # @param [Symbol] identifier the friendly name of the web object
414
- # @param [optional, Hash] locator the key/values that identify the object
415
- # @return [Object] instance of Symbiont::WebObjects::Div
416
199
  def div(identifier, locator)
417
- define_method("#{identifier}_object") do
418
- @platform.get_div_for(locator.clone)
419
- end
420
-
421
- alias_method "#{identifier}_div".to_sym, "#{identifier}_object".to_sym
422
-
423
- define_method("#{identifier}_exists?") do
424
- @platform.check_div_for_existence(locator.clone)
425
- end
426
-
427
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
428
-
429
- define_method("#{identifier}_visible?") do
430
- @platform.check_div_for_visibility(locator.clone)
431
- end
432
-
433
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
434
-
435
- define_method("#{identifier}") do
436
- @platform.get_div_text_for(locator.clone)
437
- end
200
+ common_definition_methods(identifier, locator, 'div_element')
438
201
  end
439
202
 
440
- # Definition method for span objects. Methods for the following actions will be created:
441
- # * reference a span (identifier_object, identifier_span)
442
- # * check for existence (identifier?, identifier_exists?)
443
- # * check for visibility (identifier_?, identifier_visible?)
444
- # * get text from span (identifier)
445
- # @param [Symbol] identifier the friendly name of the web object
446
- # @param [optional, Hash] locator the key/values that identify the object
447
- # @return [Object] instance of Symbiont::WebObjects::Span
448
203
  def span(identifier, locator)
204
+ common_definition_methods(identifier, locator, 'span_element')
205
+ end
206
+
207
+ def common_definition_methods(identifier, locator, method)
449
208
  define_method("#{identifier}_object") do
450
- @platform.get_span_for(locator.clone)
209
+ platform.send(method, locator.clone)
451
210
  end
452
-
453
- alias_method "#{identifier}_span".to_sym, "#{identifier}_object".to_sym
454
-
211
+
455
212
  define_method("#{identifier}_exists?") do
456
- @platform.check_span_for_existence(locator.clone)
213
+ platform.send(method, locator.clone).exists?
457
214
  end
458
-
459
- alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
460
-
215
+
461
216
  define_method("#{identifier}_visible?") do
462
- @platform.check_span_for_visibility(locator.clone)
217
+ platform.send(method, locator.clone).visible?
463
218
  end
464
-
465
- alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
466
-
467
- define_method("#{identifier}") do
468
- @platform.get_span_text_for(locator.clone)
219
+
220
+ define_method("#{identifier}_enabled?") do
221
+ platform.send(method, locator.clone).enabled?
222
+ end
223
+
224
+ define_method("#{identifier}_text") do
225
+ platform.send(method, locator.clone).text
469
226
  end
227
+
228
+ element = method[0..method.index("_") - 1]
229
+
230
+ alias_method "#{identifier}_#{element}".to_sym, "#{identifier}_object".to_sym
231
+ alias_method "#{identifier}?".to_sym, "#{identifier}_exists?".to_sym
232
+ alias_method "#{identifier}_?".to_sym, "#{identifier}_visible?".to_sym
233
+ alias_method "#{identifier}!".to_sym, "#{identifier}_enabled?".to_sym
470
234
  end
235
+
471
236
  end # module: Generators
472
237
  end # module: Symbiont