capybara-accessible 0.1.8 → 0.1.9

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 01fb309e03c6d938d6ef7b42cb937ff39c61716f
4
+ data.tar.gz: c7d6487f9c68c51986ed954558529df1a6bfa0f3
5
+ SHA512:
6
+ metadata.gz: 534b30513f7afe122e9c78f9e900e798830f798477dd202c4d823db5fbe0adb939a5b891ddd98680bc97c6675f82cb8bc2f649de62d3c6ab89091b765fe8d68d
7
+ data.tar.gz: f324fa20ecb8b46c9940175266bd532b58beaa49766bb821603931c923e17606bb52ff063a9d168e1d7a81f60fc614a515e604222dd98d8426b64b7618b02219
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rake'
4
-
5
3
  # Specify your gem's dependencies in capybara-praseodymium.gemspec
6
4
  gemspec
data/README.md CHANGED
@@ -1,67 +1,58 @@
1
- # Capybara::Accessible
1
+ # capybara-accessible
2
2
 
3
- [![](https://api.tddium.com/pivotal-casebook/capybara-accessible/badges/25347.png?badge_token=1e276156136851abb3ca113d37e1cddca332e098)](https://api.tddium.com/pivotal-casebook/capybara-accessible/suites/25347)
3
+ ## Automated accessibility testing in RSpec and Rails
4
4
 
5
- Automated accessibility testing for Rails integration tests (Rspec + Capybara)
6
- capybara-accessible automatically runs [Google's Accessibility Developer Tools](https://code.google.com/p/accessibility-developer-tools/) audits within your Ruby on Rails project integration test suite, using [RSpec feature specs](https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec).
5
+ capybara-accessible introduces accessibility tests into your [Rspec integration tests](https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec),
6
+ helping you to capture existing failures and prevent future regressions.
7
7
 
8
- Some of the checks that are included:
8
+ It works by defining a custom webdriver that runs [Google's Accessibility Developer Tools](https://github.com/GoogleChrome/accessibility-developer-tools)
9
+ audits during each test run. Since the audits are invoked automatically on page load, you do not need to make explicit assertions on accessibility.
10
+ Instead, the test will simply fail with a message indicating the failures, like so:
11
+
12
+ ![Error output from an Rspec failure](http://i.imgur.com/8RWEzzg.png)
13
+
14
+ Some of the audit rules that are included from Google's Accessibility Developer Tools:
9
15
  * minimum color contrast
10
16
  * label associations with inputs
11
17
  * presence of alt attributes
12
18
  * valid use of ARIA roles
13
19
 
14
- The full list of accessibility audit rules is on the [Google Accessibility Developer Tools wiki](https://code.google.com/p/accessibility-developer-tools/wiki/AuditRules).
15
-
16
- capybara-accessible extends Capybara and defines a custom webdriver that runs javascript assertions on every page visit and link/button click.
17
- This way you do not need to make explicit assertions on accessibility. Instead, the test will simply fail with a message indicating the accessibility errors, like so:
18
-
19
- Failure/Error: visit '/inaccessible'
20
- Capybara::Accessible::InaccessibleError:
21
- *** Begin accessibility audit results ***
22
- An accessibility audit found
23
- Errors:
24
- Error: AX_ARIA_01 (Elements with ARIA roles must use a valid, non-abstract ARIA role) failed on the following element:
25
- body > .outer > .standup > .block.buttons
26
- See https://code.google.com/p/accessibility-developer-tools/wiki/AuditRules#AX_ARIA_01:_Elements_with_ARIA_roles_must_use_a_valid,_non-abstr for more information.
27
-
28
-
29
- *** End accessibility audit results ***
20
+ See the [Google Accessibility Developer Tools wiki](https://code.google.com/p/accessibility-developer-tools/wiki/AuditRules)
21
+ for a full list of rules.
30
22
 
31
- Need help? Ask on the mailing list (please do not open an issue on GitHub): https://groups.google.com/forum/#!forum/capybara-accessible
23
+ Visit the [capybara-accessible wiki](https://github.com/Casecommons/capybara-accessible/wiki) for background on why and how
24
+ we built capybara-accessible.
32
25
 
33
- Visit the [wiki](https://github.com/Casecommons/capybara-accessible/wiki) for more background on automated accessibility testing with capybara-accessible.
34
26
 
35
27
  ## Installation
36
28
 
37
- Add this line to your application's Gemfile:
29
+ Add `gem 'capybara-accessible'` to your application's Gemfile and run `bundle` on the command line.
38
30
 
39
- gem 'capybara-accessible'
40
-
41
- And then execute:
42
-
43
- $ bundle
44
-
45
- Or install it yourself as:
46
-
47
- $ gem install capybara-accessible
48
31
 
49
32
  ## Usage
50
33
 
51
- You can use capybara-accessible as a drop-in replacement for Rack::Test, Selenium or capybara-webkit drivers for Capybara. Simply set the driver in spec_helper.rb:
34
+ You can use capybara-accessible as a drop-in replacement for Rack::Test, Selenium or capybara-webkit drivers for Capybara.
35
+ Simply set the driver in `spec/spec_helper.rb` or `features/support/env.rb`:
52
36
 
53
37
  require 'capybara/rspec'
54
38
  require 'capybara/accessible'
55
39
 
56
40
  Capybara.default_driver = :accessible
41
+ Capybara.javascript_driver = :accessible
42
+
43
+ We suggest that you use [pry-rescue with pry-stack_explorer](https://github.com/ConradIrwin/pry-rescue)
44
+ to debug the accessibility failures in the DOM. pry-rescue will open a debugging session at the first exception,
45
+ pausing the driver so that you can inspect the page.
57
46
 
58
47
  ### Disabling audits
59
- You can disable audits on individual tests by tagging the example or group as `inaccessible: true`, and configuring Rspec like so:
48
+ You can disable audits on individual tests by tagging the example or group with `inaccessible`.
49
+
50
+ #### Rspec
60
51
 
61
52
  # spec/spec_helper.rb
62
53
 
63
54
  RSpec.configure do |config|
64
- config.around(:each, :inaccessible => true) do |example|
55
+ config.around(:each, inaccessible: true) do |example|
65
56
  Capybara::Accessible.skip_audit { example.run }
66
57
  end
67
58
  end
@@ -69,20 +60,43 @@ You can disable audits on individual tests by tagging the example or group as `i
69
60
 
70
61
  # spec/features/inaccessible_page_spec.rb
71
62
 
72
- # Blocks tagged inaccessible will skip accessibility assertions.
73
- # They will still run your other native assertions.
74
- describe '/inaccessible', inaccessible: true do
75
- it 'display an image' do
76
- page.should have_css 'img'
63
+ # Page loads in examples tagged as inaccessible will not trigger an audit.
64
+ # All other assertions will be made.
65
+ feature '/inaccessible', inaccessible: true do
66
+ scenario 'displays an image' do
67
+ page.should have_css 'img' # this assertion will still be executed
77
68
  end
78
69
  end
79
70
 
80
- ## Contributing
71
+ #### Cucumber
72
+
73
+ # features/support/env.rb
74
+
75
+ Around('@inaccessible') do |scenario, block|
76
+ Capybara::Accessible.skip_audit { block.call }
77
+ end
78
+
79
+
80
+ # features/inaccessible_page.feature
81
+
82
+ # Page loads in examples tagged as inaccessible will not trigger an audit.
83
+ # All other assertions will be made.
84
+ @inaccessible
85
+ Scenario: Visiting a page that is inaccessible
86
+ When I visit a page that is inaccessible
87
+ Then I should see the inaccessible image # this assertion will still be executed
81
88
 
82
- NOTE: axs_testing.js is automatically generated by Google's Accessibility Developer tools project. If you want to modify the audit rules, please contribute to the Google project: https://github.com/GoogleChrome/accessibility-developer-tools
83
89
 
84
- 1. Fork it
85
- 2. Create your feature branch (`git checkout -b my-new-feature`)
86
- 3. Commit your changes (`git commit -am 'Add some feature'`)
87
- 4. Push to the branch (`git push origin my-new-feature`)
88
- 5. Create new Pull Request
90
+ ## Support
91
+
92
+ If you think you've found a bug, or have installation questions or feature requests, please send a message
93
+ to the [mailing list](https://groups.google.com/forum/#!forum/capybara-accessible).
94
+
95
+ If you are commenting on the audit rules and failure messages, please check out the Google Accessibility Developer Tools
96
+ Project, and review their guidelines for reporting issues.
97
+
98
+ ## Contributing
99
+
100
+ NOTE: axs_testing.js is a generated file from
101
+ [Google's Accessibility Developer Tools](https://github.com/GoogleChrome/accessibility-developer-tools).
102
+ If you'd like to contribute to the audit rules, please fork their Github project.
@@ -15,14 +15,13 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
 
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.test_files = spec.files.grep(%r{^spec/})
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.add_dependency("capybara")
21
+ spec.add_dependency("capybara", "~> 2.0")
23
22
  spec.add_dependency("selenium-webdriver")
24
23
 
25
- spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
26
25
  spec.add_development_dependency "rspec"
27
26
  spec.add_development_dependency "pry"
28
27
  spec.add_development_dependency "tddium"
@@ -19,6 +19,14 @@ module Capybara::Accessible
19
19
  @@exclusions ||= []
20
20
  end
21
21
 
22
+ def self.log_level=(level)
23
+ @@log_level= level
24
+ end
25
+
26
+ def self.log_level
27
+ @@log_level ||= :error
28
+ end
29
+
22
30
  def audit_rules
23
31
  File.read(File.expand_path("../../../vendor/google/accessibility-developer-tools/axs_testing.js", __FILE__))
24
32
  end
@@ -4,8 +4,12 @@ module Capybara::Accessible
4
4
 
5
5
  def visit(path)
6
6
  super
7
- if audit_failures.any?
8
- raise Capybara::Accessible::InaccessibleError, failure_messages
7
+ if Capybara.current_driver == :accessible && audit_failures.any?
8
+ if Capybara::Accessible::Auditor.log_level == :warn
9
+ puts failure_messages
10
+ else
11
+ raise Capybara::Accessible::InaccessibleError, failure_messages
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -6,11 +6,16 @@ module Capybara
6
6
  def click
7
7
  synchronize { base.click }
8
8
  begin
9
+ @session.driver.browser.switch_to.alert
10
+ puts "Skipping accessibility audit: Modal dialog present"
11
+ rescue ::Selenium::WebDriver::Error::NoAlertOpenError, ::NoMethodError
9
12
  if Capybara.current_driver == :accessible && audit_failures.any?
10
- raise Capybara::Accessible::InaccessibleError, failure_messages
13
+ if Capybara::Accessible::Auditor.log_level == :warn
14
+ puts failure_messages
15
+ else
16
+ raise Capybara::Accessible::InaccessibleError, failure_messages
17
+ end
11
18
  end
12
- rescue ::Selenium::WebDriver::Error::UnhandledAlertError => e
13
- puts "Skipping accessibility audit: #{e}"
14
19
  end
15
20
  end
16
21
  end
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Accessible
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
  end
5
5
  end
@@ -30,12 +30,23 @@ describe Capybara::Accessible::Driver do
30
30
  expect { @session.visit('/excluded') }.to_not raise_error
31
31
  end
32
32
  end
33
- end
34
33
 
35
- context 'a page with a javascript popup' do
36
- it 'does not raise an exception' do
37
- @session.visit('/alert')
38
- expect { @session.click_link('Alert!') }.to_not raise_error
34
+ context 'with log level set to warn' do
35
+ before do
36
+ Capybara::Accessible::Auditor.log_level = :warn
37
+ end
38
+
39
+ it 'puts to stdout and does not raise an error' do
40
+ $stdout.should_receive(:puts)
41
+ expect { @session.visit('/inaccessible') }.to_not raise_error
42
+ end
43
+ end
44
+
45
+ context 'a page with a javascript popup' do
46
+ it 'does not raise an exception' do
47
+ @session.visit('/alert')
48
+ expect { @session.click_link('Alert!') }.to_not raise_error
49
+ end
39
50
  end
40
51
  end
41
52
  end
metadata CHANGED
@@ -1,126 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-accessible
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
5
- prerelease:
4
+ version: 0.1.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - Case Commons
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-20 00:00:00.000000000 Z
11
+ date: 2013-08-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: capybara
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '2.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: '2.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: selenium-webdriver
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: bundler
42
+ name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
- version: '1.3'
47
+ version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
- version: '1.3'
54
+ version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: pry
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: tddium
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sinatra
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  description: Capybara extension and webdriver for automated accessibility testing
@@ -151,27 +136,26 @@ files:
151
136
  homepage: https://github.com/Casecommons/capybara-accessible
152
137
  licenses:
153
138
  - MIT
139
+ metadata: {}
154
140
  post_install_message:
155
141
  rdoc_options: []
156
142
  require_paths:
157
143
  - lib
158
144
  required_ruby_version: !ruby/object:Gem::Requirement
159
- none: false
160
145
  requirements:
161
- - - ! '>='
146
+ - - '>='
162
147
  - !ruby/object:Gem::Version
163
148
  version: '0'
164
149
  required_rubygems_version: !ruby/object:Gem::Requirement
165
- none: false
166
150
  requirements:
167
- - - ! '>='
151
+ - - '>='
168
152
  - !ruby/object:Gem::Version
169
153
  version: '0'
170
154
  requirements: []
171
155
  rubyforge_project:
172
- rubygems_version: 1.8.19
156
+ rubygems_version: 2.0.3
173
157
  signing_key:
174
- specification_version: 3
158
+ specification_version: 4
175
159
  summary: A Selenium based webdriver and Capybara extension that runs Google Accessibility
176
160
  Developer Tools auditing assertions on page visits.
177
161
  test_files: