symbiont 0.1.7 → 0.1.8

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