playwright/imp/
selectors.rs

1use crate::imp::{core::*, prelude::*};
2
3#[derive(Debug)]
4pub(crate) struct Selectors {
5    channel: ChannelOwner
6}
7
8impl Selectors {
9    pub(crate) fn new(channel: ChannelOwner) -> Self { Self { channel } }
10
11    pub(crate) async fn register(
12        &self,
13        name: &str,
14        script: &str,
15        content_script: bool
16    ) -> Result<(), Arc<Error>> {
17        let args = RegisterArgs {
18            name,
19            source: script,
20            content_script
21        };
22        let _ = send_message!(self, "register", args);
23        Ok(())
24    }
25}
26
27impl RemoteObject for Selectors {
28    fn channel(&self) -> &ChannelOwner { &self.channel }
29    fn channel_mut(&mut self) -> &mut ChannelOwner { &mut self.channel }
30}
31
32#[derive(Serialize)]
33#[serde(rename_all = "camelCase")]
34struct RegisterArgs<'a, 'b> {
35    name: &'a str,
36    source: &'b str,
37    #[serde(skip_serializing_if = "std::ops::Not::not")]
38    content_script: bool
39}
40
41#[cfg(test)]
42mod tests {
43    use super::*;
44    use crate::imp::playwright::Playwright;
45
46    crate::runtime_test!(register, {
47        let driver = Driver::install().unwrap();
48        let conn = Connection::run(&driver).unwrap();
49        let p = Playwright::wait_initial_object(&conn).await.unwrap();
50        let p = p.upgrade().unwrap();
51        // Selectors may not be available in newer Playwright versions
52        if let Some(selectors_weak) = p.selectors() {
53            let s: Arc<Selectors> = selectors_weak.upgrade().unwrap();
54            let fut = s.register("foo", "()", false);
55            log::trace!("fut");
56            let res = fut.await;
57            dbg!(&res);
58            assert!(res.is_ok());
59        } else {
60            log::trace!("Selectors not available in this Playwright version");
61        }
62    });
63}