1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Copyright 2026 Paul Adamson
// Licensed under the Apache License, Version 2.0
//
// FileChooser - plain data struct constructed from "fileChooser" event params.
//
// FileChooser is NOT a ChannelOwner. It is constructed directly from
// the event params when a "fileChooser" event is received on the Page channel.
// The event params contain an ElementHandle GUID and an isMultiple flag.
//
// See: <https://playwright.dev/docs/api/class-filechooser>
use crateResult;
use crateElementHandle;
use PathBuf;
use Arc;
/// Represents a file chooser dialog triggered by an `<input type="file">` element.
///
/// `FileChooser` objects are dispatched by the `"fileChooser"` event on
/// [`Page`](crate::protocol::Page) via [`on_filechooser`](crate::protocol::Page::on_filechooser)
/// and [`expect_file_chooser`](crate::protocol::Page::expect_file_chooser).
///
/// # Usage
///
/// Use [`set_files`](FileChooser::set_files) to satisfy the file chooser by providing
/// file paths. The files are read from disk and sent to the browser.
///
/// # Example
///
/// ```ignore
/// use playwright_rs::protocol::Playwright;
/// use std::path::PathBuf;
///
/// #[tokio::main]
/// async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// let playwright = Playwright::launch().await?;
/// let browser = playwright.chromium().launch().await?;
/// let page = browser.new_page().await?;
///
/// page.set_content(
/// r#"<input type="file" id="f" />"#,
/// None
/// ).await?;
///
/// // Set up the waiter BEFORE the action that triggers the file chooser
/// let waiter = page.expect_file_chooser(None).await?;
///
/// // Click the file input to open the chooser
/// page.locator("#f").await.click(None).await?;
///
/// // Resolve the waiter and set files
/// let chooser = waiter.wait().await?;
/// chooser.set_files(&[PathBuf::from("/tmp/test.txt")]).await?;
///
/// browser.close().await?;
/// Ok(())
/// }
/// ```
///
/// See: <https://playwright.dev/docs/api/class-filechooser>