testcentricity_web 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acada2c571dec453cbec4de28d0607efc44e267e
4
- data.tar.gz: 49a1f4ae2be03a57ed4d833b100c956fb5aaa493
3
+ metadata.gz: 2f494b9af6b3241d6335a6f393c9b7d0e11c7243
4
+ data.tar.gz: e662186ea64b03aee0b5ec7d03dce83dcbac38f9
5
5
  SHA512:
6
- metadata.gz: 9e6a07b4c065fce75e4cad743db595fef512d9fb34ff4e7bce6cc9ac18fd19266b871042bd43054787e0f06efc5f83ea219b5d357d1fd6a4fb2160113145372a
7
- data.tar.gz: a8dd9f0535d3a02ce200de98a6bee4a56d465f3d294b7f0c1935503b1f990b44da05d4fc116094133f92ca4fdf9dfd51992ac360a595a3e3dc8fb0c285f66e7c
6
+ metadata.gz: 58740657c8799577dc74e5aa9b642a35481e299d3d4f029e50a08bfb6d4397964ba7a78d4ed2703532f3022763542fcd6b17f091c36ad3538cf76df4769ac63f
7
+ data.tar.gz: d50fa04094bdcd160314e6c408540b9deecdf8552cc32d6d37449e034543b1fcd24b6085058ee489616ead22b3155d648cf77d0df66adc723340e9f785279abe
data/README.md CHANGED
@@ -164,6 +164,30 @@ You define your page's **Traits** as shown below:
164
164
  label :error_message_label, 'div#statusBar.login-error'
165
165
  end
166
166
 
167
+
168
+ class RegistrationPage < TestCentricity::PageObject
169
+ trait(:page_name) { 'Registration' }
170
+ trait(:page_url) { '/register' }
171
+ trait(:page_locator) { 'body.registration' }
172
+
173
+ # Registration page UI elements
174
+ textfields first_name_field: 'input#firstName',
175
+ last_name_field: 'input#lastName',
176
+ email_field: 'input#email',
177
+ phone_number_field: 'input#phone',
178
+ address_field: 'input#streetAddress',
179
+ city_field: 'input#city',
180
+ post_code_field: 'input#postalCode',
181
+ password_field: 'input#password',
182
+ pword_confirm_field: 'input#passwordConfirmation'
183
+ selectlists title_select: 'select#title',
184
+ gender_select: 'select#gender',
185
+ state_select: 'select#stateProvince'
186
+ checkbox :email_opt_in_check, 'input#marketingEmailsOptIn'
187
+ button :sign_up_button, 'button#registrationSignUp'
188
+ end
189
+
190
+
167
191
  Once your **Page Objects** have been instantiated, you can interact with the **UI Elements** in your **Page Objects**. An example is shown
168
192
  below:
169
193
 
@@ -214,6 +238,48 @@ the UI to hide implementation details, as shown below:
214
238
  super
215
239
  end
216
240
  end
241
+
242
+
243
+ class RegistrationPage < TestCentricity::PageObject
244
+ trait(:page_name) { 'Registration' }
245
+ trait(:page_url) { '/register' }
246
+ trait(:page_locator) { 'body.registration' }
247
+
248
+ # Registration page UI elements
249
+ textfields first_name_field: 'input#firstName',
250
+ last_name_field: 'input#lastName',
251
+ email_field: 'input#email',
252
+ phone_number_field: 'input#phone',
253
+ address_field: 'input#streetAddress',
254
+ city_field: 'input#city',
255
+ post_code_field: 'input#postalCode',
256
+ password_field: 'input#password',
257
+ pword_confirm_field: 'input#passwordConfirmation'
258
+ selectlists title_select: 'select#title',
259
+ gender_select: 'select#gender',
260
+ state_select: 'select#stateProvince'
261
+ checkbox :email_opt_in_check, 'input#marketingEmailsOptIn'
262
+ button :sign_up_button, 'button#registrationSignUp'
263
+
264
+ def enter_profile_data(profile)
265
+ fields = { title_select => profile.title,
266
+ first_name_field => profile.first_name,
267
+ last_name_field => profile.last_name,
268
+ gender_select => profile.gender,
269
+ phone_number_field => profile.phone,
270
+ email_field => profile.email,
271
+ address_field => profile.address,
272
+ city_field => profile.city,
273
+ state_select => profile.state,
274
+ post_code_field => profile.postal_code,
275
+ password_field => profile.password,
276
+ pword_confirm_field => profile.confirm_password
277
+ }
278
+ populate_data_fields(fields)
279
+ sign_up_button.click
280
+ end
281
+ end
282
+
217
283
 
