class Capybara::Accessible::Auditor
Public Class Methods
disable()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 30 def disable @disabled = true end
disabled?()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 38 def disabled? @disabled end
enable()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 34 def enable @disabled = false end
exclusions()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 10 def exclusions @exclusions ||= [] end
exclusions=(rules)
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 6 def exclusions=(rules) @exclusions = rules end
log_level()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 18 def log_level @log_level ||= :error end
log_level=(level)
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 14 def log_level=(level) @log_level = level end
new(driver)
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 43 def initialize(driver) @driver = driver end
severe_rules()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 26 def severe_rules @severe_rules ||= [] end
severe_rules=(rules)
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 22 def severe_rules=(rules) @severe_rules = rules end
Public Instance Methods
audit!()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 47 def audit! return if Auditor.disabled? if failures? log_level_response[Capybara::Accessible::Auditor.log_level].call(failure_messages) end end
Private Instance Methods
audit_rules()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 74 def audit_rules File.read(File.expand_path("../../../vendor/google/accessibility-developer-tools/axs_testing.js", __FILE__)) end
excluded_rules()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 94 def excluded_rules codes = Capybara::Accessible::Auditor.exclusions codes.map { |code| mapping[code]} end
failure_messages()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 69 def failure_messages result = run_script(perform_audit_script + @driver.accessible.create_report_script) "Found at #{page_url} \n\n#{result}" end
failures?()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 63 def failures? failures = run_script(perform_audit_script + @driver.accessible.failures_script) Array(failures).any? end
log_level_response()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 56 def log_level_response @log_level_response ||= { warn: ->(messages) { puts messages }, error: ->(messages) { raise Capybara::Accessible::InaccessibleError, failure_messages } } end
mapping()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 104 def mapping @mapping ||= { 'AX_ARIA_01' => 'badAriaRole', 'AX_ARIA_02' => 'nonExistentAriaLabelledbyElement', 'AX_ARIA_03' => 'requiredAriaAttributeMissing', 'AX_ARIA_04' => 'badAriaAttributeValue', 'AX_TEXT_01' => 'controlsWithoutLabel', 'AX_TEXT_02' => 'imagesWithoutAltText', 'AX_TITLE_01' => 'pageWithoutTitle', 'AX_IMAGE_01' => 'elementsWithMeaningfulBackgroundImage', 'AX_FOCUS_01' => 'focusableElementNotVisibleAndNotAriaHidden', 'AX_FOCUS_02' => 'unfocusableElementsWithOnClick', 'AX_COLOR_01' => 'lowContrastElements', 'AX_VIDEO_01' => 'videoWithoutCaptions', 'AX_AUDIO_01' => 'audioWithoutControls' # 'AX_TITLE_01' => 'linkWithUnclearPurpose', # This has a duplicate name # 'AX_ARIA_05' => '', # This has no rule associated with it } end
page_url()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 124 def page_url @driver.current_url end
perform_audit_script()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 78 def perform_audit_script <<-JAVASCRIPT #{audit_rules} var config = new axs.AuditConfiguration(); var severe_rules = #{severe_rules.to_json}; var rule; for(rule in severe_rules) { config.setSeverity(severe_rules[rule], axs.constants.Severity.SEVERE); } config.auditRulesToIgnore = #{excluded_rules.to_json}; config.showUnsupportedRulesWarning = false var results = axs.Audit.run(config); JAVASCRIPT end
run_script(script)
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 128 def run_script(script) @driver.accessible.run_javascript(@driver, script) end
severe_rules()
click to toggle source
# File lib/capybara/accessible/auditor.rb, line 99 def severe_rules codes = Capybara::Accessible::Auditor.severe_rules codes.map { |code| mapping[code]} end