Skip to content

Commit e6bd1f8

Browse files
authored
[rust] Update Selenium Manager to fully support geckodriver 0.32.0 (#11126)
1 parent 2e013bd commit e6bd1f8

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

rust/src/firefox.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::path::PathBuf;
33

44
use crate::downloads::read_redirect_from_link;
55
use crate::files::compose_driver_path_in_cache;
6-
use crate::manager::{BrowserManager, detect_browser_version};
6+
use crate::manager::{BrowserManager, detect_browser_version, get_minor_version};
77
use crate::manager::ARCH::{ARM64, X32};
88
use crate::manager::OS::{MACOS, WINDOWS};
99
use crate::metadata::{create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata};
@@ -71,9 +71,14 @@ impl BrowserManager for FirefoxManager {
7171
}
7272

7373
fn get_driver_url(&self, driver_version: &str, os: &str, arch: &str) -> String {
74+
// As of 0.32.0, geckodriver ships aarch64 binaries for Linux and Windows
75+
// https://github.com/mozilla/geckodriver/releases/tag/v0.32.0
76+
let minor_driver_version = get_minor_version(driver_version).parse::<i32>().unwrap();
7477
let driver_label = if WINDOWS.is(os) {
7578
if X32.is(arch) {
7679
"win32.zip"
80+
} else if ARM64.is(arch) && minor_driver_version > 31 {
81+
"win-aarch64.zip"
7782
} else {
7883
"win64.zip"
7984
}
@@ -85,16 +90,21 @@ impl BrowserManager for FirefoxManager {
8590
}
8691
} else if X32.is(arch) {
8792
"linux32.tar.gz"
93+
} else if ARM64.is(arch) && minor_driver_version > 31 {
94+
"linux-aarch64.tar.gz"
8895
} else {
8996
"linux64.tar.gz"
9097
};
9198
format!("{}download/v{}/{}-v{}-{}", DRIVER_URL, driver_version, self.driver_name, driver_version, driver_label)
9299
}
93100

94101
fn get_driver_path_in_cache(&self, driver_version: &str, os: &str, arch: &str) -> PathBuf {
102+
let minor_driver_version = get_minor_version(driver_version).parse::<i32>().unwrap();
95103
let arch_folder = if WINDOWS.is(os) {
96104
if X32.is(arch) {
97105
"win32"
106+
} else if ARM64.is(arch) && minor_driver_version > 31 {
107+
"win-arm64"
98108
} else {
99109
"win64"
100110
}
@@ -106,9 +116,47 @@ impl BrowserManager for FirefoxManager {
106116
}
107117
} else if X32.is(arch) {
108118
"linux32"
119+
} else if ARM64.is(arch) && minor_driver_version > 31 {
120+
"linux-arm64"
109121
} else {
110122
"linux64"
111123
};
112124
compose_driver_path_in_cache(self.driver_name, os, arch_folder, driver_version)
113125
}
114126
}
127+
128+
#[cfg(test)]
129+
mod unit_tests {
130+
use super::*;
131+
132+
#[test]
133+
fn test_driver_url() {
134+
let firefox_manager = FirefoxManager::new();
135+
136+
let data = vec!(
137+
vec!("0.32.0", "linux", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux32.tar.gz"),
138+
vec!("0.32.0", "linux", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz"),
139+
vec!("0.32.0", "linux", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux-aarch64.tar.gz"),
140+
vec!("0.32.0", "windows", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win32.zip"),
141+
vec!("0.32.0", "windows", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win64.zip"),
142+
vec!("0.32.0", "windows", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win-aarch64.zip"),
143+
vec!("0.32.0", "macos", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz"),
144+
vec!("0.32.0", "macos", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz"),
145+
vec!("0.32.0", "macos", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos-aarch64.tar.gz"),
146+
vec!("0.31.0", "linux", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux32.tar.gz"),
147+
vec!("0.31.0", "linux", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz"),
148+
vec!("0.31.0", "linux", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz"),
149+
vec!("0.31.0", "windows", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win32.zip"),
150+
vec!("0.31.0", "windows", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip"),
151+
vec!("0.31.0", "windows", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip"),
152+
vec!("0.31.0", "macos", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz"),
153+
vec!("0.31.0", "macos", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz"),
154+
vec!("0.31.0", "macos", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos-aarch64.tar.gz"),
155+
);
156+
157+
data.iter().for_each(|d| {
158+
let driver_url = firefox_manager.get_driver_url(d.get(0).unwrap(), d.get(1).unwrap(), d.get(2).unwrap());
159+
assert_eq!(d.get(3).unwrap().to_string(), driver_url);
160+
});
161+
}
162+
}

rust/src/manager.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,9 @@ pub fn detect_browser_version(browser_name: &str, shell: &str, flag: &str, args:
113113
pub fn get_major_version(full_version: &str) -> String {
114114
let version_vec: Vec<&str> = full_version.split('.').collect();
115115
version_vec.first().unwrap().to_string()
116-
}
116+
}
117+
118+
pub fn get_minor_version(full_version: &str) -> String {
119+
let version_vec: Vec<&str> = full_version.split('.').collect();
120+
version_vec.get(1).unwrap().to_string()
121+
}

rust/tests/cli_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rstest::rstest;
1010
#[case("edge", "105", "105.0")]
1111
#[case("edge", "106", "106.0")]
1212
#[case("firefox", "", "")]
13-
#[case("firefox", "105", "0.31.0")]
13+
#[case("firefox", "105", "0.32.0")]
1414
fn ok_test(#[case] browser: String, #[case] browser_version: String, #[case] driver_version: String) {
1515
println!("CLI test browser={} -- browser_version={} -- driver_version={}", browser, browser_version, driver_version);
1616

0 commit comments

Comments
 (0)