From f1b6e9314ed9cdb612b5a9b925c9c5d4befd5e45 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Tue, 6 May 2025 12:00:15 -0300 Subject: [PATCH] fix(tauri-driver): wait for webdriver to start --- crates/tauri-driver/src/main.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/crates/tauri-driver/src/main.rs b/crates/tauri-driver/src/main.rs index 8fee5da08954..a9e9ddf573ef 100644 --- a/crates/tauri-driver/src/main.rs +++ b/crates/tauri-driver/src/main.rs @@ -11,6 +11,8 @@ html_favicon_url = "https://github.com/tauri-apps/tauri/raw/dev/.github/icon.png" )] +use std::{net::TcpStream, time::Duration}; + #[cfg(any(target_os = "linux", windows))] mod cli; #[cfg(any(target_os = "linux", windows))] @@ -43,6 +45,11 @@ fn main() { let driver = driver .spawn() .expect("error while running native webdriver"); + wait_for_server( + &format!("{}:{}", args.native_host, args.native_port), + Duration::from_secs(2), + ) + .expect("failed to start WebDriver"); // start our webdriver intermediary node if let Err(e) = server::run(args, driver) { @@ -50,3 +57,26 @@ fn main() { std::process::exit(1); } } + +fn wait_for_server(addr: &str, retry_interval: Duration) -> std::io::Result<()> { + loop { + match TcpStream::connect(addr) { + Ok(_) => { + println!("WebDriver server is available at {}", addr); + return Ok(()); + } + Err(e) => { + if e.kind() == std::io::ErrorKind::ConnectionRefused + || e.kind() == std::io::ErrorKind::TimedOut + { + // Server not up yet, retry + println!("Waiting for WebDriver server at {}...", addr); + std::thread::sleep(retry_interval); + } else { + // Unexpected error + return Err(e); + } + } + } + } +}