rspectacular 0.59.0 → 0.60.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 518e8ab77fb5e944ffecc5a1729af3080d7ce3f3
4
- data.tar.gz: 38f877cfe84ea46cc1f1056d0af9cbb1aedf71df
3
+ metadata.gz: 720ff48263cc9da21445eda39124f3f1d0e8c542
4
+ data.tar.gz: c19e3b6bdde3dcab7d4b86426cad8ca3c964eb78
5
5
  SHA512:
6
- metadata.gz: 367b3801e773b7c33d7d6b08d1c603a2a240df4ca941b25215c1c8f2ec607ad225f518651ef9fe4ef0183f732bfffb24c8c9f9cfd5cb46a29c06456e7be93253
7
- data.tar.gz: 804fe568178a80ffbaff06854473950bdc9a971abf5474135512e5f6bf5e876c276d747deb1ca1d8de28816704fba8f07ad67b8cd17bf7d3282e7e1be174efe9
6
+ metadata.gz: 5a445a6a7c9eed223b66aee4802c37e26265b6b6ccd015d8a6ed55baaaff9c0e3b52638f4ef9eaadf9f2bbe63d24fe4d0428f3d8372c5be0e48be01cf4bf120f
7
+ data.tar.gz: c6cb933de456a1dde23eff06b2c6388fe8b25537a463795c28a4c7b36d216c70f59baab1420d437c7b227088123f59e35b551657ff72732eef541480cbf3eace
data/lib/rspectacular.rb CHANGED
@@ -1,10 +1,8 @@
1
1
  # These Plugins Must Be Loaded Before Anything Else
2
2
  require 'rspectacular/plugins/code_climate'
3
3
  require 'rspectacular/plugins/simple_cov'
4
- require 'rspectacular/plugins/capybara'
5
4
 
6
5
  require 'rspectacular/support'
7
6
  require 'rspectacular/helpers'
8
- require 'rspectacular/selectors'
9
7
  require 'rspectacular/plugins'
10
- require 'rspectacular/matchers'
8
+ # require 'rspectacular/matchers'
@@ -1,8 +1,3 @@
1
1
  require 'rspectacular/helpers/factories'
2
2
  require 'rspectacular/helpers/null_objects'
3
- require 'rspectacular/helpers/rails_flashes'
4
3
  require 'rspectacular/helpers/session_helpers'
5
-
6
- if defined?(Capybara::Driver::Base)
7
- Dir[File.expand_path('../helpers/**/*.rb', __FILE__)].each { |f| require f }
8
- end
@@ -1,3 +1,3 @@
1
1
  Dir[File.expand_path('../plugins/**/*.rb', __FILE__)].
2
- reject { |filename| filename.match /(capybara|code_climate|simple_cov)\.rb\z/ }.
2
+ reject { |filename| filename.match /(code_climate|simple_cov)\.rb\z/ }.
3
3
  each { |filename| require filename }
@@ -0,0 +1,4 @@
1
+ begin
2
+ require 'fakeredis/rspec'
3
+ rescue LoadError
4
+ end
@@ -0,0 +1,4 @@
1
+ begin
2
+ require 'test_after_commit'
3
+ rescue LoadError
4
+ end
@@ -1,5 +1,4 @@
1
1
  RSpec.configure do |config|
2
- # Configure RSpec to run focused specs, and also respect the alias 'fit' for focused specs
3
2
  config.filter_run :focused => true
4
3
  config.alias_example_to :fit, :focused => true
5
4
  config.run_all_when_everything_filtered = true
@@ -1,4 +1,3 @@
1
1
  RSpec.configure do |config|
2
- # Configure RSpec to respect the alias 'pit' for pending specs
3
2
  config.alias_example_to :pit, :pending => true
4
3
  end
@@ -1,3 +1,3 @@
1
1
  module Rspectacular
2
- VERSION = '0.59.0'
2
+ VERSION = '0.60.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspectacular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.59.0
4
+ version: 0.60.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jfelchner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-07 00:00:00.000000000 Z
11
+ date: 2015-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -52,22 +52,9 @@ files:
52
52
  - bin/rspectacular_test_bootstrap
53
53
  - lib/rspectacular.rb
54
54
  - lib/rspectacular/helpers.rb
