thirtyfour
thirtyfour copied to clipboard
Prevent automatically closing WebDriver at the end of navigation
Is there an elegant way of keeping the driver open to allow for manual interaction after the automation? This is what I currently have, which doesn't seem ideal:
#[tokio::main]
async fn main() -> WebDriverResult<()> {
// Initiate the chromedriver server.
match TcpListener::bind(("127.0.0.1", PORT)) {
// ...
};
sleep(Duration::from_secs(2)).await;
println!("Initiating WebDriver client");
let caps = DesiredCapabilities::chrome();
let driver = WebDriver::new(format!("http://localhost:{}", PORT), caps).await?;
driver.goto("https://wikipedia.org").await?;
// Automation happens here.
loop { }
// Manual user interaction happens here.
Ok(())
}
You can wrap it in a ManuallyDrop, then call ManuallyDrop::into_inner at some point:
let driver = ManuallyDrop::new(WebDriver::new(/* ... */));
// `ManuallyDrop` impls `Deref<Target = T>`, so you can call methods like normal
driver.goto("https://example.org").await?;
// it won't close until you either do this or call `WebDriver::quit`
let _ = ManuallyDrop::into_inner(driver);
there is WebDriver::leak now exists in v0.36.0 and prevents auto drop