axe-core-api 4.6.0 → 4.8.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 +4 -4
- data/lib/axe/api/results.rb +1 -1
- data/lib/axe/api/run.rb +59 -24
- data/lib/axe/core.rb +15 -0
- data/node_modules/axe-core/axe.min.js +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e8a9609d176573b5dd5d0a34f86c681270c3d5158bf2a97cd67b30ac09dc5e57
|
|
4
|
+
data.tar.gz: 507ec294987d4d381e533a63b5155adf815e479ace681fc89550205f7e4a27fb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e7e497a040efdeb4afc7450f85b592efe5e201f49d8109da9af49e2f58a20f04f9689c6f1435571cd60b2ff21c47efa2d3242c5199038483560b3df4a3eafaed
|
|
7
|
+
data.tar.gz: af69008fab0c4bd26f45b6d2d756f6009d1eca8a9011995f6403e20c13225e9a5e166ab74cfc0688953526897e9d9b235687515eeb2e125d2a9f7bb708251109
|
data/lib/axe/api/results.rb
CHANGED
data/lib/axe/api/run.rb
CHANGED
|
@@ -32,17 +32,34 @@ module Axe
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def analyze_post_43x(page, lib)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
46
63
|
Audit.new to_js, Results.new(results)
|
|
47
64
|
end
|
|
48
65
|
|
|
@@ -98,15 +115,15 @@ module Axe
|
|
|
98
115
|
page.current_window_handle
|
|
99
116
|
end
|
|
100
117
|
|
|
101
|
-
def run_partial_recursive(page, context, lib, top_level = false)
|
|
118
|
+
def run_partial_recursive(page, context, lib, top_level = false, frame_stack = [])
|
|
102
119
|
begin
|
|
120
|
+
current_window_handle = window_handle page
|
|
103
121
|
if not top_level
|
|
104
122
|
begin
|
|
105
123
|
Common::Loader.new(page, lib).load_top_level Axe::Configuration.instance.jslib
|
|
106
124
|
rescue
|
|
107
125
|
return [nil]
|
|
108
126
|
end
|
|
109
|
-
|
|
110
127
|
end
|
|
111
128
|
|
|
112
129
|
frame_contexts = get_frame_context_script page
|
|
@@ -116,20 +133,30 @@ module Axe
|
|
|
116
133
|
end
|
|
117
134
|
|
|
118
135
|
res = axe_run_partial page, context
|
|
119
|
-
if res.key?("errorMessage")
|
|
120
|
-
|
|
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
|
|
121
141
|
return [nil]
|
|
122
142
|
else
|
|
123
143
|
results = [res]
|
|
124
144
|
end
|
|
125
145
|
|
|
126
146
|
for frame_context in frame_contexts
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
|
133
160
|
end
|
|
134
161
|
|
|
135
162
|
ensure
|
|
@@ -138,12 +165,20 @@ module Axe
|
|
|
138
165
|
return results
|
|
139
166
|
end
|
|
140
167
|
|
|
141
|
-
def
|
|
168
|
+
def store_chunk(page, chunk)
|
|
169
|
+
script = <<-JS
|
|
170
|
+
const chunk = arguments[0];
|
|
171
|
+
window.partialResults ??= '';
|
|
172
|
+
window.partialResults += chunk;
|
|
173
|
+
JS
|
|
174
|
+
page.execute_script_fixed script, chunk
|
|
175
|
+
end
|
|
176
|
+
def axe_finish_run(page)
|
|
142
177
|
script = <<-JS
|
|
143
|
-
const partialResults =
|
|
178
|
+
const partialResults = JSON.parse(window.partialResults || '[]');
|
|
144
179
|
return axe.finishRun(partialResults);
|
|
145
180
|
JS
|
|
146
|
-
page.execute_script_fixed script
|
|
181
|
+
page.execute_script_fixed script
|
|
147
182
|
end
|
|
148
183
|
|
|
149
184
|
def axe_shadow_select(page, frame_selector)
|
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
|