axe-core-api 4.6.1 → 4.7.0.pre.0c19f86

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
  SHA256:
3
- metadata.gz: 4de751c5ce0b5ad1bf1ccbe3a0e566de4d77c51a719f759245f3fd5c98daa674
4
- data.tar.gz: 7bffcbf6c3c073b67765b7e1b6db5cfdfa0552cd65bcc7b7d9afb912c0b2b14d
3
+ metadata.gz: f32bd4ec89e0f82b22345d3d502cdf7214a486947e9403c9950bb2a141b74157
4
+ data.tar.gz: 0f9fd994a42519f1b2bf4fecd0c6643b83f725337db94b1515dd10f8cf5e4c6b
5
5
  SHA512:
6
- metadata.gz: e19eb50e1d6c70ef25072a782c01f78e72bab01bd837a050528317ba591ef08776098754f8e85324d24667ecb211adb92cb6e6f0ddbc324a978f3f155c6276e7
7
- data.tar.gz: ebd5b971f2254fbc9613cb558092f96a3faf7ad26b5958b6577e014b9ac10865bb7a0b6cf11ef5dfd7088efee2cfd9613fcd7fc4c980a3b3c7250a7af0b00882
6
+ metadata.gz: 7edb8a8b3ee384bc4798e232a84fef5ab36507d76ac25e650038c225b2cf4c794fbf8cdeaa682e8909abfcae2d5ef11e0686c52164178b1a1dfb595d2329549b
7
+ data.tar.gz: f4b66720512f7f8338366605d277b6cfadb212f830d2ca83179093ed3051d61a6fa0dc2f0d26cb93ae1d127b274366a116cd315229aa7bda8e0ba70becb8d014
data/lib/axe/api/run.rb CHANGED
@@ -32,27 +32,34 @@ module Axe
32
32
  end
33
33
 
34
34
  def analyze_post_43x(page, lib)
35
- @original_window = window_handle page
36
- partial_results = run_partial_recursive(page, @context, lib, true)
37
- throw partial_results if partial_results.respond_to?("key?") and partial_results.key?("errorMessage")
38
- results = within_about_blank_context(page) { |page|
39
- partial_res_str = partial_results.to_json
40
- size_limit = 20_000_000
41
- while not partial_res_str.empty? do
42
- chunk_size = size_limit
43
- chunk_size = partial_res_str.length if chunk_size > partial_res_str.length
44
- chunk = partial_res_str[0..chunk_size-1]
45
- partial_res_str = partial_res_str[chunk_size..-1]
46
- store_chunk page, chunk
47
- end
48
-
49
- Common::Loader.new(page, lib).load_top_level Axe::Configuration.instance.jslib
50
- begin
51
- axe_finish_run page
52
- rescue
53
- raise StandardError.new "axe.finishRun failed. Please check out https://github.com/dequelabs/axe-core-gems/blob/develop/error-handling.md"
54
- end
55
- }
35
+ user_page_load = (get_selenium page).manage.timeouts.page_load
36
+ (get_selenium page).manage.timeouts.page_load = 1
37
+ begin
38
+ @original_window = window_handle page
39
+ partial_results = run_partial_recursive(page, @context, lib, true)
40
+ throw partial_results if partial_results.respond_to?("key?") and partial_results.key?("errorMessage")
41
+ results = within_about_blank_context(page) { |page|
42
+ partial_res_str = partial_results.to_json
43
+ size_limit = 10_000_000
44
+ while not partial_res_str.empty? do
45
+ chunk_size = size_limit
46
+ chunk_size = partial_res_str.length if chunk_size > partial_res_str.length
47
+ chunk = partial_res_str[0..chunk_size-1]
48
+ partial_res_str = partial_res_str[chunk_size..-1]
49
+ store_chunk page, chunk
50
+ end
51
+
52
+ Common::Loader.new(page, lib).load_top_level Axe::Configuration.instance.jslib
53
+ begin
54
+ axe_finish_run page
55
+ rescue
56
+ raise StandardError.new "axe.finishRun failed. Please check out https://github.com/dequelabs/axe-core-gems/blob/develop/error-handling.md"
57
+ end
58
+
59
+ }
60
+ ensure
61
+ (get_selenium page).manage.timeouts.page_load = user_page_load
62
+ end
56
63
  Audit.new to_js, Results.new(results)
57
64
  end
58
65
 
@@ -108,15 +115,15 @@ module Axe
108
115
  page.current_window_handle
109
116
  end
110
117
 
111
- def run_partial_recursive(page, context, lib, top_level = false)
118
+ def run_partial_recursive(page, context, lib, top_level = false, frame_stack = [])
112
119
  begin
120
+ current_window_handle = window_handle page
113
121
  if not top_level
114
122
  begin
115
123
  Common::Loader.new(page, lib).load_top_level Axe::Configuration.instance.jslib
116
124
  rescue
117
125
  return [nil]
118
126
  end
119
-
120
127
  end
121
128
 
122
129
  frame_contexts = get_frame_context_script page
@@ -126,20 +133,30 @@ module Axe
126
133
  end
127
134
 
128
135
  res = axe_run_partial page, context
129
- if res.key?("errorMessage")
130
- throw res if top_level
136
+ if res.nil? || res.key?("errorMessage")
137
+ if top_level
138
+ throw res unless res.nil?
139
+ throw "axe.runPartial returned null"
140
+ end
131
141
  return [nil]
132
142
  else
133
143
  results = [res]
134
144
  end
135
145
 
136
146
  for frame_context in frame_contexts
137
- frame_selector = frame_context["frameSelector"]
138
- frame_context = frame_context["frameContext"]
139
- frame = axe_shadow_select page, frame_selector
140
- switch_to_frame_by_handle page, frame
141
- res = run_partial_recursive page, frame_context, lib
142
- results += res
147
+ begin
148
+ frame_selector = frame_context["frameSelector"]
149
+ frame_context = frame_context["frameContext"]
150
+ frame = axe_shadow_select page, frame_selector
151
+ switch_to_frame_by_handle page, frame
152
+ res = run_partial_recursive page, frame_context, lib, false, [*frame_stack, frame]
153
+ results += res
154
+ rescue Selenium::WebDriver::Error::TimeoutError
155
+ page = get_selenium page
156
+ page.switch_to.window current_window_handle
157
+ frame_stack.each {|frame| page.switch_to.frame frame }
158
+ results.push nil
159
+ end
143
160
  end
144
161
 
145
162
  ensure
data/lib/axe/core.rb CHANGED
@@ -3,6 +3,7 @@ require_relative "../webdriver_script_adapter/frame_adapter"
3
3
  require_relative "../webdriver_script_adapter/query_selector_adapter"
4
4
  require_relative "../loader"
5
5
  require_relative "./configuration"
6
+ require 'timeout'
6
7
 
7
8
  module Axe
8
9
  class Core
@@ -37,8 +38,22 @@ module Axe
37
38
  Core.has_run_partial?(@page) and not Axe::Configuration.instance.legacy_mode
38
39
  end
39
40
 
41
+ def assert_frame_ready
42
+ begin
43
+ ready = Timeout.timeout(10) {
44
+ @page.evaluate_script <<-JS
45
+ document.readyState === 'complete'
46
+ JS
47
+ }
48
+ rescue Timeout::Error
49
+ ready = false
50
+ end
51
+ raise Exception.new "Page/frame not ready" if not ready
52
+ end
53
+
40
54
  def load_axe_core(source)
41
55
  return if already_loaded?
56
+ assert_frame_ready
42
57
  loader = Common::Loader.new(@page, self)
43
58
  loader.load_top_level source
44
59
  return if use_run_partial