selenium_webdriver/
firefoxoptions.rs1use super::reqs::*;
2use std::collections::HashMap;
3pub struct FirefoxOptions{
8 pub(crate) string_for_session:String,
9}
10impl FirefoxOptions{
11 pub fn new()->Self{
12 FirefoxOptions{
13 string_for_session: String::from(r#""moz:firefoxOptions":{}"#),
14 }
15 }
16 pub fn add_binary(&mut self,path: &str)->&mut Self{
18 if self.string_for_session.contains("binary"){panic!("The options already contain path to binary");}
19 self.string_for_session.pop();
20 let bin = format!(r#""binary":"{}","#,path);
21 self.string_for_session.push_str(&bin);
22 self.string_for_session.push('}');
23 self
24 }
25 pub fn add_args(&mut self, args: Vec<&str>)->&mut Self{
28 if self.string_for_session.contains("args"){panic!("The options already contain args");}
29 self.string_for_session.pop();
30 let mut inner_args = String::from("\"args\":");
31 let vec_to_str = from_str_vec_to_str(args);
32 inner_args.push_str(&vec_to_str);
33 self.string_for_session.push_str(&inner_args);
34 self.string_for_session.push('}');
35 self
36 }
37 pub fn add_prefs(&mut self, prefs:&str)->&mut Self{
46 if self.string_for_session.contains("prefs"){panic!("The options already contain prefs");}
47 self.string_for_session.pop();
48 let text = format!(r#""prefs":{},"#,prefs);
49 self.string_for_session.push_str(&text);
50 self.string_for_session.push('}');
51 self
52 }
53 pub fn add_log(&mut self, log_level:LogLevel)->&mut Self{
55 if self.string_for_session.contains("log"){panic!("The options already contain log");}
56 self.string_for_session.pop();
57 let lev_to_str = match log_level{
58 LogLevel::Trace=>"trace",
59 LogLevel::Debug=>"debug",
60 LogLevel::Config=>"config",
61 LogLevel::Info=>"info",
62 LogLevel::Warn=>"warn",
63 LogLevel::Error=>"error",
64 LogLevel::Fatal=>"fatal"
65 };
66 let text = format!(r#""log":{{"level":"{}"}},"#,lev_to_str);
67 self.string_for_session.push_str(&text);
68 self.string_for_session.push('}');
69 self
70 }
71 pub fn add_env(&mut self,env_vars: HashMap<&str,&str>)->&mut Self{
73 if self.string_for_session.contains("env"){panic!("The options already contain env vars");}
74 self.string_for_session.pop();
75 let mut temp_string = String::from("\"env\":{");
76 for i in env_vars{
77 let temp = format!(r#""{}":"{}","#,i.0,i.1);
78 temp_string.push_str(&temp);
79 }
80 temp_string.pop();
81 temp_string.push('}');
82 temp_string.push(',');
83 self.string_for_session.push_str(&temp_string);
84 self.string_for_session.push('}');
85 self
86 }
87}
88pub enum LogLevel{
89 Trace,
90 Debug,
91 Config,
92 Info,
93 Warn,
94 Error,
95 Fatal
96}
97
98mod firefox_tests{
99 use super::*;
100 #[test]
101 fn firef_opts() {
102 let map = r#"{"one":2,"two":"two_val"}"#;
103 let mut ff = FirefoxOptions::new();
104 ff.add_binary("C\\Users\\Me");
105 ff.add_prefs(map);
106 ff.add_args(vec!["-headless","-devtools"]);
107 ff.add_log(LogLevel::Error);
108 let mut m = HashMap::new();
109 m.insert("first var","first var val");
110 ff.add_env(m);
111 let x = r#""moz:firefoxOptions":{"binary":"C\Users\Me","prefs":{"one":2,"two":"two_val"},"args":["-headless","-devtools"],"log":{"level":"error"},"env":{"first var":"first var val"},}"#;
112 assert_eq!(x,ff.string_for_session);
113 }
114}