218
284
 
219
285
  Once your **Page Objects** have been instantiated, you can call your methods as shown below:
@@ -394,7 +460,7 @@ Include the step definitions and code below in a `page_steps.rb` or `generic_ste
394
460
 
395
461
  include TestCentricity
396
462
 
397
- Given(/^I am (?:on|viewing) the ([^\"]*) page$/) do |page_name|
463
+ Given(/^I am on the ([^\"]*) page$/) do |page_name|
398
464
  target_page = page_dispatcher(page_name)
399
465
  target_page.load_page if target_page
400
466
  PageManager.set_current_page(target_page)
@@ -421,7 +487,7 @@ Include the step definitions and code below in a `page_steps.rb` or `generic_ste
421
487
  end
422
488
 
423
489
 
424
- # this method that takes a page name as a parameter and returns an instance of the associated Page Object
490
+ # this method takes a page name as a parameter and returns an instance of the associated Page Object
425
491
  def page_dispatcher(page_name)
426
492
  page = PageManager.find_page(page_name)
427
493
  raise "No page object defined for page named '#{page_name}'" unless page
@@ -13,5 +13,19 @@ module TestCentricity
13
13
  page.attach_file(@locator, file_path)
14
14
  Capybara.ignore_hidden_elements = true
15
15
  end
16
+
17
+ def drop_files(files)
18
+ js_script = "fileList = Array();"
19
+ files.count.times do |i|
20
+ # generate a fake input selector
21
+ page.execute_script("if ($('#seleniumUpload#{i}').length == 0) { seleniumUpload#{i} = window.$('<input/>').attr({id: 'seleniumUpload#{i}', type:'file'}).appendTo('body'); }")
22
+ # attach file to the fake input selector through Capybara
23
+ attach_file("seleniumUpload#{i}", files[i])
24
+ # create the fake js event
25
+ js_script = "#{js_script} fileList.push(seleniumUpload#{i}.get(0).files[0]);"
26
+ end
27
+ # trigger the fake drop event
28
+ page.execute_script("#{js_script} e = $.Event('drop'); e.originalEvent = {dataTransfer : { files : fileList } }; $('##{@locator}').trigger(e);")
29
+ end
16
30
  end
17
31
  end
@@ -112,6 +112,15 @@ module TestCentricity
112
112
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::CheckBox.new(self, "#{locator}", :page, #{proxy});end))
113
113
  end
114
114
 
115
+ # Declare and instantiate a collection of checkboxes for this page object.
116
+ #
117
+ # @param element_hash [Hash] names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes
118
+ # @example
119
+ # checkboxes hazmat_certified_check: 'input#hazmatCertified',
120
+ # epa_certified_check: 'input#epaCertified',
121
+ # dhs_certified_check: 'input#homelandSecurityCertified',
122
+ # carb_compliant_check: 'input#carbCompliant'
123
+ #
115
124
  def self.checkboxes(element_hash)
116
125
  element_hash.each do |element_name, locator|
117
126
  checkbox(element_name, locator)
@@ -131,6 +140,15 @@ module TestCentricity
131
140
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::Radio.new(self, "#{locator}", :page, #{proxy});end))
132
141
  end
133
142
 
143
+ # Declare and instantiate a collection of radio buttons for this page object.
144
+ #
145
+ # @param element_hash [Hash] names of radio buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies radio buttons
146
+ # @example
147
+ # radios visa_radio: 'input#payWithVisa',
148
+ # mastercard_radio: 'input#payWithMastercard',
149
+ # discover_radio: 'input#payWithDiscover',
150
+ # amex_radio: 'input#payWithAmEx'
151
+ #
134
152
  def self.radios(element_hash)
135
153
  element_hash.each do |element_name, locator|
136
154
  radio(element_name, locator)
@@ -39,6 +39,14 @@ module TestCentricity
39
39
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::UIElement.new(self, "#{locator}", :section);end))
40
40
  end
