Skip to content

Commit 8b4e8e5

Browse files
committed
report language version to plausible
1 parent b703512 commit 8b4e8e5

File tree

10 files changed

+45
-2
lines changed

10 files changed

+45
-2
lines changed

dotnet/src/webdriver/SeleniumManager.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ public static Dictionary<string, string> BinaryPaths(string arguments)
178178
{
179179
StringBuilder argsBuilder = new StringBuilder(arguments);
180180
argsBuilder.Append(" --language-binding csharp");
181+
#if NET8_0_OR_GREATER
182+
argsBuilder.Append($" --language-version net8.0/{Environment.Version.Major}");
183+
#elif NETSTANDARD2_0
184+
argsBuilder.Append($" --language-version netstandard2.0/{Environment.Version.Major}");
185+
#elif NET462
186+
argsBuilder.Append(" --language-version net462");
187+
#endif
181188
argsBuilder.Append(" --output json");
182189
if (_logger.IsEnabled(LogEventLevel.Debug))
183190
{

java/src/org/openqa/selenium/manager/SeleniumManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,10 +261,12 @@ private void saveToFileSafely(InputStream inputStream, Path target) throws IOExc
261261
* @return the locations of the assets from Selenium Manager execution
262262
*/
263263
public Result getBinaryPaths(List<String> arguments) {
264-
List<String> args = new ArrayList<>(arguments.size() + 5);
264+
List<String> args = new ArrayList<>(arguments.size() + 7);
265265
args.addAll(arguments);
266266
args.add("--language-binding");
267267
args.add("java");
268+
args.add("--language-version");
269+
args.add(Runtime.version().feature() + "");
268270
args.add("--output");
269271
args.add("json");
270272

javascript/selenium-webdriver/common/driverFinder.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,16 @@ function getBinaryPaths(capabilities) {
4444
}
4545

4646
function getArgs(options) {
47-
let args = ['--browser', options.getBrowserName(), '--language-binding', 'javascript', '--output', 'json']
47+
let args = [
48+
'--browser',
49+
options.getBrowserName(),
50+
'--language-binding',
51+
'javascript',
52+
'--language-version',
53+
process.versions.node,
54+
'--output',
55+
'json',
56+
]
4857

4958
if (options.getBrowserVersion() && options.getBrowserVersion() !== '') {
5059
args.push('--browser-version', options.getBrowserVersion())

py/selenium/webdriver/common/selenium_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ def binary_paths(self, args: list) -> dict:
4949
args.append("--debug")
5050
args.append("--language-binding")
5151
args.append("python")
52+
args.append("--language-version")
53+
args.append(f"{sys.version_info.major}.{sys.version_info.minor}")
5254
args.append("--output")
5355
args.append("json")
5456

rb/lib/selenium/webdriver/common/selenium_manager.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def bin_path
3838
# @return [Hash] paths to the requested assets.
3939
def binary_paths(*arguments)
4040
arguments += %w[--language-binding ruby]
41+
arguments += ['--language-version', RUBY_VERSION]
4142
arguments += %w[--output json]
4243
arguments << '--debug' if WebDriver.logger.debug?
4344

rust/src/config.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ pub struct ManagerConfig {
6464
pub force_browser_download: bool,
6565
pub avoid_browser_download: bool,
6666
pub language_binding: String,
67+
pub language_binding_version: String,
6768
pub selenium_version: String,
6869
pub avoid_stats: bool,
6970
pub skip_driver_in_path: bool,
@@ -131,6 +132,7 @@ impl ManagerConfig {
131132
force_browser_download: BooleanKey("force-browser-download", false).get_value(),
132133
avoid_browser_download: BooleanKey("avoid-browser-download", false).get_value(),
133134
language_binding: StringKey(vec!["language-binding"], "").get_value(),
135+
language_binding_version: StringKey(vec!["language-version"], "").get_value(),
134136
selenium_version: StringKey(vec!["selenium-version"], "").get_value(),
135137
avoid_stats: BooleanKey("avoid-stats", false).get_value(),
136138
skip_driver_in_path: BooleanKey("skip-driver-in-path", false).get_value(),

rust/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,7 @@ pub trait SeleniumManager {
908908
.unwrap_or(ARCH_OTHER)
909909
.to_ascii_lowercase(),
910910
lang: self.get_language_binding().to_ascii_lowercase(),
911+
lang_version: self.get_language_binding_version().to_ascii_lowercase(),
911912
selenium_version: self.get_selenium_version().to_ascii_lowercase(),
912913
};
913914
let http_client = self.get_http_client().to_owned();
@@ -1605,6 +1606,16 @@ pub trait SeleniumManager {
16051606
}
16061607
}
16071608

1609+
fn get_language_binding_version(&self) -> &str {
1610+
self.get_config().language_binding_version.as_str()
1611+
}
1612+
1613+
fn set_language_binding_version(&mut self, language_binding_version: String) {
1614+
if !language_binding_version.is_empty() {
1615+
self.get_config_mut().language_binding_version = language_binding_version;
1616+
}
1617+
}
1618+
16081619
fn get_selenium_version(&self) -> &str {
16091620
self.get_config().selenium_version.as_str()
16101621
}

rust/src/main.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ struct Cli {
145145
#[clap(long)]
146146
language_binding: Option<String>,
147147

148+
/// Version of the language binding invoking Selenium Manager (e.g., 4.18.1, 3.12, net8.0/8)
149+
#[clap(long)]
150+
language_version: Option<String>,
151+
148152
/// Avoid sends usage statistics to plausible.io
149153
#[clap(long)]
150154
avoid_stats: bool,
@@ -223,6 +227,7 @@ fn main() {
223227
selenium_manager.set_cache_path(cache_path.clone());
224228
selenium_manager.set_offline(cli.offline);
225229
selenium_manager.set_language_binding(cli.language_binding.unwrap_or_default());
230+
selenium_manager.set_language_binding_version(cli.language_version.unwrap_or_default());
226231
let sm_version = clap::crate_version!();
227232
let selenium_version = sm_version.strip_prefix(SM_BETA_LABEL).unwrap_or(sm_version);
228233
selenium_manager.set_selenium_version(selenium_version.to_string());

rust/src/metadata.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub struct Stats {
3232
pub os: String,
3333
pub arch: String,
3434
pub lang: String,
35+
pub lang_version: String,
3536
pub selenium_version: String,
3637
pub stats_ttl: u64,
3738
}
@@ -147,6 +148,7 @@ pub fn is_stats_in_metadata(stats_metadata: &[Stats], props: &Props) -> bool {
147148
&& p.os.eq(&props.os)
148149
&& p.arch.eq(&props.arch)
149150
&& p.lang.eq(&props.lang)
151+
&& p.lang_version.eq(&props.lang_version)
150152
&& p.selenium_version.eq(&props.selenium_version)
151153
})
152154
.collect();
@@ -188,6 +190,7 @@ pub fn create_stats_metadata(props: &Props, stats_ttl: u64) -> Stats {
188190
os: props.os.to_string(),
189191
arch: props.arch.to_string(),
190192
lang: props.lang.to_string(),
193+
lang_version: props.lang_version.to_string(),
191194
selenium_version: props.selenium_version.to_string(),
192195
stats_ttl: now_unix_timestamp() + stats_ttl,
193196
}

rust/src/stats.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ pub struct Props {
4646
pub os: String,
4747
pub arch: String,
4848
pub lang: String,
49+
pub lang_version: String,
4950
pub selenium_version: String,
5051
}
5152

0 commit comments

Comments
 (0)