Skip to main content

limit_cli/tools/browser/handlers/
wait.rs

1use super::super::args::ArgsExt;
2use super::super::client::BrowserClient;
3use super::super::client_ext::WaitingExt;
4use super::super::response::ok_msg;
5use limit_agent::error::AgentError;
6use serde_json::Value;
7
8pub async fn wait(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
9    let condition = args.get_str("wait_for", "wait")?;
10    client.wait_for(condition).await?;
11    Ok(ok_msg(format!("Wait condition met: {}", condition)))
12}
13
14pub async fn wait_for_text(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
15    let text = args.get_str("text", "wait_for_text")?;
16    client.wait_for_text(text).await?;
17    Ok(ok_msg(format!("Text found: {}", text)))
18}
19
20pub async fn wait_for_url(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
21    let pattern = args.get_str("pattern", "wait_for_url")?;
22    client.wait_for_url(pattern).await?;
23    Ok(ok_msg(format!("URL pattern matched: {}", pattern)))
24}
25
26pub async fn wait_for_load(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
27    let state = args.get_str("state", "wait_for_load")?;
28    client.wait_for_load(state).await?;
29    Ok(ok_msg(format!("Load state reached: {}", state)))
30}
31
32pub async fn wait_for_download(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
33    let path = args.get_opt_str("path");
34    let download_path = client.wait_for_download(path).await?;
35    Ok(serde_json::json!({
36        "success": true,
37        "path": download_path,
38        "message": "Download completed"
39    }))
40}
41
42pub async fn wait_for_fn(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
43    let js = args.get_str("js", "wait_for_fn")?;
44    client.wait_for_fn(js).await?;
45    Ok(ok_msg("JavaScript condition met"))
46}
47
48pub async fn wait_for_state(client: &BrowserClient, args: &Value) -> Result<Value, AgentError> {
49    let selector = args.get_str("selector", "wait_for_state")?;
50    let state = args.get_str("state", "wait_for_state")?;
51    client.wait_for_state(selector, state).await?;
52    Ok(ok_msg(format!(
53        "Element {} reached state: {}",
54        selector, state
55    )))
56}