Skip to content

Commit 5e64286

Browse files
authored
[rust] Include webview2 in Edge module (#12904)
1 parent 2a54d3c commit 5e64286

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

rust/src/edge.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,14 @@ use crate::{
3636
REG_VERSION_ARG, STABLE,
3737
};
3838

39-
pub const EDGE_NAMES: &[&str] = &["edge", "msedge", "microsoftedge"];
39+
pub const EDGE_NAMES: &[&str] = &[
40+
"edge",
41+
EDGE_WINDOWS_AND_LINUX_APP_NAME,
42+
"microsoftedge",
43+
WEBVIEW2_NAME,
44+
];
4045
pub const EDGEDRIVER_NAME: &str = "msedgedriver";
46+
pub const WEBVIEW2_NAME: &str = "webview2";
4147
const DRIVER_URL: &str = "https://msedgedriver.azureedge.net/";
4248
const LATEST_STABLE: &str = "LATEST_STABLE";
4349
const LATEST_RELEASE: &str = "LATEST_RELEASE";
@@ -61,13 +67,17 @@ pub struct EdgeManager {
6167

6268
impl EdgeManager {
6369
pub fn new() -> Result<Box<Self>, Error> {
64-
let browser_name = EDGE_NAMES[0];
70+
Self::new_with_name(EDGE_NAMES[0].to_string())
71+
}
72+
73+
pub fn new_with_name(browser_name: String) -> Result<Box<Self>, Error> {
74+
let static_browser_name: &str = Box::leak(browser_name.into_boxed_str());
6575
let driver_name = EDGEDRIVER_NAME;
66-
let config = ManagerConfig::default(browser_name, driver_name);
76+
let config = ManagerConfig::default(static_browser_name, driver_name);
6777
let default_timeout = config.timeout.to_owned();
6878
let default_proxy = &config.proxy;
6979
Ok(Box::new(EdgeManager {
70-
browser_name,
80+
browser_name: static_browser_name,
7181
driver_name,
7282
http_client: create_http_client(default_timeout, default_proxy)?,
7383
config,

rust/src/lib.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
// under the License.
1717

1818
use crate::chrome::{ChromeManager, CHROMEDRIVER_NAME, CHROME_NAME};
19-
use crate::edge::{EdgeManager, EDGEDRIVER_NAME, EDGE_NAMES};
19+
use crate::edge::{EdgeManager, EDGEDRIVER_NAME, EDGE_NAMES, WEBVIEW2_NAME};
2020
use crate::files::{
2121
create_parent_path_if_not_exists, create_path_if_not_exists, default_cache_folder,
2222
get_binary_extension, path_to_string,
@@ -499,6 +499,7 @@ pub trait SeleniumManager {
499499
&& !self.is_iexplorer()
500500
&& !self.is_grid()
501501
&& !self.is_safari()
502+
&& !self.is_webview2()
502503
{
503504
let browser_path = self.download_browser()?;
504505
if browser_path.is_some() {
@@ -642,6 +643,10 @@ pub trait SeleniumManager {
642643
self.get_browser_name().eq(EDGE_NAMES[0])
643644
}
644645

646+
fn is_webview2(&self) -> bool {
647+
self.get_browser_name().eq(WEBVIEW2_NAME)
648+
}
649+
645650
fn is_browser_version_beta(&self) -> bool {
646651
self.is_beta(self.get_browser_version())
647652
}
@@ -1144,7 +1149,7 @@ pub trait SeleniumManager {
11441149
}
11451150

11461151
fn set_browser_path(&mut self, browser_path: String) {
1147-
if !browser_path.is_empty() {
1152+
if !browser_path.is_empty() && !self.is_webview2() {
11481153
self.get_config_mut().browser_path = browser_path;
11491154
}
11501155
}
@@ -1307,7 +1312,7 @@ pub fn get_manager_by_browser(browser_name: String) -> Result<Box<dyn SeleniumMa
13071312
} else if browser_name_lower_case.eq(FIREFOX_NAME) {
13081313
Ok(FirefoxManager::new()?)
13091314
} else if EDGE_NAMES.contains(&browser_name_lower_case.as_str()) {
1310-
Ok(EdgeManager::new()?)
1315+
Ok(EdgeManager::new_with_name(browser_name)?)
13111316
} else if IE_NAMES.contains(&browser_name_lower_case.as_str()) {
13121317
Ok(IExplorerManager::new()?)
13131318
} else if browser_name_lower_case.eq(SAFARI_NAME) {

rust/tests/browser_tests.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717

1818
use assert_cmd::Command;
1919
use rstest::rstest;
20+
use selenium_manager::logger::JsonOutput;
2021
use std::env::consts::OS;
2122

22-
use crate::common::assert_output;
23+
use crate::common::{assert_driver, assert_output};
2324

2425
mod common;
2526

@@ -147,3 +148,20 @@ fn browser_path_test(#[case] os: String, #[case] browser: String, #[case] browse
147148
assert!(!output.contains("WARN"));
148149
}
149150
}
151+
152+
#[test]
153+
fn webview2_test() {
154+
let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager"));
155+
cmd.args(["--browser", "webview2", "--output", "json"])
156+
.assert()
157+
.success()
158+
.code(0);
159+
160+
assert_driver(&mut cmd);
161+
162+
let stdout = &cmd.unwrap().stdout;
163+
let output = std::str::from_utf8(stdout).unwrap();
164+
let json: JsonOutput = serde_json::from_str(output).unwrap();
165+
let browser_path = json.result.browser_path;
166+
assert!(browser_path.is_empty());
167+
}

0 commit comments

Comments
 (0)