55
- - lib/rspectacular/helpers/date_time_select.rb
56
- - lib/rspectacular/helpers/dialog.rb
57
- - lib/rspectacular/helpers/facebook.rb
58
55
  - lib/rspectacular/helpers/factories.rb
59
56
  - lib/rspectacular/helpers/null_objects.rb
60
- - lib/rspectacular/helpers/paypal.rb
61
- - lib/rspectacular/helpers/rails_flashes.rb
62
57
  - lib/rspectacular/helpers/session_helpers.rb
63
- - lib/rspectacular/matchers.rb
64
- - lib/rspectacular/matchers/active_record.rb
65
- - lib/rspectacular/matchers/active_record/date_range_matcher.rb
66
- - lib/rspectacular/matchers/active_record/dateliness_matcher.rb
67
- - lib/rspectacular/matchers/active_record/persistence_matcher.rb
68
- - lib/rspectacular/matchers/active_record/positivity_matcher.rb
69
- - lib/rspectacular/matchers/active_record/truthfulness_matcher.rb
70
- - lib/rspectacular/matchers/authentication.rb
71
58
  - lib/rspectacular/mock_authentications/omniauth.rb
72
59
  - lib/rspectacular/mock_authentications/omniauth/ebay.rb
73
60
  - lib/rspectacular/mock_authentications/omniauth/facebook.rb
@@ -75,16 +62,15 @@ files:
75
62
  - lib/rspectacular/plugins.rb
76
63
  - lib/rspectacular/plugins/authentication.rb
77
64
  - lib/rspectacular/plugins/bullet.rb
78
- - lib/rspectacular/plugins/capybara.rb
79
65
  - lib/rspectacular/plugins/carrier_wave.rb
80
66
  - lib/rspectacular/plugins/code_climate.rb
81
67
  - lib/rspectacular/plugins/database_cleaner.rb
82
68
  - lib/rspectacular/plugins/devise.rb
83
69
  - lib/rspectacular/plugins/email.rb
84
70
  - lib/rspectacular/plugins/factory_girl.rb
71
+ - lib/rspectacular/plugins/fakeredis.rb
85
72
  - lib/rspectacular/plugins/features.rb
86
73
  - lib/rspectacular/plugins/omniauth.rb
87
- - lib/rspectacular/plugins/paypal.rb
88
74
  - lib/rspectacular/plugins/rails/engine.rb
89
75
  - lib/rspectacular/plugins/rails/strong_parameters.rb
90
76
  - lib/rspectacular/plugins/recaptcha.rb
@@ -94,11 +80,10 @@ files:
94
80
  - lib/rspectacular/plugins/simple_cov.rb
95
81
  - lib/rspectacular/plugins/singleton.rb
96
82
  - lib/rspectacular/plugins/stripe.rb
83
+ - lib/rspectacular/plugins/test_after_commit.rb
97
84
  - lib/rspectacular/plugins/timecop.rb
98
85
  - lib/rspectacular/plugins/vcr.rb
99
86
  - lib/rspectacular/plugins/webmock.rb
100
- - lib/rspectacular/selectors.rb
101
- - lib/rspectacular/selectors/defaults.rb
102
87
  - lib/rspectacular/spec_helpers/active_record_basic.rb
103
88
  - lib/rspectacular/spec_helpers/active_record_connection_setup.rb
104
89
  - lib/rspectacular/spec_helpers/rails_engine.rb
