Skip to content

Commit 0af5d6a

Browse files
committed
[rb] move chromium based logging from Manager to Driver Extension
1 parent b430234 commit 0af5d6a

File tree

12 files changed

+133
-37
lines changed

12 files changed

+133
-37
lines changed

rb/lib/selenium/webdriver/chrome/driver.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Driver < WebDriver::Driver
3333
include DriverExtensions::DownloadsFiles
3434
include DriverExtensions::HasDevTools
3535
include DriverExtensions::HasAuthentication
36+
include DriverExtensions::HasLogs
3637
include DriverExtensions::HasLogEvents
3738
include DriverExtensions::PrintsPage
3839

rb/lib/selenium/webdriver/chrome/options.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module Selenium
2121
module WebDriver
2222
module Chrome
2323
class Options < WebDriver::Options
24-
attr_accessor :profile
24+
attr_accessor :profile, :logging_prefs
2525

2626
KEY = 'goog:chromeOptions'
2727
BROWSER = 'chrome'
@@ -80,6 +80,7 @@ def initialize(profile: nil, **opts)
8080
perf_logging_prefs: {},
8181
window_types: []}.merge(@options)
8282

83+
@logging_prefs = options.delete(:logging_prefs) || {}
8384
@encoded_extensions = @options.delete(:encoded_extensions) || []
8485
@extensions = []
8586
(@options.delete(:extensions)).each(&method(:validate_extension))
@@ -194,7 +195,13 @@ def add_emulation(**opts)
194195

195196
private
196197

198+
def enable_logging(browser_options)
199+
browser_options['goog:loggingPrefs'] = @logging_prefs
200+
end
201+
197202
def process_browser_options(browser_options)
203+
enable_logging(browser_options) unless @logging_prefs.empty?
204+
198205
options = browser_options[self.class::KEY]
199206
options['binary'] ||= binary_path if binary_path
200207
if @profile

rb/lib/selenium/webdriver/common.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
require 'selenium/webdriver/common/driver_extensions/has_addons'
6565
require 'selenium/webdriver/common/driver_extensions/has_devtools'
6666
require 'selenium/webdriver/common/driver_extensions/has_authentication'
67+
require 'selenium/webdriver/common/driver_extensions/has_logs'
6768
require 'selenium/webdriver/common/driver_extensions/has_log_events'
6869
require 'selenium/webdriver/common/keys'
6970
require 'selenium/webdriver/common/profile_helper'
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
module DriverExtensions
23+
module HasLogs
24+
def logs
25+
@logs ||= Logs.new(@bridge)
26+
end
27+
end # HasLogs
28+
end # DriverExtensions
29+
end # WebDriver
30+
end # Selenium

rb/lib/selenium/webdriver/common/manager.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def timeouts
109109
#
110110

111111
def logs
112+
WebDriver.logger.deprecate('Manager#logs', 'Chrome::Driver#logs')
112113
@logs ||= Logs.new(@bridge)
113114
end
114115

rb/lib/selenium/webdriver/edge/options.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ class Options < Selenium::WebDriver::Chrome::Options
2626
KEY = 'ms:edgeOptions'
2727
BROWSER = 'MicrosoftEdge'
2828

29+
protected
30+
31+
def enable_logging(browser_options)
32+
browser_options['ms:loggingPrefs'] = @logging_prefs
33+
end
34+
2935
private
3036

3137
def binary_path

rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,43 @@ module Chrome
8080
end
8181
end
8282
end
83+
84+
describe '#logs' do
85+
before do
86+
quit_driver
87+
options = Options.new(logging_prefs: {browser: 'ALL',
88+
driver: 'ALL',
89+
performance: 'ALL'})
90+
create_driver!(capabilities: options)
91+
driver.navigate.to url_for('errors.html')
92+
end
93+
94+
after(:all) { quit_driver }
95+
96+
it 'can fetch available log types' do
97+
expect(driver.logs.available_types).to include(:performance, :browser, :driver)
98+
end
99+
100+
it 'can get the browser log' do
101+
driver.find_element(tag_name: 'input').click
102+
103+
entries = driver.logs.get(:browser)
104+
expect(entries).not_to be_empty
105+
expect(entries.first).to be_kind_of(LogEntry)
106+
end
107+
108+
it 'can get the driver log' do
109+
entries = driver.logs.get(:driver)
110+
expect(entries).not_to be_empty
111+
expect(entries.first).to be_kind_of(LogEntry)
112+
end
113+
114+
it 'can get the performance log' do
115+
entries = driver.logs.get(:performance)
116+
expect(entries).not_to be_empty
117+
expect(entries.first).to be_kind_of(LogEntry)
118+
end
119+
end
83120
end
84121
end # Chrome
85122
end # WebDriver

rb/spec/integration/selenium/webdriver/devtools_spec.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ module WebDriver
2525
let(:username) { SpecSupport::RackServer::TestApp::BASIC_AUTH_CREDENTIALS.first }
2626
let(:password) { SpecSupport::RackServer::TestApp::BASIC_AUTH_CREDENTIALS.last }
2727

28-
after do
29-
quit_driver
30-
end
28+
before(:all) { quit_driver }
29+
30+
after { reset_driver! }
3131

3232
it 'sends commands' do
3333
driver.devtools.page.navigate(url: url_for('xhtmlTest.html'))
@@ -40,6 +40,7 @@ module WebDriver
4040
driver.devtools.page.enable
4141
driver.devtools.page.on(:load_event_fired) { callback.call }
4242
driver.navigate.to url_for('xhtmlTest.html')
43+
sleep 0.5
4344

4445
expect(callback).to have_received(:call)
4546
end
@@ -68,11 +69,15 @@ module WebDriver
6869
driver.navigate.to url_for('javascriptPage.html')
6970

7071
driver.execute_script("console.log('I like cheese');")
72+
sleep 0.5
7173
driver.execute_script("console.log(true);")
74+
sleep 0.5
7275
driver.execute_script("console.log(null);")
76+
sleep 0.5
7377
driver.execute_script("console.log(undefined);")
78+
sleep 0.5
7479
driver.execute_script("console.log(document);")
75-
wait.until { logs.size == 5 }
80+
sleep 0.5
7681

7782
expect(logs).to include(
7883
an_object_having_attributes(type: :log, args: ['I like cheese']),

rb/spec/integration/selenium/webdriver/edge/driver_spec.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,43 @@ module Edge
5252
driver.execute_cdp('Page.removeScriptToEvaluateOnNewDocument', identifier: res['identifier'])
5353
end
5454
end
55+
56+
describe '#logs' do
57+
before do
58+
quit_driver
59+
options = Options.new(logging_prefs: {browser: 'ALL',
60+
driver: 'ALL',
61+
performance: 'ALL'})
62+
create_driver!(capabilities: options)
63+
driver.navigate.to url_for('errors.html')
64+
end
65+
66+
after(:all) { quit_driver }
67+
68+
it 'can fetch available log types' do
69+
expect(driver.logs.available_types).to include(:performance, :browser, :driver)
70+
end
71+
72+
it 'can get the browser log' do
73+
driver.find_element(tag_name: 'input').click
74+
75+
entries = driver.logs.get(:browser)
76+
expect(entries).not_to be_empty
77+
expect(entries.first).to be_kind_of(LogEntry)
78+
end
79+
80+
it 'can get the driver log' do
81+
entries = driver.logs.get(:driver)
82+
expect(entries).not_to be_empty
83+
expect(entries.first).to be_kind_of(LogEntry)
84+
end
85+
86+
it 'can get the performance log' do
87+
entries = driver.logs.get(:performance)
88+
expect(entries).not_to be_empty
89+
expect(entries.first).to be_kind_of(LogEntry)
90+
end
91+
end
5592
end
5693
end # Edge
5794
end # WebDriver

rb/spec/integration/selenium/webdriver/manager_spec.rb

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,6 @@
2222
module Selenium
2323
module WebDriver
2424
describe Manager do
25-
describe 'logs', except: [{browser: %i[firefox ie safari safari_preview]},
26-
{driver: :remote, browser: %i[chrome edge]}] do
27-
it 'can fetch remote log types', only: {driver: :remote} do
28-
expect(driver.manage.logs.available_types).to include(:server, :browser, :driver)
29-
end
30-
31-
it 'can fetch available log types', except: {driver: :remote} do
32-
expect(driver.manage.logs.available_types).to include(:browser, :driver)
33-
expect(driver.manage.logs.available_types).not_to include(:server)
34-
end
35-
36-
it 'can get the browser log' do
37-
driver.navigate.to url_for('errors.html')
38-
driver.find_element(tag_name: 'input').click
39-
40-
entries = driver.manage.logs.get(:browser)
41-
expect(entries).not_to be_empty
42-
expect(entries.first).to be_kind_of(LogEntry)
43-
end
44-
45-
# Chrome - turned off by default
46-
it 'can get the driver log', except: {browser: %i[chrome edge]} do
47-
driver.navigate.to url_for('simpleTest.html')
48-
49-
entries = driver.manage.logs.get(:driver)
50-
expect(entries).not_to be_empty
51-
expect(entries.first).to be_kind_of(LogEntry)
52-
end
53-
end
54-
5525
describe 'cookie management' do
5626
after { driver.manage.delete_all_cookies }
5727

0 commit comments

Comments
 (0)