Skip to main content

allwright/
client_locator.rs

1use super::selectors::chain_selector_for_transport;
2use super::types::{
3    ClickOptions, CommandOptions, HighlightOptions, Locator, Page, PressOptions, Result,
4    WaitForSelectorOptions,
5};
6
7impl Locator {
8    pub fn page(&self) -> &Page {
9        &self.page
10    }
11
12    pub fn selector(&self) -> &str {
13        &self.selector
14    }
15
16    pub fn locator(&self, css_selector: impl Into<String>) -> Locator {
17        let child_selector = css_selector.into();
18        Locator {
19            page: self.page.clone(),
20            selector: chain_selector_for_transport(&self.selector, &child_selector),
21        }
22    }
23
24    pub async fn frame(&self) -> Result<Page> {
25        self.frame_with_options(CommandOptions::default()).await
26    }
27
28    pub async fn frame_with_options(&self, options: CommandOptions) -> Result<Page> {
29        self.page
30            .frame_with_options(self.selector.clone(), options)
31            .await
32    }
33
34    pub async fn click(&self) -> Result<()> {
35        self.page.click(self.selector.clone()).await
36    }
37
38    pub async fn click_with_options(&self, options: impl Into<ClickOptions>) -> Result<()> {
39        self.page
40            .click_with_options(self.selector.clone(), options)
41            .await
42    }
43
44    pub async fn dblclick(&self) -> Result<()> {
45        self.page.dblclick(self.selector.clone()).await
46    }
47
48    pub async fn dblclick_with_options(&self, options: ClickOptions) -> Result<()> {
49        self.page
50            .dblclick_with_options(self.selector.clone(), options)
51            .await
52    }
53
54    pub async fn count(&self) -> Result<u32> {
55        self.page.count(self.selector.clone()).await
56    }
57
58    pub async fn count_with_options(&self, options: CommandOptions) -> Result<u32> {
59        self.page
60            .count_with_options(self.selector.clone(), options)
61            .await
62    }
63
64    pub async fn highlight(&self) -> Result<()> {
65        self.page.highlight(self.selector.clone()).await
66    }
67
68    pub async fn highlight_with_options(&self, options: HighlightOptions) -> Result<()> {
69        self.page
70            .highlight_with_options(self.selector.clone(), options)
71            .await
72    }
73
74    pub async fn focus(&self) -> Result<()> {
75        self.page.focus(self.selector.clone()).await
76    }
77
78    pub async fn focus_with_options(&self, options: CommandOptions) -> Result<()> {
79        self.page
80            .focus_with_options(self.selector.clone(), options)
81            .await
82    }
83
84    pub async fn fill(&self, value: impl Into<String>) -> Result<()> {
85        self.page.fill(self.selector.clone(), value.into()).await
86    }
87
88    pub async fn fill_with_options(
89        &self,
90        value: impl Into<String>,
91        options: CommandOptions,
92    ) -> Result<()> {
93        self.page
94            .fill_with_options(self.selector.clone(), value.into(), options)
95            .await
96    }
97
98    pub async fn hover(&self) -> Result<()> {
99        self.page.hover(self.selector.clone()).await
100    }
101
102    pub async fn hover_with_options(&self, options: CommandOptions) -> Result<()> {
103        self.page
104            .hover_with_options(self.selector.clone(), options)
105            .await
106    }
107
108    pub async fn press(&self, key: impl Into<String>) -> Result<()> {
109        self.page.press(self.selector.clone(), key.into()).await
110    }
111
112    pub async fn press_with_options(
113        &self,
114        key: impl Into<String>,
115        options: PressOptions,
116    ) -> Result<()> {
117        self.page
118            .press_with_options(self.selector.clone(), key.into(), options)
119            .await
120    }
121
122    pub async fn text_content(&self) -> Result<Option<String>> {
123        self.page.text_content(self.selector.clone()).await
124    }
125
126    pub async fn text_content_with_options(
127        &self,
128        options: CommandOptions,
129    ) -> Result<Option<String>> {
130        self.page
131            .text_content_with_options(self.selector.clone(), options)
132            .await
133    }
134
135    pub async fn inner_text(&self) -> Result<String> {
136        self.page.inner_text(self.selector.clone()).await
137    }
138
139    pub async fn inner_text_with_options(&self, options: CommandOptions) -> Result<String> {
140        self.page
141            .inner_text_with_options(self.selector.clone(), options)
142            .await
143    }
144
145    pub async fn wait_for(&self) -> Result<()> {
146        self.wait_for_with_options(WaitForSelectorOptions {
147            visible: Some(true),
148            ..Default::default()
149        })
150        .await
151    }
152
153    pub async fn wait_for_with_options(&self, options: WaitForSelectorOptions) -> Result<()> {
154        let mut options = options;
155        if options.visible.is_none() {
156            options.visible = Some(true);
157        }
158        self.page
159            .wait_for_selector_with_options(self.selector.clone(), options)
160            .await
161    }
162}