Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions moli-cdp-smoke/moli_cdp_smoke/groups/dom_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

from . import SmokeState
from ..assertions import SmokeError, assert_equal, wait_until
from ..progress import await_with_progress


async def run_dom_input_group(state: SmokeState) -> None:
Expand Down Expand Up @@ -192,7 +193,11 @@ async def run_dom_input_group(state: SmokeState) -> None:
await run_playwright_expect_matcher_workflows(state)
await run_locator_composition_workflows(state)
await run_keyboard_editing_workflows(state)
await run_keypress_dispatch_workflow(state)
await await_with_progress(
"scenario/playwright-and-cdp-keypress",
run_keypress_dispatch_workflow(state),
timeout_seconds=30,
)
await run_cdp_control_key_name_workflow(state)
await run_cdp_input_navigation_replacement_workflows(state)
await run_mouse_event_workflows(state)
Expand Down Expand Up @@ -976,10 +981,10 @@ async def run_keyboard_editing_workflows(state: SmokeState) -> None:


async def run_keypress_dispatch_workflow(state: SmokeState) -> None:
page = await state.context.new_page()
page = await await_with_progress("keypress/new-page", state.context.new_page())
session = None
try:
await page.set_content("""
await await_with_progress("keypress/set-content", page.set_content("""
<input id="field">
<script>
window.__keyEvents = [];
Expand All @@ -992,8 +997,10 @@ async def run_keypress_dispatch_workflow(state: SmokeState) -> None:
});
}
</script>
""")
session = await state.context.new_cdp_session(page)
"""))
session = await await_with_progress(
"keypress/new-cdp-session", state.context.new_cdp_session(page),
)
full_sequence = ["keydown", "keypress", "beforeinput", "input", "keyup"]

async def reset(cancel_at: bool = False) -> None:
Expand Down Expand Up @@ -1045,8 +1052,8 @@ async def check(value: str, event_types: list[str], label: str) -> None:
state.record("playwright_and_cdp_keypress_dispatch")
finally:
if session is not None:
await session.detach()
await page.close()
await await_with_progress("keypress/detach", session.detach(), timeout_seconds=5)
await await_with_progress("keypress/close-page", page.close(), timeout_seconds=5)


async def run_cdp_control_key_name_workflow(state: SmokeState) -> None:
Expand Down
2 changes: 2 additions & 0 deletions moli-core/src/page/command_dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,8 @@ impl Page {
pub(super) fn page_reply_kind(reply: &RendererPageReply) -> &'static str {
match reply {
RendererPageReply::RuntimeEvaluationResult(_) => "a runtime evaluation result reply",
RendererPageReply::ElementClickPreparation(_) => "an element click preparation reply",
RendererPageReply::ElementClickDispatch(_) => "an element click dispatch reply",
RendererPageReply::Bool(_) => "a bool reply",
RendererPageReply::OptionalBool(_) => "an optional bool reply",
RendererPageReply::InputDispatchOutcome(_) => "an input dispatch outcome reply",
Expand Down
36 changes: 36 additions & 0 deletions moli-core/src/page/input_support.rs
Original file line number Diff line number Diff line change
Expand Up @@ -519,3 +519,39 @@ impl PageInputExt for Page {
.await
}
}

impl Page {
pub fn start_prepare_element_click(
&self,
inspector_session_id: Option<String>,
object_id: String,
) -> Result<PendingPageCommand> {
self.start_page_command(RendererPageCommand::prepare_element_click(
inspector_session_id,
object_id,
))
}

pub fn start_dispatch_prepared_element_click(
&self,
click: super::RendererPreparedPointerClick,
) -> Result<PendingPageCommand> {
self.start_page_command(RendererPageCommand::DispatchPreparedElementClick(click))
}
}

#[doc(hidden)]
pub fn decode_element_click_preparation_completion(
completion: RendererCommandTurnCompletion,
) -> Result<Result<super::RendererElementClickTarget, super::RendererElementClickError>> {
expect_page_reply!(settled_input_reply(completion)?, "prepare element click", "element click preparation",
RendererPageReply::ElementClickPreparation(preparation) => Ok(preparation))
}

#[doc(hidden)]
pub fn decode_element_click_dispatch_completion(
completion: RendererCommandTurnCompletion,
) -> Result<Result<RendererInputDispatchOutcome, super::RendererElementClickError>> {
expect_page_reply!(settled_input_reply(completion)?, "dispatch element click", "element click dispatch",
RendererPageReply::ElementClickDispatch(outcome) => Ok(outcome))
}
7 changes: 6 additions & 1 deletion moli-core/src/page/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ pub use dom_protocol_support::{
RENDERER_BACKEND_NODE_ID_START, is_renderer_backend_node_id,
};
pub use input_support::{
PageInputExt, decode_input_dispatch_outcome_completion, decode_insert_text_completion,
PageInputExt, decode_element_click_dispatch_completion,
decode_element_click_preparation_completion, decode_input_dispatch_outcome_completion,
decode_insert_text_completion,
};
pub use moli_page_types::DomScrollIntoViewRect;
pub use moli_page_types::{
Expand Down Expand Up @@ -140,6 +142,9 @@ pub use moli_renderer_v8::{
RendererAppManifestQueryResult, RendererAppManifestRelatedApplication,
RendererAppManifestShortcut, RendererPreparedAppManifestLoad,
};
pub use moli_renderer_v8::{
RendererElementClickError, RendererElementClickTarget, RendererPreparedPointerClick,
};
pub use navigation_diagnostics::{NavigationRedirect, NavigationResponse};
pub use protocol_support::{
BidiPreloadChannelHandoff, ChildFrameAttachmentSnapshot, ChildFrameDetachmentSnapshot,
Expand Down
Loading
Loading