41
41
 
42
+ # Declare and instantiate a collection of generic UI Elements for this page section.
43
+ #
44
+ # @param element_hash [Hash] names of UI objects (as a symbol) and CSS selectors or XPath expressions that uniquely identifies objects
45
+ # @example
46
+ # elements profile_item: 'a#profile',
47
+ # settings_item: 'a#userPreferencesTrigger',
48
+ # log_out_item: 'a#logout'
49
+ #
42
50
  def self.elements(element_hash)
43
51
  element_hash.each do |element_name, locator|
44
52
  element(element_name, locator)
@@ -57,6 +65,14 @@ module TestCentricity
57
65
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::Button.new(self, "#{locator}", :section);end))
58
66
  end
59
67
 
68
+ # Declare and instantiate a collection of buttons for this page section.
69
+ #
70
+ # @param element_hash [Hash] names of buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies buttons
71
+ # @example
72
+ # buttons new_account_button: 'button#new-account',
73
+ # save_button: 'button#save',
74
+ # cancel_button: 'button#cancel'
75
+ #
60
76
  def self.buttons(element_hash)
61
77
  element_hash.each do |element_name, locator|
62
78
  button(element_name, locator)
@@ -75,6 +91,16 @@ module TestCentricity
75
91
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::TextField.new(self, "#{locator}", :section);end))
76
92
  end
77
93
 
94
+ # Declare and instantiate a collection of text fields for this page section.
95
+ #
96
+ # @param element_hash [Hash] names of text fields (as a symbol) and CSS selectors or XPath expressions that uniquely identifies text fields
97
+ # @example
98
+ # textfields name_field: 'input#Name',
99
+ # title_field: 'input#Title',
100
+ # phone_field: 'input#PhoneNumber',
101
+ # fax_field: 'input#FaxNumber',
102
+ # email_field: 'input#Email'
103
+ #
78
104
  def self.textfields(element_hash)
79
105
  element_hash.each do |element_name, locator|
80
106
  textfield(element_name, locator)
