use eoka::{ActionOptions, Browser, Expectation, LocatorSpec};
#[tokio::test]
#[ignore = "requires Chrome"]
async fn test_click_element() {
let browser = Browser::launch().await.expect("Failed to launch browser");
let page = browser
.new_page("about:blank")
.await
.expect("Failed to create page");
page.goto(
r#"data:text/html,
<button id="btn" onclick="this.textContent = 'Clicked!'">Click Me</button>
"#,
)
.await
.expect("Failed to navigate");
page.with_action_options(ActionOptions::expecting(Expectation::Text {
target: LocatorSpec::css("#btn"),
value: "Clicked!".into(),
contains: false,
}))
.click("#btn")
.await
.expect("Failed to click");
page.wait(100).await;
let content = page.content().await.expect("Failed to get content");
assert!(content.contains("Clicked!"));
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
#[ignore = "requires Chrome"]
async fn test_hover() {
let browser = Browser::launch().await.expect("Failed to launch browser");
let page = browser
.new_page("about:blank")
.await
.expect("Failed to create page");
page.goto("data:text/html,<div id='target' style='width:100px;height:100px;background:blue'></div><script>window.hovered=false;document.getElementById('target').onmouseenter=()=>{window.hovered=true};</script>")
.await
.expect("Failed to navigate");
page.wait(200).await;
page.hover("#target").await.expect("Failed to hover");
let hovered: bool = page
.evaluate("window.hovered")
.await
.expect("Failed to evaluate");
assert!(hovered);
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
#[ignore = "requires Chrome"]
async fn test_press_key() {
let browser = Browser::launch().await.expect("Failed to launch browser");
let page = browser
.new_page("about:blank")
.await
.expect("Failed to create page");
page.goto(
r#"data:text/html,
<input type="text" id="input" autofocus><p id="result"></p>
<script>
window.lastKey = '';
document.getElementById('input').addEventListener('keydown', (e) => {
window.lastKey = e.key; document.getElementById('result').textContent=e.key;
});
</script>
"#,
)
.await
.expect("Failed to navigate");
page.wait(100).await;
page.with_action_options(ActionOptions::expecting(Expectation::Text {
target: LocatorSpec::css("#result"),
value: "Enter".into(),
contains: false,
}))
.press_key("Enter")
.await
.expect("Failed to press key");
let key: String = page
.evaluate("window.lastKey")
.await
.expect("Failed to evaluate");
assert_eq!(key, "Enter");
page.with_action_options(ActionOptions::expecting(Expectation::Text {
target: LocatorSpec::css("#result"),
value: "Tab".into(),
contains: false,
}))
.press_key("Tab")
.await
.expect("Failed to press tab");
let key: String = page
.evaluate("window.lastKey")
.await
.expect("Failed to evaluate");
assert_eq!(key, "Tab");
browser.close().await.expect("Failed to close browser");
}