axe-core-api 4.7.0.pre.3fef592 → 4.7.0.pre.bef7d97

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/axe/api/run.rb +43 -29
  3. data/lib/axe/core.rb +15 -0
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 184e8889d0e0267b547d795658a4821956bc829cb304faf5172a99721f1afba3
4
- data.tar.gz: 6a85bd09134d066b0c6401147bd9c0ec967aebbd16d1cf62036ad56ccf366d11
3
+ metadata.gz: f63f03aabbdc386e87f007bca1f14e666203847b1bd40421998c24e2d2753de5
4
+ data.tar.gz: 15e008be4b1485ba688b20623fb745b573926f68cb26ae24df1e2fe881c17e0c
5
5
  SHA512:
6
- metadata.gz: fb3a6c1d3e8e098df050224426c2d4a78349997af9cc62a6f835a898be026a3ece34d9fa9ce67f1886774b35e4e3e0d85e932460356af9fd5c9e516a8704fe2e
7
- data.tar.gz: 0c907651e2dff7d014571deb724ac1c6bed6fcd0cb8398dae61f3a1c9a97dd71ae164af04295dec80313dfa05afa340a68cd76ca72c1eaf12c75efdb137f5259
6
+ metadata.gz: 45017760cb3d8fd6a57516f3eb46d91430e1cd0a29a645f07c859e7680aaf54b06ddf98f8119e0479bf8bf61c4b2d4e73db269135e269ccb2eb8e32aa1b9c90c
7
+ data.tar.gz: da50e4c0d64abd5edc33c7ed947e21dd926beed96f3b09e0db477e8fcff2b97e4dc52eb3caac11fd66e874fb2960dca9e3904ca1791196f7abfc0af3daf52de5
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 = 10_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
@@ -134,12 +141,19 @@ module Axe
134
141
  end
135
142
 
136
143
  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
144
+ begin
145
+ frame_selector = frame_context["frameSelector"]
146
+ frame_context = frame_context["frameContext"]
147
+ frame = axe_shadow_select page, frame_selector
148
+ switch_to_frame_by_handle page, frame
149
+ res = run_partial_recursive page, frame_context, lib, false, [*frame_stack, frame]
150
+ results += res
151
+ rescue Selenium::WebDriver::Error::TimeoutError
152
+ page = get_selenium page
153
+ page.switch_to.window current_window_handle
154
+ frame_stack.each {|frame| page.switch_to.frame frame }
155
+ results.push nil
156
+ end
143
157
  end
144
158
 
145
159
  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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: axe-core-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.0.pre.3fef592
4
+ version: 4.7.0.pre.bef7d97
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deque Systems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-26 00:00:00.000000000 Z
11
+ date: 2023-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dumb_delegator