selenium-webdriver 4.8.0 → 4.8.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd585c8c3f1d0336fe186c7748cc0b473302c5e63f305804e85944764f518961
4
- data.tar.gz: ade668c90f35b2624a4e3fe370bead6e7500073c9f1a5fcd6127f08a44c95e30
3
+ metadata.gz: 9777fa00d3b0216e227ce5194d19da4268b8c7805b27d57782fa33f27d13e66c
4
+ data.tar.gz: 0c5fa5ecf085aa83a0d2ba6ef690c98a637ee6667656a0e2edb129a2850307a9
5
5
  SHA512:
6
- metadata.gz: 870ccbc8b1b21afdc53ef1853e0ba19eba366ed0e42552ff442496554e6545a5d73c7450f53d0cfc555d6c8e5487a600f7b4391ed8b0ac1202c467153f86c6d9
7
- data.tar.gz: 16034330349a65c5419cc014239d980e518cf9793d2bc24514686eb1ba35b18c818c7626467299f78bbc2b5eaf7863f61c82904787f2e4e97d50e056cd4fe5f5
6
+ metadata.gz: d10526d84df80cd437990f38cb9b4445b19c67141115ba53ae5b300d668f5e8ef87f11b8efa70b231535bc817d2d276e21e83c70564fed3165a6627a08a17abe
7
+ data.tar.gz: 9175b92a1ca431f2ffde1d1005c2a6e712c7a2c0808c58581f51a440d33e3307fd1693ae8fd098571ddd68d8bc06d5257e9ec3467b071758a25db9aab990232e
data/CHANGES CHANGED
@@ -1,4 +1,16 @@
1
- 4.8.0 (Unreleased)
1
+ 4.8.1 (2023-02-17)
2
+ =========================
3
+ Ruby:
4
+ * Fix autoload of WebDriver::Remote::Bridge::COMMANDS
5
+ * Subclass is setting value before the superclass is setting it to nil
6
+ * Updating Selenium Manager binaries for 4.8.1 release
7
+
8
+ BiDi:
9
+ * Released selenium-devtools 0.110.0 (supports CDP v85, v108, v109, v110)
10
+ * Close BiDi session on closing the last top-level browsing context
11
+ * Add filtering capability to LogInspector
12
+
13
+ 4.8.0 (2023-01-23)
2
14
  =========================
3
15
  Ruby:
4
16
  * Allow updating instance variables on service classes
Binary file
Binary file
Binary file
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ class BiDi
23
+ class FilterBy
24
+ attr_accessor :level
25
+
26
+ def initialize(level)
27
+ @level = level
28
+ end
29
+
30
+ def self.log_level(level = nil)
31
+ unless %w[debug error info warning].include?(level)
32
+ raise Error::WebDriverError,
33
+ "Valid log levels are 'debug', 'error', 'info' and 'warning'. Received: #{level}"
34
+ end
35
+ FilterBy.new(level)
36
+ end
37
+ end # FilterBy
38
+ end # BiDi
39
+ end # WebDriver
40
+ end # Selenium
@@ -23,6 +23,7 @@ require_relative 'log/base_log_entry'
23
23
  require_relative 'log/generic_log_entry'
24
24
  require_relative 'log/console_log_entry'
25
25
  require_relative 'log/javascript_log_entry'
26
+ require_relative 'log/filter_by'
26
27
 
27
28
  module Selenium
28
29
  module WebDriver
@@ -49,43 +50,41 @@ module Selenium
49
50
  @bidi.session.subscribe('log.entryAdded', browsing_context_ids)
50
51
  end
51
52
 
52
- def on_console_entry(&block)
53
- enabled = log_listeners[:console].any?
54
- log_listeners[:console] << block
55
- return if enabled
53
+ def on_console_entry(filter_by = nil, &block)
54
+ check_valid_filter(filter_by)
56
55
 
57
56
  on_log do |params|
58
57
  type = params['type']
59
- console_log_events(params) if type.eql?('console')
58
+ console_log_events(params, filter_by, &block) if type.eql?('console')
60
59
  end
61
60
  end
62
61
 
63
- def on_javascript_log(&block)
64
- enabled = log_listeners[:javascript].any?
65
- log_listeners[:javascript] << block
66
- return if enabled
62
+ def on_javascript_log(filter_by = nil, &block)
63
+ check_valid_filter(filter_by)
67
64
 
68
65
  on_log do |params|
69
66
  type = params['type']
70
- javascript_log_events(params) if type.eql?('javascript')
67
+ javascript_log_events(params, filter_by, &block) if type.eql?('javascript')
71
68
  end
72
69
  end
73
70
 
74
71
  def on_javascript_exception(&block)
75
- enabled = log_listeners[:js_exception].any?
76
- log_listeners[:js_exception] << block
77
- log_listeners[:javascript] << block
78
- return if enabled
79
-
80
72
  on_log do |params|
81
73
  type = params['type']
82
- level = params['level']
83
-
84
- javascript_log_events(params) if type.eql?('javascript') && level.eql?(LOG_LEVEL[:ERROR])
74
+ javascript_log_events(params, FilterBy.log_level('error'), &block) if type.eql?('javascript')
85
75
  end
86
76
  end
87
77
 
88
- def on_log(&block)
78
+ def on_log(filter_by = nil, &block)
79
+ unless filter_by.nil?
80
+ check_valid_filter(filter_by)
81
+
82
+ on(:entry_added) do |params|
83
+ yield(params) if params['level'] == filter_by.level
84
+ end
85
+ return
86
+ end
87
+
89
88
  on(:entry_added, &block)
90
89
  end
91
90
 
