#![cfg(feature = "integration")]
mod common;
use viewpoint_core::{Browser, DocumentLoadState, MouseButton};
use common::init_tracing;
#[tokio::test]
async fn test_keyboard_press() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://httpbin.org/forms/post")
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let input = page.locator("input[name='custname']");
input.focus().await.expect("Failed to focus");
page.keyboard()
.press("a")
.await
.expect("Failed to press key");
page.keyboard()
.press("b")
.await
.expect("Failed to press key");
page.keyboard()
.press("c")
.await
.expect("Failed to press key");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_keyboard_type_text() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://httpbin.org/forms/post")
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let input = page.locator("input[name='custname']");
input.focus().await.expect("Failed to focus");
page.keyboard()
.type_text("Hello World")
.await
.expect("Failed to type text");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_keyboard_insert_text() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://httpbin.org/forms/post")
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let input = page.locator("input[name='custname']");
input.focus().await.expect("Failed to focus");
page.keyboard()
.insert_text("Inserted Text")
.await
.expect("Failed to insert text");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_keyboard_modifiers() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://httpbin.org/forms/post")
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let input = page.locator("input[name='custname']");
input.focus().await.expect("Failed to focus");
page.keyboard()
.down("Shift")
.await
.expect("Failed to press Shift");
page.keyboard().press("a").await.expect("Failed to press A");
page.keyboard()
.up("Shift")
.await
.expect("Failed to release Shift");
page.keyboard().press("b").await.expect("Failed to press b");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_keyboard_combinations() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://httpbin.org/forms/post")
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let input = page.locator("input[name='custname']");
input.focus().await.expect("Failed to focus");
input.fill("Test Text").await.expect("Failed to fill");
page.keyboard()
.press("Control+a")
.await
.expect("Failed to press Ctrl+A");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_mouse_move() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.mouse()
.move_(100.0, 200.0)
.send()
.await
.expect("Failed to move mouse");
page.mouse()
.move_(200.0, 300.0)
.steps(5)
.send()
.await
.expect("Failed to move mouse with steps");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_mouse_click() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.mouse()
.click(100.0, 200.0)
.send()
.await
.expect("Failed to click");
page.mouse()
.click(150.0, 200.0)
.button(MouseButton::Right)
.send()
.await
.expect("Failed to right-click");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_mouse_dblclick() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.mouse()
.dblclick(100.0, 200.0)
.await
.expect("Failed to dblclick");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_mouse_wheel() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.mouse()
.move_(100.0, 100.0)
.send()
.await
.expect("Failed to move mouse");
page.mouse()
.wheel(0.0, 100.0)
.await
.expect("Failed to scroll");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_mouse_down_up() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.mouse()
.move_(100.0, 100.0)
.send()
.await
.expect("Failed to move");
page.mouse()
.down()
.send()
.await
.expect("Failed to mouse down");
page.mouse()
.move_(200.0, 200.0)
.steps(5)
.send()
.await
.expect("Failed to move while held");
page.mouse().up().send().await.expect("Failed to mouse up");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_touchscreen_tap() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
let result = page.touchscreen().tap(100.0, 200.0).await;
let _ = result;
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_page_drag_and_drop() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
let html = r#"data:text/html,
<html><body>
<div id="source" style="width:100px;height:100px;background:red;position:absolute;left:0;top:0;">Source</div>
<div id="target" style="width:100px;height:100px;background:blue;position:absolute;left:200px;top:0;">Target</div>
</body></html>
"#;
page.goto(html)
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
page.drag_and_drop("#source", "#target")
.send()
.await
.expect("Failed to drag and drop");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_locator_drag_to() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
let html = r#"data:text/html,
<html><body>
<div id="source" style="width:100px;height:100px;background:red;position:absolute;left:0;top:0;">Source</div>
<div id="target" style="width:100px;height:100px;background:blue;position:absolute;left:200px;top:0;">Target</div>
</body></html>
"#;
page.goto(html)
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let source = page.locator("#source");
let target = page.locator("#target");
source
.drag_to(&target)
.await
.expect("Failed to drag to target");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_locator_tap() {
init_tracing();
let browser = Browser::launch()
.headless(true)
.launch()
.await
.expect("Failed to launch browser");
let context = browser
.new_context()
.await
.expect("Failed to create context");
let page = context.new_page().await.expect("Failed to create page");
let html = r#"data:text/html,
<html><body>
<button id="btn" onclick="window.tapped=true">Tap Me</button>
</body></html>
"#;
page.goto(html)
.wait_until(DocumentLoadState::Load)
.goto()
.await
.expect("Failed to navigate");
let button = page.locator("#btn");
let result = button.tap().send().await;
let _ = result;
browser.close().await.expect("Failed to close browser");
}