playwright_rs/protocol/event_value.rs
1// EventValue — typed return value for the generic expect_event() method.
2//
3// This enum allows the generic Page::expect_event() / BrowserContext::expect_event()
4// API to return a typed value that callers can match on.
5//
6// See: <https://playwright.dev/docs/api/class-page#page-wait-for-event>
7// See: <https://playwright.dev/docs/api/class-browsercontext#browser-context-wait-for-event>
8
9/// Typed value returned by the generic `expect_event()` method on `Page` and `BrowserContext`.
10///
11/// This enum covers the full set of events supported by `expect_event()`.
12/// Each variant wraps the event payload (or carries no data for unit events).
13///
14/// # Example
15///
16/// ```ignore
17/// use playwright_rs::protocol::{EventValue, Playwright};
18///
19/// #[tokio::main]
20/// async fn main() -> Result<(), Box<dyn std::error::Error>> {
21/// let playwright = Playwright::launch().await?;
22/// let browser = playwright.chromium().launch().await?;
23/// let context = browser.new_context().await?;
24/// let page = context.new_page().await?;
25///
26/// let _ = page.goto("about:blank", None).await;
27///
28/// // Set up the waiter BEFORE the action that triggers the event
29/// let waiter = page.expect_event("console", None).await?;
30///
31/// // Trigger the event
32/// page.evaluate::<(), ()>("() => { console.log('hello'); }", None).await?;
33///
34/// // Resolve and match the result
35/// match waiter.wait().await? {
36/// EventValue::ConsoleMessage(msg) => println!("Got console: {}", msg.text()),
37/// other => panic!("Unexpected: {:?}", other),
38/// }
39///
40/// // Context-level: wait for a new page
41/// let waiter = context.expect_event("page", None).await?;
42/// let _p = context.new_page().await?;
43/// match waiter.wait().await? {
44/// EventValue::Page(p) => println!("New page: {}", p.url()),
45/// other => panic!("Unexpected: {:?}", other),
46/// }
47///
48/// browser.close().await?;
49/// Ok(())
50/// }
51/// ```
52///
53/// See: <https://playwright.dev/docs/api/class-page#page-wait-for-event>
54#[derive(Clone)]
55pub enum EventValue {
56 /// A new page was created (popup or context "page" event).
57 Page(crate::protocol::page::Page),
58 /// A network request was issued.
59 Request(crate::protocol::request::Request),
60 /// A network response was received.
61 Response(crate::protocol::response::ResponseObject),
62 /// A file download started.
63 Download(crate::protocol::download::Download),
64 /// A console message was produced.
65 ConsoleMessage(crate::protocol::console_message::ConsoleMessage),
66 /// A file chooser dialog was opened.
67 FileChooser(crate::protocol::file_chooser::FileChooser),
68 /// A web socket connection was opened.
69 WebSocket(crate::protocol::web_socket::WebSocket),
70 /// A web worker was created.
71 Worker(crate::protocol::worker::Worker),
72 /// A web error (uncaught exception) was reported — context level.
73 WebError(crate::protocol::web_error::WebError),
74 /// The page or context was closed (no payload).
75 Close,
76 /// A frame was attached, detached, or navigated.
77 Frame(crate::protocol::frame::Frame),
78 /// The page "load" event fired (no payload).
79 Load,
80 /// The page "crash" event fired (no payload).
81 Crash,
82 /// An uncaught JS exception was reported — carries the error message.
83 PageError(String),
84}
85
86impl std::fmt::Debug for EventValue {
87 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
88 match self {
89 EventValue::Page(_) => write!(f, "EventValue::Page(..)"),
90 EventValue::Request(_) => write!(f, "EventValue::Request(..)"),
91 EventValue::Response(_) => write!(f, "EventValue::Response(..)"),
92 EventValue::Download(_) => write!(f, "EventValue::Download(..)"),
93 EventValue::ConsoleMessage(m) => {
94 write!(f, "EventValue::ConsoleMessage({:?})", m.text())
95 }
96 EventValue::FileChooser(_) => write!(f, "EventValue::FileChooser(..)"),
97 EventValue::WebSocket(_) => write!(f, "EventValue::WebSocket(..)"),
98 EventValue::Worker(_) => write!(f, "EventValue::Worker(..)"),
99 EventValue::WebError(_) => write!(f, "EventValue::WebError(..)"),
100 EventValue::Close => write!(f, "EventValue::Close"),
101 EventValue::Frame(_) => write!(f, "EventValue::Frame(..)"),
102 EventValue::Load => write!(f, "EventValue::Load"),
103 EventValue::Crash => write!(f, "EventValue::Crash"),
104 EventValue::PageError(msg) => write!(f, "EventValue::PageError({:?})", msg),
105 }
106 }
107}