use crate::error::WebDriverResult;
use crate::session::handle::SessionHandle;
use std::ops::{Deref, DerefMut};
use crate::TimeoutConfiguration;
use fantoccini::wd::Capabilities;
#[derive(Debug)]
pub struct WebDriver {
pub handle: SessionHandle,
}
impl WebDriver {
pub async fn new<C>(server_url: &str, capabilities: C) -> WebDriverResult<Self>
where
C: Into<Capabilities>,
{
use fantoccini::ClientBuilder;
let caps: Capabilities = capabilities.into();
let client = ClientBuilder::native().capabilities(caps.clone()).connect(server_url).await?;
let timeouts = TimeoutConfiguration::default();
client.update_timeouts(timeouts).await?;
Ok(Self {
handle: SessionHandle::new(client, caps).await?,
})
}
pub async fn quit(self) -> WebDriverResult<()> {
self.handle.client.close().await?;
Ok(())
}
}
impl Deref for WebDriver {
type Target = SessionHandle;
fn deref(&self) -> &Self::Target {
&self.handle
}
}
impl DerefMut for WebDriver {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.handle
}
}