@@ -1,35 +0,0 @@
1
- ###
2
- # Unscrupulously stolen from: https://raw.github.com/cucumber/cucumber-rails/master/lib/cucumber/rails/capybara/select_dates_and_times.rb
3
- #
4
- def select_date(date, options = {})
5
- date = Time.parse(date)
6
- base_dom_id = get_base_dom_id_from_label_tag(options[:from])
7
-
8
- page.execute_script %Q{$("##{base_dom_id}_1i").val("#{date.strftime('%Y')}")}
9
- page.execute_script %Q{$("##{base_dom_id}_2i").val("#{date.strftime('%m')}")}
10
- page.execute_script %Q{$("##{base_dom_id}_3i").val("#{date.strftime('%d')}")}
11
- page.execute_script %Q{$("##{base_dom_id}_datepicker").val("#{date.strftime('%m/%d/%Y')}")}
12
- page.execute_script %Q{$("##{base_dom_id}_datepicker").change()}
13
- end
14
-
15
- def select_time(time, options = {})
16
- time = Time.zone.parse(time)
17
- base_dom_id = get_base_dom_id_from_label_tag(options[:from])
18
-
19
- find(:xpath, ".//select[@id='#{base_dom_id}_4i']").select(time.strftime '%I %p')
20
- find(:xpath, ".//select[@id='#{base_dom_id}_5i']").select(time.min.to_s.rjust(2, '0'))
21
-
22
- page.execute_script %Q{$("##{base_dom_id}_datepicker").change()}
23
- end
24
-
25
- def select_datetime(datetime, options = {})
26
- select_date(datetime, options)
27
- select_time(datetime, options)
28
- end
29
-
30
- private
31
-
32
- # @example "event_starts_at_"
33
- def get_base_dom_id_from_label_tag(field)
34
- find(:xpath, ".//label[contains(., '#{field}')]")['for'].gsub(/(_[1-5]i)$/, '')
35
- end
@@ -1,3 +0,0 @@
1
- def confirm_dialog
2
- page.evaluate_script('window.confirm = function() { return true; }')
3
- end
@@ -1,59 +0,0 @@
1
- def fill_in_facebook_login_form(options = {})
2
- facebook_user = options[:with]
3
-
4
- sleep 1
5
-
6
- within sf('the Facebook login form') do
7
- fill_in 'Email', :with => facebook_user['email']
8
- fill_in 'Password', :with => facebook_user['password']
9
- click_link_or_button 'Log In'
10
- end
11
- end
12
-
13
- def log_in_to_facebook(user)
14
- ###
15
- # We use this URL due to how selenium throws an error if you
16
- # interact with items that are off the visible area of the
17
- # page
18
- #
19
- visit 'https://www.facebook.com/login.php'
20
-
21
- sleep 3
22
-
23
- fill_in 'Email', :with => user['email']
24
- fill_in 'Password', :with => user['password']
25
-
26
- click_link_or_button 'Log In'
27
- end
28
-
29
- def log_out_of_facebook
30
- click_link idsf('the Facebook account menu')
31
- click_button 'Log Out'
32
- end
33
-
34
- def authenticate_with_facebook
35
- visit '/users/auth/facebook'
36
- end
37
-
38
- def click_facebook_tab(tab_name)
39
- find(:xpath, %Q{.//span[starts-with(., '#{tab_name}')]/../..}).click()
40
- end
41
-
42
- def remove_app_from_authorized_apps_at_facebook(app_name)
43
- visit 'http://www.facebook.com/settings?tab=applications'
44
-
45
- page.should_not have_content 'You have not authorized any apps to interact with your Facebook account.'
46
- page.should have_content app_name
47
-
48
- find("input[type='button'][title='Remove']").click()
49
-
50
- sleep 1
51
-
52
- click_link_or_button 'Remove'
53
-
54
- sleep 1
55
-
56
- page.should_not have_content app_name
57
-
58
- log_out_of_facebook
59
- end
@@ -1,30 +0,0 @@
1
- def log_in_to_paypal_sandbox(email, password)
2
- visit 'https://developer.paypal.com'
3
-
4
- if page.has_button? 'Log In'
5
- fill_in 'Email', :with => email
6
- fill_in 'Password', :with => password
7
- click_link_or_button 'Log In'
8
- end
9
- end
10
-
11
- def log_out_of_paypal
12
- visit 'https://www.paypal.com/us/cgi-bin/webscr?cmd=_logout'
13
- end
14
-
15
- def log_out_of_paypal_sandbox
16
- visit 'https://developer.paypal.com'
17
-
18
- if page.has_link? 'Log Out'
19
- click_link 'Log Out'
20
- end
21
- end
22
-
23
- def fill_in_paypal_login_form(email, password)
24
- fill_in 'Email', :with => email
25
- fill_in 'PayPal password', :with => password
26
- click_link_or_button 'Log In'
27
-
28
- check 'esignOpt'
29
- click_link_or_button 'Agree and Continue'
30
- end
@@ -1,15 +0,0 @@
1
- def flash_message
2
- fsf('the flash').text
3
- end
4
-
5
- def flash_alert
6
- fsf('the flash alert').text
7
- end
8
-
9
- def flash_warning
10
- fsf('the flash warning').text
11
- end
12
-
13
- def flash_notice
14
- fsf('the flash notice').text
15
- end
@@ -1,2 +0,0 @@
1
- require 'rspectacular/matchers/active_record'
2
- require 'rspectacular/matchers/authentication'
@@ -1,13 +0,0 @@
1
- if defined? ActiveRecord
2
- # require 'rspectacular/active_record/date_range_matcher'
3
- # require 'rspectacular/active_record/dateliness_matcher'
4
- # require 'rspectacular/active_record/persistence_matcher'
5
- # require 'rspectacular/active_record/positivity_matcher'
6
- # require 'rspectacular/active_record/truthfulness_matcher'
7
-
8
- # module RSpec
9
- # module Matchers
10
- # include Rspectacular::ActiveRecord::Matchers
11
- # end
12
- # end
13
- end
@@ -1,47 +0,0 @@
1
- module Rspectacular
2
- module ActiveRecord
3
- module Matchers
4
- class DateRangeMatcher
5
- include Shoulda::ActiveRecord::Helpers
6
-
7
- def initialize(dates)
8
- @begin_field = dates[:from].to_s
9
- @end_field = dates[:to].to_s
10
-
11
- @begin_method = "#{dates[:from].to_s}=".to_sym
12
- @end_method = "#{dates[:to].to_s}=".to_sym
13
- end
14
-
15
- def matches?(rangeable)
16
- @rangeable = rangeable
17
- beginning_date = Date.today
18
- ending_date = Date.today - 1
19
-
20
- rangeable.send(@begin_method, beginning_date)
21
- rangeable.send(@end_method, ending_date)
22
-
23
- rangeable.valid?
24
-
25
- rangeable.errors[@begin_field].include?("must be on or before #{ending_date.to_s}") &&
26
- rangeable.errors[@end_field].include?("must be on or after #{beginning_date.to_s}")
27
- end
28
-
29
- def failure_message
30
- "#{@rangeable_class} should only accept a valid date range from #{@begin_field} to #{@end_field}, got: #{pretty_error_messages(@rangeable)}"
31
- end
32
-
33
- def negative_failure_message
34
- "#{@rangeable_class} shouldn't accept a valid date range from #{@begin_field} to #{@end_field}, got: #{pretty_error_messages(@rangeable)}"
35
- end
36
-
37
- def description
38
- "should be contain a valid range for #{@rangeable_class}"
39
- end
40
- end
41
-
42
- def validate_date_range(dates)
43
- DateRangeMatcher.new(dates)
44
- end
45
- end
46
- end
47
- end
@@ -1,39 +0,0 @@
1
- module Rspectacular
2
- module ActiveRecord
3
- module Matchers
4
- class DatelinessMatcher
5
- include Shoulda::ActiveRecord::Helpers
6
-
7
- def initialize(date_field)
8
- @date_field = date_field.to_s
9
- @date_method = "#{date_field.to_s}=".to_sym
10
- end
11
-
12
- def matches?(dateable)
13
- @dateable = dateable
14
- dateable.send(@date_method, Date.today)
15
-
16
- dateable.valid?
17
-
18
- !dateable.errors[@date_field].include?("is not a valid date")
19
- end
20
-
21
- def failure_message
22
- "Expected #{@date_field} to contain a valid date, got: #{pretty_error_messages(@dateable)}"
23
- end
24
-
25
- def negative_failure_message
26
- "Expected #{@date_field} to contain an invalid date, got: #{pretty_error_messages(@dateable)}"
27
- end
28
-
29
- def description
30
- "should be contain a valid date"
31
- end
32
- end
33
-
34
- def validate_dateliness_of(date)
35
- DatelinessMatcher.new(date)
36
- end
37
- end
38
- end
39
- end
@@ -1,37 +0,0 @@
1
- module Rspectacular
2
- module ActiveRecord
3
- module Matchers
4
- class PersistenceMatcher
5
- def initialize(persistable, options)
6
- @persistable_class = persistable.is_a?(Class) ? persistable : persistable.class
7
- @desired_attributes = options[:with] || persistable.attributes
8
- @desired_attributes = @desired_attributes.reject {|k,v| ['id', 'created_at', 'updated_at'].include? k}
9
- end
10
-
11
- def matches?(subject)
12
- @persistable_class.where(@desired_attributes).first
13
- end
14
-
15
- def failure_message
16
- "Expected to find an object saved with #{@desired_attributes}, didn't find one."
17
- end
18
-
19
- def negative_failure_message
20
- "Didn't expect to find an object saved with #{@desired_attributes}, but got one anyway"
21
- end
22
-
23
- def description
24
- "should be an instance of #{@expected_class_name}"
25
- end
26
- end
27
-
28
- def persist(desired_object, options = {})
29
- PersistenceMatcher.new(desired_object, options)
30
- end
31
-
32
- alias :persist_the :persist
33
- alias :persist_a :persist
34
- alias :persist_an :persist
35
- end
36
- end
37
- end
@@ -1,39 +0,0 @@
1
- module Rspectacular
2
- module ActiveRecord
3
- module Matchers
4
- class PositivityMatcher < Shoulda::ActiveRecord::Matchers::ValidateNumericalityOfMatcher
5
- def matches?(positivitable)
6
- super(positivitable)
7
-
8
- disallows_zero_values &&
9
- disallows_negative_values
10
- end
11
-
12
- def failure_message
13
- "Expected #{@attribute.to_s} to be a positive number, got: #{pretty_error_messages(@attribute)}"
14
- end
15
-
16
- def negative_failure_message
17
- "Expected #{@attribute.to_s} to be a negative number, got: #{pretty_error_messages(@attribute)}"
18
- end
19
-
20
- def disallows_negative_values
21
- disallows_value_of(-1) &&
22
- disallows_value_of(-100)
23
- end
24
-
25
- def disallows_zero_values
26
- disallows_value_of(0)
27
- end
28
-
29
- def description
30
- "should be contain a positive number"
31
- end
32
- end
33
-
34
- def validate_positivity_of(date)
35
- PositivityMatcher.new(date)
36
- end
37
- end
38
- end
39
- end
@@ -1,35 +0,0 @@
1
- module Rspectacular
2
- module ActiveRecord
3
- module Matchers
4
- class TruthfulnessMatcher < Shoulda::ActiveRecord::Matchers::ValidationMatcher
5
- def matches?(truthable)
6
- super(truthable)
7
-
8
- allows_true &&
9
- allows_false &&
10
- disallows_nil
11
- end
12
-
13
- def allows_true
14
- allows_value_of(true)
15
- end
16
-
17
- def allows_false
18
- allows_value_of(false)
19
- end
20
-
21
- def disallows_nil
22
- disallows_value_of(nil)
23
- end
24
-
25
- def description
26
- "should accept only boolean true or false values"
27
- end
28
- end
29
-
30
- def validate_truthfulness_of(truthteller)
31
- TruthfulnessMatcher.new(truthteller)
32
- end
33
- end
34
- end
35
- end
@@ -1,39 +0,0 @@
1
- module Rspectacular
2
- module Matchers
3
- module Authentication
4
- def it_should_require_authentication_for(*actions)
5
- actions.each do |action_parts|
6
- method, action, params = action_parts
7
-
8
- params ||= {}
9
- params.reverse_merge! :id => 1
10
-
11
- it "#{method.upcase} ##{action} should require login" do
12
- send(method, action, params)
13
-
14
- response.should redirect_to(new_user_session_path)
15
- end
16
- end
17
- end
18
-
19
- def it_should_not_require_authentication_for(*actions)
20
- actions.each do |action_parts|
21
- method, action, params = action_parts
22
-
23
- params ||= {}
24
- params.reverse_merge! :id => 1
25
-
26
- it "#{method.upcase} ##{action} should not require login" do
27
- send(method, action, params)
28
-
29
- response.should_not redirect_to(new_user_session_path)
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
-
37
- RSpec.configure do |config|
38
- config.extend Rspectacular::Matchers::Authentication, :type => :controller
39
- end
@@ -1,48 +0,0 @@
1
- ##############################################################################
2
- # Capybara Plugin
3
- ##############################################################################
4
- #
5
- # This plugin does not attempt to require capybara. It assumes that if you're
6
- # using capybara, you're probably using something like Bundler which has already
7
- # required it for you.
8
- #
9
- # If this is not the case, you will need to require it prior to requiring
10
- # rspectacular.
11
- #
12
- # The same goes for capybara-webkit. It must be required before rspectacular.
13
- #
14
- begin
15
- require 'capybara/rspec'
16
- require 'capybara/rails'
17
-
18
- if defined?(Capybara::Driver::Base)
19
- Capybara.register_driver :chrome do |app|
20
- Capybara::Selenium::Driver.new(app, :browser => :chrome)
21
- end
22
-
23
- if defined?(Capybara::Webkit)
24
- Capybara.javascript_driver = :webkit
25
- else
26
- Capybara.javascript_driver = :selenium
27
- end
28
-
29
- RSpec.configure do |config|
30
- config.before(:each, :js => true) do
31
- page.driver.reset!
32
- end
33
- end
34
-
35
- Capybara.configure do |config|
36
- config.match = :prefer_exact
37
- config.ignore_hidden_elements = true
38
- config.visible_text_only = true
39
- end
40
-
41
- if defined?(Chamber)
42
- Capybara.default_host = Chamber.env.http.host_with_port
43
- Capybara.app_host = Chamber.env.http.base_url
44
- Capybara.server_port = Chamber.env.http.port
45
- end
46
- end
47
- rescue LoadError
48
- end
@@ -1,11 +0,0 @@
1
- ##############################################################################
2
- # PayPal Plugin
3
- ##############################################################################
4
-
5
- RSpec.configure do |config|
6
- config.before(:each, :js => true, :paypal => true) do
7
- require 'rspectacular/helpers/paypal'
8
-
9
- log_in_to_paypal_sandbox
10
- end
11
- end
@@ -1,28 +0,0 @@
1
- require File.expand_path('../selectors/defaults', __FILE__)
2
-
3
- def fsf(*args)
4
- selector = sf(*args)
5
- selector_format = selector.starts_with?('.//') ? :xpath : :css
6
-
7
- page.find(selector_format, selector)
8
- end
9
-
10
- def idsf(*args)
11
- id_selector = sf(*args)
12
- id_selector.starts_with?('#') ? id_selector[1..-1] : id_selector
13
- end
14
-
15
- def sf(*args)
16
- selector_description = args[0]
17
- selector_entry = Rspectacular.selectors.find { |regex, selector| selector_description.match regex }
18
-
19
- fail "Cannot find selector for '#{selector_description}'. Please add it to the list of selectors." if selector_entry.nil?
20
-
21
- selector = selector_entry[1]
22
-
23
- if selector.respond_to? :call
24
- selector.call(*args)
25
- else
26
- selector
27
- end
28
- end
@@ -1,55 +0,0 @@
1
- module Rspectacular
2
- def self.selectors
3
- default_selectors
4
- end
5
-
6
- def self.default_selectors
7
- {
8
- /the Facebook application/ => lambda do
9
- frame_element = find 'html#facebook div#pagelet_app_runner iframe'
10
- frame_element[:id]
11
- end,
12
-
13
- /the flash(.*)/ => lambda do |*args|
14
- flash_type = args[0][/the flash(.*)/, 1]
15
- flash_type_class = flash_type.strip
16
- flash_type_class = flash_type_class.empty? ? '' : ".#{flash_type_class}"
17
-
18
- ".flash#{flash_type_class} p"
19
- end,
20
-
21
- ###
22
- # Facebook
23
- #
24
- /the Facebook login form/ => 'html#facebook form#login_form',
25
- /the Facebook page timeline nav bar/ => 'html#facebook #fbTimelineNavTopRow',
26
- /the Facebook account menu/ => '#navAccountLink',
27
-
28
- ###
29
- # PayPal
30
- #
31
- /the "Pay with PayPal" button/ => 'input[alt="Check out with PayPal"]',
32
-
33
- ###
34
- # Forms
35
- #
36
- /the errors for (.*)/ => lambda { "#{sf $1}+div.error" },
37
-
38
- ###
39
- # Windows
40
- #
41
- /the most recently opened window/ => lambda { page.driver.browser.window_handles.last },
42
- /the alert dialog/ => lambda { page.driver.browser.switch_to.alert },
43
-
44
- ###
45
- # Date Picker Buttons
46
- #
47
- /the date picker button for today/ => '.ui-datepicker-today',
48
-
49
- ###
50
- # Model Links
51
- #
52
- /the (.*) button for/ => lambda { "##{$1.gsub(/ /, '_')}_#{args[0].class.name.underscore}_#{args[0].id}_link" }
53
- }
54
- end
55
- end