playwright/imp/
selectors.rs1use 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 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}