@@ -212,6 +212,44 @@ pub fn parse_command(args: &[String], flags: &Flags) -> Result<Value, ParseError
212212
213213 // === Wait ===
214214 "wait" => {
215+ // Check for --url flag: wait --url "**/dashboard"
216+ if let Some ( idx) = rest. iter ( ) . position ( |& s| s == "--url" || s == "-u" ) {
217+ let url = rest. get ( idx + 1 ) . ok_or_else ( || ParseError :: MissingArguments {
218+ context : "wait --url" . to_string ( ) ,
219+ usage : "wait --url <pattern>" ,
220+ } ) ?;
221+ return Ok ( json ! ( { "id" : id, "action" : "waitforurl" , "url" : url } ) ) ;
222+ }
223+
224+ // Check for --load flag: wait --load networkidle
225+ if let Some ( idx) = rest. iter ( ) . position ( |& s| s == "--load" || s == "-l" ) {
226+ let state = rest. get ( idx + 1 ) . ok_or_else ( || ParseError :: MissingArguments {
227+ context : "wait --load" . to_string ( ) ,
228+ usage : "wait --load <state>" ,
229+ } ) ?;
230+ return Ok ( json ! ( { "id" : id, "action" : "waitforloadstate" , "state" : state } ) ) ;
231+ }
232+
233+ // Check for --fn flag: wait --fn "window.ready === true"
234+ if let Some ( idx) = rest. iter ( ) . position ( |& s| s == "--fn" || s == "-f" ) {
235+ let expr = rest. get ( idx + 1 ) . ok_or_else ( || ParseError :: MissingArguments {
236+ context : "wait --fn" . to_string ( ) ,
237+ usage : "wait --fn <expression>" ,
238+ } ) ?;
239+ return Ok ( json ! ( { "id" : id, "action" : "waitforfunction" , "expression" : expr } ) ) ;
240+ }
241+
242+ // Check for --text flag: wait --text "Welcome"
243+ if let Some ( idx) = rest. iter ( ) . position ( |& s| s == "--text" || s == "-t" ) {
244+ let text = rest. get ( idx + 1 ) . ok_or_else ( || ParseError :: MissingArguments {
245+ context : "wait --text" . to_string ( ) ,
246+ usage : "wait --text <text>" ,
247+ } ) ?;
248+ // Use getByText locator to wait for text to appear
249+ return Ok ( json ! ( { "id" : id, "action" : "wait" , "selector" : format!( "text={}" , text) } ) ) ;
250+ }
251+
252+ // Default: selector or timeout
215253 if let Some ( arg) = rest. get ( 0 ) {
216254 if arg. parse :: < u64 > ( ) . is_ok ( ) {
217255 Ok ( json ! ( { "id" : id, "action" : "wait" , "timeout" : arg. parse:: <u64 >( ) . unwrap( ) } ) )
@@ -221,7 +259,7 @@ pub fn parse_command(args: &[String], flags: &Flags) -> Result<Value, ParseError
221259 } else {
222260 Err ( ParseError :: MissingArguments {
223261 context : "wait" . to_string ( ) ,
224- usage : "wait <selector|ms>" ,
262+ usage : "wait <selector|ms|--url|--load|--fn|--text >" ,
225263 } )
226264 }
227265 }
@@ -1090,6 +1128,57 @@ mod tests {
10901128 assert_eq ! ( cmd[ "maxDepth" ] , 3 ) ;
10911129 }
10921130
1131+ // === Wait ===
1132+
1133+ #[ test]
1134+ fn test_wait_selector ( ) {
1135+ let cmd = parse_command ( & args ( "wait #element" ) , & default_flags ( ) ) . unwrap ( ) ;
1136+ assert_eq ! ( cmd[ "action" ] , "wait" ) ;
1137+ assert_eq ! ( cmd[ "selector" ] , "#element" ) ;
1138+ }
1139+
1140+ #[ test]
1141+ fn test_wait_timeout ( ) {
1142+ let cmd = parse_command ( & args ( "wait 5000" ) , & default_flags ( ) ) . unwrap ( ) ;
1143+ assert_eq ! ( cmd[ "action" ] , "wait" ) ;
1144+ assert_eq ! ( cmd[ "timeout" ] , 5000 ) ;
1145+ }
1146+
1147+ #[ test]
1148+ fn test_wait_url ( ) {
1149+ let cmd = parse_command ( & args ( "wait --url **/dashboard" ) , & default_flags ( ) ) . unwrap ( ) ;
1150+ assert_eq ! ( cmd[ "action" ] , "waitforurl" ) ;
1151+ assert_eq ! ( cmd[ "url" ] , "**/dashboard" ) ;
1152+ }
1153+
1154+ #[ test]
1155+ fn test_wait_load ( ) {
1156+ let cmd = parse_command ( & args ( "wait --load networkidle" ) , & default_flags ( ) ) . unwrap ( ) ;
1157+ assert_eq ! ( cmd[ "action" ] , "waitforloadstate" ) ;
1158+ assert_eq ! ( cmd[ "state" ] , "networkidle" ) ;
1159+ }
1160+
1161+ #[ test]
1162+ fn test_wait_load_missing_state ( ) {
1163+ let result = parse_command ( & args ( "wait --load" ) , & default_flags ( ) ) ;
1164+ assert ! ( result. is_err( ) ) ;
1165+ assert ! ( matches!( result. unwrap_err( ) , ParseError :: MissingArguments { .. } ) ) ;
1166+ }
1167+
1168+ #[ test]
1169+ fn test_wait_fn ( ) {
1170+ let cmd = parse_command ( & args ( "wait --fn window.ready" ) , & default_flags ( ) ) . unwrap ( ) ;
1171+ assert_eq ! ( cmd[ "action" ] , "waitforfunction" ) ;
1172+ assert_eq ! ( cmd[ "expression" ] , "window.ready" ) ;
1173+ }
1174+
1175+ #[ test]
1176+ fn test_wait_text ( ) {
1177+ let cmd = parse_command ( & args ( "wait --text Welcome" ) , & default_flags ( ) ) . unwrap ( ) ;
1178+ assert_eq ! ( cmd[ "action" ] , "wait" ) ;
1179+ assert_eq ! ( cmd[ "selector" ] , "text=Welcome" ) ;
1180+ }
1181+
10931182 // === Unknown command ===
10941183
10951184 #[ test]
0 commit comments