@@ -94,6 +120,15 @@ module TestCentricity
94
120
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::CheckBox.new(self, "#{locator}", :section, #{proxy});end))
95
121
  end
96
122
 
123
+ # Declare and instantiate a collection of checkboxes for this page section.
124
+ #
125
+ # @param element_hash [Hash] names of checkboxes (as a symbol) and CSS selectors or XPath expressions that uniquely identifies checkboxes
126
+ # @example
127
+ # checkboxes hazmat_certified_check: 'input#hazmatCertified',
128
+ # epa_certified_check: 'input#epaCertified',
129
+ # dhs_certified_check: 'input#homelandSecurityCertified',
130
+ # carb_compliant_check: 'input#carbCompliant'
131
+ #
97
132
  def self.checkboxes(element_hash)
98
133
  element_hash.each do |element_name, locator|
99
134
  checkbox(element_name, locator)
@@ -113,6 +148,15 @@ module TestCentricity
113
148
  class_eval(%Q(def #{element_name.to_s};@#{element_name.to_s} ||= TestCentricity::Radio.new(self, "#{locator}", :section, #{proxy});end))
114
149
  end
115
150
 
151
+ # Declare and instantiate a collection of radio buttons for this page section.
152
+ #
153
+ # @param element_hash [Hash] names of radio buttons (as a symbol) and CSS selectors or XPath expressions that uniquely identifies radio buttons
154
+ # @example
155
+ # radios visa_radio: 'input#payWithVisa',
156
+ # mastercard_radio: 'input#payWithMastercard',
157
+ # discover_radio: 'input#payWithDiscover',
158
+ # amex_radio: 'input#payWithAmEx'
159
+ #
116
160
  def self.radios(element_hash)
117
161
  element_hash.each do |element_name, locator|
118
162
  radio(element_name, locator)
@@ -348,6 +392,34 @@ module TestCentricity
348
392
  raise "Section #{get_locator} remained visible after #{timeout} seconds" if exists?
349
393
  end
350
394
 
395
+ # Wait until the Section object is visible, or until the specified wait time has expired.
396
+ #
397
+ # @param seconds [Integer or Float] wait time in seconds
398
+ # @example
399
+ # bar_chart_section.wait_until_visible(0.5)
400
+ #
401
+ def wait_until_visible(seconds = nil)
402
+ timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
403
+ wait = Selenium::WebDriver::Wait.new(timeout: timeout)
404
+ wait.until { visible? }
405
+ rescue
406
+ raise "Could not find section #{get_locator} after #{timeout} seconds" unless visible?
407
+ end
408
+
409
+ # Wait until the Section object is hidden, or until the specified wait time has expired.
410
+ #
411
+ # @param seconds [Integer or Float] wait time in seconds
412
+ # @example
413
+ # bar_chart_section.wait_until_hidden(10)
414
+ #
415
+ def wait_until_hidden(seconds = nil)
416
+ timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
417
+ wait = Selenium::WebDriver::Wait.new(timeout: timeout)
418
+ wait.until { hidden? }
419
+ rescue
420
+ raise "section #{get_locator} remained visible after #{timeout} seconds" if visible?
421
+ end
422
+
351
423
  # Click at a specific location within a Section object
352
424
  #
353
425
  # @param x [Integer] X offset
@@ -208,6 +208,20 @@ module TestCentricity
208
208
  raise "Could not find element #{@locator} after #{timeout} seconds" unless exists?
209
209
  end
210
210
 
211
+ # Wait until the object no longer exists, or until the specified wait time has expired.
212
+ #
213
+ # @param seconds [Integer or Float] wait time in seconds
214
+ # @example
215
+ # logout_button.wait_until_gone(5)
216
+ #
217
+ def wait_until_gone(seconds = nil)
218
+ timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
219
+ wait = Selenium::WebDriver::Wait.new(timeout: timeout)
220
+ wait.until { !exists? }
221
+ rescue
222
+ raise "Element #{@locator} remained visible after #{timeout} seconds" if exists?
223
+ end
224
+
211
225
  # Wait until the object is visible, or until the specified wait time has expired.
212
226
  #
213
227
  # @param seconds [Integer or Float] wait time in seconds
@@ -219,21 +233,21 @@ module TestCentricity
219
233
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
220
234
  wait.until { visible? }
221
235
  rescue
222
- raise "Could not find element #{@locator} after #{timeout} seconds" unless exists?
236
+ raise "Could not find element #{@locator} after #{timeout} seconds" unless visible?
223
237
  end
224
238
 
225
- # Wait until the object no longer exists, or until the specified wait time has expired.
239
+ # Wait until the object is hidden, or until the specified wait time has expired.
226
240
  #
227
241
  # @param seconds [Integer or Float] wait time in seconds
228
242
  # @example
229
- # logout_button.wait_until_gone(5)
243
+ # run_button.wait_until_hidden(10)
230
244
  #
231
- def wait_until_gone(seconds = nil)
245
+ def wait_until_hidden(seconds = nil)
232
246
  timeout = seconds.nil? ? Capybara.default_max_wait_time : seconds
233
247
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
234
- wait.until { !exists? }
248
+ wait.until { hidden? }
235
249
  rescue
236
- raise "Element #{@locator} remained visible after #{timeout} seconds" if exists?
250
+ raise "Element #{@locator} remained visible after #{timeout} seconds" if visible?
237
251
  end
238
252
 
239
253
  # Wait until the object's value equals the specified value, or until the specified wait time has expired.
@@ -1,3 +1,3 @@
1
1
  module TestCentricityWeb
2
- VERSION = '1.0.5'
2
+ VERSION = '1.0.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testcentricity_web
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - A.J. Mrozinski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-25 00:00:00.000000000 Z
11
+ date: 2016-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler