Skip to content

Commit aac60e3

Browse files
committed
extract RUM logic out of Selenium contrib, reenable testing selenium/capybara integration for Ruby 3.4
1 parent ff0a815 commit aac60e3

File tree

14 files changed

+114
-95
lines changed

14 files changed

+114
-95
lines changed

Rakefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ TEST_METADATA = {
6868
"knapsack_pro-7-rspec-3" => "✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ❌ jruby"
6969
},
7070
"selenium" => {
71-
"selenium-4-capybara-3" => "❌ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / 3.4 / ✅ jruby"
71+
"selenium-4-capybara-3" => "❌ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / 3.4 / ✅ jruby"
7272
},
7373
"timecop" => {
7474
"timecop-0" => "✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby"

lib/datadog/ci/contrib/selenium/capybara_driver.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
require_relative "../patcher"
44

5-
require_relative "ext"
6-
require_relative "rum"
5+
require_relative "../../ext/rum"
76
require_relative "../../ext/test"
7+
require_relative "../../utils/rum"
88

99
module Datadog
1010
module CI
@@ -22,10 +22,10 @@ def reset!
2222

2323
Datadog.logger.debug("[Selenium] Capybara session reset event")
2424

25-
RUM.stop_rum_session(@browser)
25+
Utils::RUM.stop_rum_session(@browser)
2626

2727
Datadog.logger.debug("[Selenium] RUM session stopped, deleting cookie")
28-
@browser.manage.delete_cookie(Ext::COOKIE_TEST_EXECUTION_ID)
28+
@browser.manage.delete_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID)
2929
rescue ::Selenium::WebDriver::Error::WebDriverError => e
3030
Datadog.logger.debug("[Selenium] Error while resetting Capybara session: #{e.message}")
3131
ensure

lib/datadog/ci/contrib/selenium/configuration/settings.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
require_relative "../ext"
66
require_relative "../../settings"
77

8+
require_relative "../../../ext/rum"
9+
810
module Datadog
911
module CI
1012
module Contrib
@@ -21,7 +23,7 @@ class Settings < Datadog::CI::Contrib::Settings
2123

2224
option :rum_flush_wait_millis do |o|
2325
o.type :int
24-
o.env Ext::ENV_RUM_FLUSH_WAIT_MILLIS
26+
o.env CI::Ext::RUM::ENV_RUM_FLUSH_WAIT_MILLIS
2527
o.default 500
2628
end
2729
end

lib/datadog/ci/contrib/selenium/driver.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
require_relative "../patcher"
44

5-
require_relative "ext"
6-
require_relative "rum"
5+
require_relative "../../utils/rum"
6+
require_relative "../../ext/rum"
77
require_relative "../../ext/test"
88

99
module Datadog
@@ -22,10 +22,10 @@ def quit
2222

2323
Datadog.logger.debug("[Selenium] Driver quit event")
2424

25-
RUM.stop_rum_session(@bridge)
25+
Utils::RUM.stop_rum_session(@bridge)
2626

2727
Datadog.logger.debug("[Selenium] RUM session stopped, deleting cookie")
28-
@bridge.manage.delete_cookie(Ext::COOKIE_TEST_EXECUTION_ID)
28+
@bridge.manage.delete_cookie(CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID)
2929
rescue ::Selenium::WebDriver::Error::WebDriverError => e
3030
Datadog.logger.debug("[Selenium] Error while quitting Selenium driver: #{e.message}")
3131
ensure

lib/datadog/ci/contrib/selenium/ext.rb

-15
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,6 @@ module Selenium
88
# @public_api
99
module Ext
1010
ENV_ENABLED = "DD_CIVISIBILITY_SELENIUM_ENABLED"
11-
ENV_RUM_FLUSH_WAIT_MILLIS = "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
12-
13-
COOKIE_TEST_EXECUTION_ID = "datadog-ci-visibility-test-execution-id"
14-
15-
SCRIPT_IS_RUM_ACTIVE = <<~JS
16-
return !!window.DD_RUM
17-
JS
18-
SCRIPT_STOP_RUM_SESSION = <<~JS
19-
if (window.DD_RUM && window.DD_RUM.stopSession) {
20-
window.DD_RUM.stopSession();
21-
return true;
22-
} else {
23-
return false;
24-
}
25-
JS
2611
end
2712
end
2813
end

lib/datadog/ci/contrib/selenium/navigation.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require_relative "../patcher"
44

5-
require_relative "ext"
5+
require_relative "../../ext/rum"
66
require_relative "../../ext/test"
77

88
module Datadog
@@ -32,7 +32,7 @@ def to(url)
3232
return result unless active_test
3333

3434
# Set the test's trace id as a cookie in browser session
35-
cookie_hash = {name: Ext::COOKIE_TEST_EXECUTION_ID, value: active_test.trace_id.to_s}
35+
cookie_hash = {name: CI::Ext::RUM::COOKIE_TEST_EXECUTION_ID, value: active_test.trace_id.to_s}
3636
Datadog.logger.debug { "[Selenium] Setting cookie: #{cookie_hash}" }
3737
@bridge.manage.add_cookie(cookie_hash)
3838

lib/datadog/ci/contrib/selenium/rum.rb

-43
This file was deleted.

lib/datadog/ci/ext/rum.rb

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
module Datadog
4+
module CI
5+
module Ext
6+
# Defines constants for Git tags
7+
module RUM
8+
ENV_RUM_FLUSH_WAIT_MILLIS = "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
9+
10+
COOKIE_TEST_EXECUTION_ID = "datadog-ci-visibility-test-execution-id"
11+
12+
SCRIPT_IS_RUM_ACTIVE = <<~JS
13+
return !!window.DD_RUM
14+
JS
15+
SCRIPT_STOP_RUM_SESSION = <<~JS
16+
if (window.DD_RUM && window.DD_RUM.stopSession) {
17+
window.DD_RUM.stopSession();
18+
return true;
19+
} else {
20+
return false;
21+
}
22+
JS
23+
end
24+
end
25+
end
26+
end

lib/datadog/ci/utils/rum.rb

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
require_relative "../ext/rum"
4+
require_relative "../ext/test"
5+
require_relative "parsing"
6+
7+
module Datadog
8+
module CI
9+
module Utils
10+
# Provides functionality to interact with Datadog Real User Monitoring product
11+
# via executing JavaScript code in the browser.
12+
#
13+
# Relevant docs: https://docs.datadoghq.com/real_user_monitoring/browser/
14+
module RUM
15+
def self.is_rum_active?(script_executor)
16+
is_rum_active_script_result = script_executor.execute_script(Ext::RUM::SCRIPT_IS_RUM_ACTIVE)
17+
18+
Datadog.logger.debug { "[Selenium] SCRIPT_IS_RUM_ACTIVE result is #{is_rum_active_script_result.inspect}" }
19+
20+
Utils::Parsing.convert_to_bool(is_rum_active_script_result)
21+
end
22+
23+
def self.stop_rum_session(script_executor)
24+
config = Datadog.configuration.ci[:selenium]
25+
if is_rum_active?(script_executor)
26+
Datadog::CI.active_test&.set_tag(
27+
CI::Ext::Test::TAG_IS_RUM_ACTIVE,
28+
"true"
29+
)
30+
31+
result = script_executor.execute_script(Ext::RUM::SCRIPT_STOP_RUM_SESSION)
32+
Datadog.logger.debug { "[RUM] SCRIPT_STOP_RUM_SESSION result is #{result.inspect}" }
33+
34+
# introduce a delay to allow the RUM session to be stopped
35+
delay = config[:rum_flush_wait_millis] / 1000.0
36+
Datadog.logger.debug { "[RUM] Waiting for #{delay} seconds" }
37+
sleep(delay)
38+
end
39+
end
40+
end
41+
end
42+
end
43+
end

sig/datadog/ci/contrib/selenium/ext.rbs

-8
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@ module Datadog
44
module Selenium
55
module Ext
66
ENV_ENABLED: "DD_CIVISIBILITY_SELENIUM_ENABLED"
7-
8-
ENV_RUM_FLUSH_WAIT_MILLIS: "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
9-
10-
COOKIE_TEST_EXECUTION_ID: "datadog-ci-visibility-test-execution-id"
11-
12-
SCRIPT_IS_RUM_ACTIVE: String
13-
14-
SCRIPT_STOP_RUM_SESSION: String
157
end
168
end
179
end

sig/datadog/ci/contrib/selenium/rum.rbs

-13
This file was deleted.

sig/datadog/ci/ext/rum.rbs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Datadog
4+
module CI
5+
module Ext
6+
module RUM
7+
ENV_RUM_FLUSH_WAIT_MILLIS: "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS"
8+
9+
COOKIE_TEST_EXECUTION_ID: "datadog-ci-visibility-test-execution-id"
10+
11+
SCRIPT_IS_RUM_ACTIVE: String
12+
SCRIPT_STOP_RUM_SESSION: String
13+
end
14+
end
15+
end
16+
end

sig/datadog/ci/utils/rum.rbs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Datadog
2+
module CI
3+
module Utils
4+
module RUM
5+
def self.is_rum_active?: (untyped script_executor) -> bool
6+
7+
def self.stop_rum_session: (untyped script_executor) -> void
8+
end
9+
end
10+
end
11+
end

spec/datadog/ci/contrib/selenium/instrumentation_spec.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@
7878
expect(visited_urls).to eq(["http://www.example.com", "about:blank"])
7979
expect(executed_scripts).to eq(
8080
[
81-
Datadog::CI::Contrib::Selenium::Ext::SCRIPT_IS_RUM_ACTIVE,
82-
Datadog::CI::Contrib::Selenium::Ext::SCRIPT_STOP_RUM_SESSION,
81+
Datadog::CI::Ext::RUM::SCRIPT_IS_RUM_ACTIVE,
82+
Datadog::CI::Ext::RUM::SCRIPT_STOP_RUM_SESSION,
8383
"window.sessionStorage.clear()",
8484
"window.localStorage.clear()",
85-
Datadog::CI::Contrib::Selenium::Ext::SCRIPT_IS_RUM_ACTIVE,
86-
Datadog::CI::Contrib::Selenium::Ext::SCRIPT_STOP_RUM_SESSION
85+
Datadog::CI::Ext::RUM::SCRIPT_IS_RUM_ACTIVE,
86+
Datadog::CI::Ext::RUM::SCRIPT_STOP_RUM_SESSION
8787
]
8888
)
8989

0 commit comments

Comments
 (0)