selenium-webdriver 4.8.0 → 4.8.1

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: 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