@@ -96,11 +95,13 @@ module Selenium
96
95
  @bidi.callbacks["log.#{event}"] << block
97
96
  end
98
97
 
99
- def log_listeners
100
- @log_listeners ||= Hash.new { |listeners, kind| listeners[kind] = [] }
98
+ def check_valid_filter(filter_by)
99
+ return if filter_by.nil? || filter_by.instance_of?(FilterBy)
100
+
101
+ raise "Pass valid FilterBy object. Received: #{filter_by.inspect}"
101
102
  end
102
103
 
103
- def console_log_events(params)
104
+ def console_log_events(params, filter_by)
104
105
  event = ConsoleLogEntry.new(
105
106
  level: params['level'],
106
107
  text: params['text'],
@@ -111,12 +112,16 @@ module Selenium
111
112
  args: params['args'],
112
113
  stack_trace: params['stackTrace']
113
114
  )
114
- log_listeners[:console].each do |listener|
115
- listener.call(event)
115
+
116
+ unless filter_by.nil?
117
+ yield(event) if params['level'] == filter_by.level
118
+ return
116
119
  end
120
+
121
+ yield(event)
117
122
  end
118
123
 
119
- def javascript_log_events(params)
124
+ def javascript_log_events(params, filter_by)
120
125
  event = JavascriptLogEntry.new(
121
126
  level: params['level'],
122
127
  text: params['text'],
@@ -124,15 +129,13 @@ module Selenium
124
129
  type: params['type'],
125
130
  stack_trace: params['stackTrace']
126
131
  )
127
- log_listeners[:javascript].each do |listener|
128
- listener.call(event)
129
- end
130
132
 
131
- return unless params['level'].eql?(LOG_LEVEL[:ERROR])
132
-
133
- log_listeners[:js_exception].each do |listener|
134
- listener.call(event)
133
+ unless filter_by.nil?
134
+ yield(event) if params['level'] == filter_by.level
135
+ return
135
136
  end
137
+
138
+ yield(event)
136
139
  end
137
140
  end # LogInspector
138
141
  end # Bidi
@@ -37,7 +37,7 @@ module Selenium
37
37
  end
38
38
 
39
39
  def session
40
- Session.new(self)
40
+ @session ||= Session.new(self)
41
41
  end
42
42
 
43
43
  def send_cmd(method, **params)
@@ -69,8 +69,8 @@ module Selenium
69
69
  #
70
70
 
71
71
  def initialize(bridge: nil, listener: nil, **opts)
72
- @service_manager = nil
73
72
  @devtools = nil
73
+ @bidi = nil
74
74
  bridge ||= create_bridge(**opts)
75
75
  add_extensions(bridge.browser)
76
76
  @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
@@ -174,6 +174,7 @@ module Selenium
174
174
  ensure
175
175
  @service_manager&.stop
176
176
  @devtools&.close
177
+ @bidi&.close
177
178
  end
178
179
 
179
180
  #
@@ -181,7 +182,10 @@ module Selenium
181
182
  #
182
183
 
183
184
  def close
184
- bridge.close
185
+ # If no top-level browsing contexts are open after calling close,
186
+ # it indicates that the WebDriver session is closed.
187
+ # If the WebDriver session is closed, the BiDi session also needs to be closed.
188
+ bridge.close.tap { |handles| @bidi&.close if handles&.empty? }
185
189
  end
186
190
 
187
191
  #
@@ -21,6 +21,7 @@ module Selenium
21
21
  module WebDriver
22
22
  module Remote
23
23
  class Bridge
24
+ autoload :COMMANDS, 'selenium/webdriver/remote/bridge/commands'
24
25
  include Atoms
25
26
 
26
27
  PORT = 4444
@@ -27,7 +27,6 @@ module Selenium
27
27
  autoload :Driver, 'selenium/webdriver/remote/driver'
28
28
  autoload :Response, 'selenium/webdriver/remote/response'
29
29
  autoload :Capabilities, 'selenium/webdriver/remote/capabilities'
30
- autoload :COMMANDS, 'selenium/webdriver/remote/commands'
31
30
 
32
31
  module Http
33
32
  autoload :Common, 'selenium/webdriver/remote/http/common'
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '4.8.0'
22
+ VERSION = '4.8.1'
23
23
  end # WebDriver
24
24
  end # Selenium
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.0
4
+ version: 4.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rodionov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-01-23 00:00:00.000000000 Z
13
+ date: 2023-02-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rexml
@@ -225,6 +225,7 @@ files:
225
225
  - lib/selenium/webdriver/bidi/browsing_context_info.rb
226
226
  - lib/selenium/webdriver/bidi/log/base_log_entry.rb
227
227
  - lib/selenium/webdriver/bidi/log/console_log_entry.rb
228
+ - lib/selenium/webdriver/bidi/log/filter_by.rb
228
229
  - lib/selenium/webdriver/bidi/log/generic_log_entry.rb
229
230
  - lib/selenium/webdriver/bidi/log/javascript_log_entry.rb
230
231
  - lib/selenium/webdriver/bidi/log_inspector.rb
@@ -352,8 +353,8 @@ files:
352
353
  - lib/selenium/webdriver/ie/service.rb
353
354
  - lib/selenium/webdriver/remote.rb
354
355
  - lib/selenium/webdriver/remote/bridge.rb
356
+ - lib/selenium/webdriver/remote/bridge/commands.rb
355
357
  - lib/selenium/webdriver/remote/capabilities.rb
356
- - lib/selenium/webdriver/remote/commands.rb
357
358
  - lib/selenium/webdriver/remote/driver.rb
358
359
  - lib/selenium/webdriver/remote/http/common.rb
359
360
  - lib/selenium/webdriver/remote/http/curb.rb