allwright/
client_locator.rs1use 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}